From 52c0715b1590e4d908241db0d23d9cdccd3afbf5 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 8 May 2018 11:23:49 +0200 Subject: [PATCH] Add 'NONE-CKUBU2'. --- NONE-CKUBU2/README.txt | 25 + NONE-CKUBU2/aiccu.NONE-CKUBU | 11 + NONE-CKUBU2/aiccu.conf.NONE-CKUBU | 79 + NONE-CKUBU2/bin/clean_log_files.sh | 1 + NONE-CKUBU2/bin/os-upgrade.sh | 1 + NONE-CKUBU2/bin/test_email.sh | 1 + NONE-CKUBU2/bind/bind.keys | 69 + NONE-CKUBU2/bind/bind.keys.dpkg-old | 49 + NONE-CKUBU2/bind/db.0 | 12 + NONE-CKUBU2/bind/db.127 | 13 + NONE-CKUBU2/bind/db.255 | 12 + NONE-CKUBU2/bind/db.empty | 14 + NONE-CKUBU2/bind/db.local | 14 + NONE-CKUBU2/bind/db.root | 90 + NONE-CKUBU2/bind/db.root.dpkg-old | 87 + NONE-CKUBU2/bind/named.conf | 11 + NONE-CKUBU2/bind/named.conf.default-zones | 30 + NONE-CKUBU2/bind/named.conf.local | 9 + NONE-CKUBU2/bind/named.conf.local.INSTALL | 8 + NONE-CKUBU2/bind/named.conf.options | 86 + NONE-CKUBU2/bind/named.conf.options.INSTALL | 20 + NONE-CKUBU2/bind/rndc.key | 4 + NONE-CKUBU2/bind/zones.rfc1918 | 20 + NONE-CKUBU2/chap-secrets.NONE-CKUBU | 51 + NONE-CKUBU2/cron_root.NONE-CKUBU | 35 + NONE-CKUBU2/ddclient.conf.NONE-CKUBU | 11 + .../default_isc-dhcp-server.NONE-CKUBU | 21 + NONE-CKUBU2/dhcpd.conf.NONE-CKUBU | 109 + NONE-CKUBU2/dhcpd6.conf.NONE-CKUBU | 102 + NONE-CKUBU2/email_notice.NONE-CKUBU | 42 + NONE-CKUBU2/generic.NONE-CKUBU | 3 + NONE-CKUBU2/generic.db.NONE-CKUBU | Bin 0 -> 12288 bytes NONE-CKUBU2/hostapd.conf.NONE-CKUBU | 138 + NONE-CKUBU2/hostname.NONE-CKUBU | 1 + NONE-CKUBU2/hosts.NONE-CKUBU | 9 + NONE-CKUBU2/igmpproxy.conf.NONE-CKUBU | 75 + NONE-CKUBU2/interfaces.NONE-CKUBU | 16 + NONE-CKUBU2/ipt-firewall.service.NONE-CKUBU | 14 + NONE-CKUBU2/ipt-firewall/ban_ipv4.list.sample | 22 + NONE-CKUBU2/ipt-firewall/default_ports.conf | 44 + .../ipt-firewall/include_functions.conf | 113 + NONE-CKUBU2/ipt-firewall/interfaces_ipv4.conf | 49 + .../ipt-firewall/load_modules_ipv4.conf | 36 + .../ipt-firewall/load_modules_ipv6.conf | 9 + NONE-CKUBU2/ipt-firewall/logging_ipv4.conf | 40 + NONE-CKUBU2/ipt-firewall/logging_ipv6.conf | 40 + NONE-CKUBU2/ipt-firewall/main_ipv4.conf | 1357 ++++ .../ipt-firewall/post_decalrations.conf | 505 ++ NONE-CKUBU2/isc-dhcp6-server.NONE-CKUBU | 116 + NONE-CKUBU2/mailname.NONE-CKUBU | 1 + NONE-CKUBU2/main.cf.NONE-CKUBU | 70 + NONE-CKUBU2/openvpn/update-resolv-conf | 54 + NONE-CKUBU2/pap-secrets.NONE-CKUBU | 89 + NONE-CKUBU2/peers/dsl-provider | 19 + NONE-CKUBU2/peers/provider | 35 + NONE-CKUBU2/radvd.conf.NONE-CKUBU | 29 + NONE-CKUBU2/rc.local.NONE-CKUBU | 18 + NONE-CKUBU2/resolv.conf.NONE-CKUBU | 3 + NONE-CKUBU2/sasl_passwd.NONE-CKUBU | 1 + NONE-CKUBU2/sasl_passwd.db.NONE-CKUBU | Bin 0 -> 3072 bytes NONE-CKUBU2/sbin/disk-action | 55 + NONE-CKUBU2/sbin/ipt-firewall-gateway | 4132 +++++++++++++ NONE-CKUBU2/sbin/ipt-firewall-gateway.ALT | 3713 +++++++++++ NONE-CKUBU2/sbin/rebind | 20 + NONE-CKUBU2/sbin/synctime | 23 + NONE-CKUBU2/sbin/tmpsize | 8 + NONE-CKUBU2/sbin/usb-leds-on-off | 5 + .../src/igmpproxy/igmpproxy-0.1.tar.gz | Bin 0 -> 140159 bytes .../src/igmpproxy/igmpproxy-0.1/AUTHORS | 9 + .../src/igmpproxy/igmpproxy-0.1/COPYING | 28 + .../src/igmpproxy/igmpproxy-0.1/ChangeLog | 317 + .../src/igmpproxy/igmpproxy-0.1/GPL.txt | 286 + .../src/igmpproxy/igmpproxy-0.1/INSTALL | 302 + .../src/igmpproxy/igmpproxy-0.1/Makefile | 739 +++ .../src/igmpproxy/igmpproxy-0.1/Makefile.am | 10 + .../src/igmpproxy/igmpproxy-0.1/Makefile.in | 739 +++ NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/NEWS | 4 + .../src/igmpproxy/igmpproxy-0.1/README | 10 + .../src/igmpproxy/igmpproxy-0.1/Stanford.txt | 48 + .../src/igmpproxy/igmpproxy-0.1/aclocal.m4 | 951 +++ .../src/igmpproxy/igmpproxy-0.1/config.guess | 1554 +++++ .../src/igmpproxy/igmpproxy-0.1/config.h | 29 + .../src/igmpproxy/igmpproxy-0.1/config.h.in | 28 + .../src/igmpproxy/igmpproxy-0.1/config.log | 559 ++ .../src/igmpproxy/igmpproxy-0.1/config.status | 1232 ++++ .../src/igmpproxy/igmpproxy-0.1/config.sub | 1717 ++++++ .../src/igmpproxy/igmpproxy-0.1/configure | 5469 +++++++++++++++++ .../src/igmpproxy/igmpproxy-0.1/configure.ac | 35 + .../src/igmpproxy/igmpproxy-0.1/depcomp | 630 ++ .../src/igmpproxy/igmpproxy-0.1/doc/Makefile | 447 ++ .../igmpproxy/igmpproxy-0.1/doc/Makefile.am | 1 + .../igmpproxy/igmpproxy-0.1/doc/Makefile.in | 447 ++ .../igmpproxy/igmpproxy-0.1/doc/igmpproxy.8 | 81 + .../igmpproxy-0.1/doc/igmpproxy.8.in | 81 + .../igmpproxy-0.1/doc/igmpproxy.conf.5 | 146 + .../igmpproxy-0.1/doc/igmpproxy.conf.5.in | 146 + .../igmpproxy/igmpproxy-0.1/igmpproxy.conf | 46 + .../src/igmpproxy/igmpproxy-0.1/install-sh | 520 ++ .../src/igmpproxy/igmpproxy-0.1/missing | 376 ++ .../igmpproxy-0.1/src/.deps/callout.Po | 320 + .../igmpproxy-0.1/src/.deps/config.Po | 320 + .../igmpproxy-0.1/src/.deps/confread.Po | 320 + .../igmpproxy/igmpproxy-0.1/src/.deps/ifvc.Po | 320 + .../igmpproxy/igmpproxy-0.1/src/.deps/igmp.Po | 320 + .../igmpproxy-0.1/src/.deps/igmpproxy.Po | 320 + .../igmpproxy/igmpproxy-0.1/src/.deps/kern.Po | 320 + .../igmpproxy/igmpproxy-0.1/src/.deps/lib.Po | 320 + .../igmpproxy-0.1/src/.deps/mcgroup.Po | 320 + .../igmpproxy-0.1/src/.deps/mroute-api.Po | 320 + .../igmpproxy-0.1/src/.deps/request.Po | 320 + .../igmpproxy-0.1/src/.deps/rttable.Po | 320 + .../igmpproxy-0.1/src/.deps/syslog.Po | 320 + .../igmpproxy-0.1/src/.deps/udpsock.Po | 320 + .../src/igmpproxy/igmpproxy-0.1/src/Makefile | 493 ++ .../igmpproxy/igmpproxy-0.1/src/Makefile.am | 22 + .../igmpproxy/igmpproxy-0.1/src/Makefile.in | 493 ++ .../src/igmpproxy/igmpproxy-0.1/src/callout.c | 255 + .../src/igmpproxy/igmpproxy-0.1/src/callout.o | Bin 0 -> 10160 bytes .../src/igmpproxy/igmpproxy-0.1/src/config.c | 361 ++ .../src/igmpproxy/igmpproxy-0.1/src/config.o | Bin 0 -> 18692 bytes .../igmpproxy/igmpproxy-0.1/src/confread.c | 213 + .../igmpproxy/igmpproxy-0.1/src/confread.o | Bin 0 -> 7260 bytes .../src/igmpproxy/igmpproxy-0.1/src/ifvc.c | 255 + .../src/igmpproxy/igmpproxy-0.1/src/ifvc.o | Bin 0 -> 13592 bytes .../src/igmpproxy/igmpproxy-0.1/src/igmp.c | 281 + .../src/igmpproxy/igmpproxy-0.1/src/igmp.o | Bin 0 -> 18396 bytes .../src/igmpproxy/igmpproxy-0.1/src/igmpproxy | Bin 0 -> 116949 bytes .../igmpproxy/igmpproxy-0.1/src/igmpproxy.c | 357 ++ .../igmpproxy/igmpproxy-0.1/src/igmpproxy.h | 279 + .../igmpproxy/igmpproxy-0.1/src/igmpproxy.o | Bin 0 -> 20492 bytes .../src/igmpproxy/igmpproxy-0.1/src/kern.c | 140 + .../src/igmpproxy/igmpproxy-0.1/src/kern.o | Bin 0 -> 9564 bytes .../src/igmpproxy/igmpproxy-0.1/src/lib.c | 148 + .../src/igmpproxy/igmpproxy-0.1/src/lib.o | Bin 0 -> 7800 bytes .../src/igmpproxy/igmpproxy-0.1/src/mcgroup.c | 86 + .../src/igmpproxy/igmpproxy-0.1/src/mcgroup.o | Bin 0 -> 8804 bytes .../igmpproxy/igmpproxy-0.1/src/mroute-api.c | 242 + .../igmpproxy/igmpproxy-0.1/src/mroute-api.o | Bin 0 -> 13236 bytes .../igmpproxy-0.1/src/os-dragonfly.h | 14 + .../igmpproxy/igmpproxy-0.1/src/os-freebsd.h | 23 + .../igmpproxy/igmpproxy-0.1/src/os-linux.h | 15 + .../igmpproxy/igmpproxy-0.1/src/os-netbsd.h | 19 + .../igmpproxy/igmpproxy-0.1/src/os-openbsd.h | 21 + .../src/igmpproxy/igmpproxy-0.1/src/os.h | 1 + .../src/igmpproxy/igmpproxy-0.1/src/request.c | 222 + .../src/igmpproxy/igmpproxy-0.1/src/request.o | Bin 0 -> 13448 bytes .../src/igmpproxy/igmpproxy-0.1/src/rttable.c | 662 ++ .../src/igmpproxy/igmpproxy-0.1/src/rttable.o | Bin 0 -> 25624 bytes .../src/igmpproxy/igmpproxy-0.1/src/syslog.c | 62 + .../src/igmpproxy/igmpproxy-0.1/src/syslog.o | Bin 0 -> 5824 bytes .../src/igmpproxy/igmpproxy-0.1/src/udpsock.c | 65 + .../src/igmpproxy/igmpproxy-0.1/src/udpsock.o | Bin 0 -> 7220 bytes .../src/igmpproxy/igmpproxy-0.1/stamp-h1 | 1 + NONE-CKUBU2/src/ipw2100-fw/LICENSE | 207 + NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3-i.fw | Bin 0 -> 201138 bytes NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3-p.fw | Bin 0 -> 196458 bytes NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3.fw | Bin 0 -> 209190 bytes NONE-CKUBU2/src/ipw2100-fw/ipw2100-fw-1.3.tgz | Bin 0 -> 248471 bytes 158 files changed, 38303 insertions(+) create mode 100644 NONE-CKUBU2/README.txt create mode 100644 NONE-CKUBU2/aiccu.NONE-CKUBU create mode 100644 NONE-CKUBU2/aiccu.conf.NONE-CKUBU create mode 120000 NONE-CKUBU2/bin/clean_log_files.sh create mode 120000 NONE-CKUBU2/bin/os-upgrade.sh create mode 120000 NONE-CKUBU2/bin/test_email.sh create mode 100644 NONE-CKUBU2/bind/bind.keys create mode 100644 NONE-CKUBU2/bind/bind.keys.dpkg-old create mode 100644 NONE-CKUBU2/bind/db.0 create mode 100644 NONE-CKUBU2/bind/db.127 create mode 100644 NONE-CKUBU2/bind/db.255 create mode 100644 NONE-CKUBU2/bind/db.empty create mode 100644 NONE-CKUBU2/bind/db.local create mode 100644 NONE-CKUBU2/bind/db.root create mode 100644 NONE-CKUBU2/bind/db.root.dpkg-old create mode 100644 NONE-CKUBU2/bind/named.conf create mode 100644 NONE-CKUBU2/bind/named.conf.default-zones create mode 100644 NONE-CKUBU2/bind/named.conf.local create mode 100644 NONE-CKUBU2/bind/named.conf.local.INSTALL create mode 100644 NONE-CKUBU2/bind/named.conf.options create mode 100644 NONE-CKUBU2/bind/named.conf.options.INSTALL create mode 100644 NONE-CKUBU2/bind/rndc.key create mode 100644 NONE-CKUBU2/bind/zones.rfc1918 create mode 100644 NONE-CKUBU2/chap-secrets.NONE-CKUBU create mode 100644 NONE-CKUBU2/cron_root.NONE-CKUBU create mode 100644 NONE-CKUBU2/ddclient.conf.NONE-CKUBU create mode 100644 NONE-CKUBU2/default_isc-dhcp-server.NONE-CKUBU create mode 100644 NONE-CKUBU2/dhcpd.conf.NONE-CKUBU create mode 100644 NONE-CKUBU2/dhcpd6.conf.NONE-CKUBU create mode 100755 NONE-CKUBU2/email_notice.NONE-CKUBU create mode 100644 NONE-CKUBU2/generic.NONE-CKUBU create mode 100644 NONE-CKUBU2/generic.db.NONE-CKUBU create mode 100644 NONE-CKUBU2/hostapd.conf.NONE-CKUBU create mode 100644 NONE-CKUBU2/hostname.NONE-CKUBU create mode 100644 NONE-CKUBU2/hosts.NONE-CKUBU create mode 100644 NONE-CKUBU2/igmpproxy.conf.NONE-CKUBU create mode 100644 NONE-CKUBU2/interfaces.NONE-CKUBU create mode 100644 NONE-CKUBU2/ipt-firewall.service.NONE-CKUBU create mode 100644 NONE-CKUBU2/ipt-firewall/ban_ipv4.list.sample create mode 100644 NONE-CKUBU2/ipt-firewall/default_ports.conf create mode 100644 NONE-CKUBU2/ipt-firewall/include_functions.conf create mode 100644 NONE-CKUBU2/ipt-firewall/interfaces_ipv4.conf create mode 100644 NONE-CKUBU2/ipt-firewall/load_modules_ipv4.conf create mode 100644 NONE-CKUBU2/ipt-firewall/load_modules_ipv6.conf create mode 100644 NONE-CKUBU2/ipt-firewall/logging_ipv4.conf create mode 100644 NONE-CKUBU2/ipt-firewall/logging_ipv6.conf create mode 100644 NONE-CKUBU2/ipt-firewall/main_ipv4.conf create mode 100644 NONE-CKUBU2/ipt-firewall/post_decalrations.conf create mode 100755 NONE-CKUBU2/isc-dhcp6-server.NONE-CKUBU create mode 100644 NONE-CKUBU2/mailname.NONE-CKUBU create mode 100644 NONE-CKUBU2/main.cf.NONE-CKUBU create mode 100755 NONE-CKUBU2/openvpn/update-resolv-conf create mode 100644 NONE-CKUBU2/pap-secrets.NONE-CKUBU create mode 100644 NONE-CKUBU2/peers/dsl-provider create mode 100644 NONE-CKUBU2/peers/provider create mode 100644 NONE-CKUBU2/radvd.conf.NONE-CKUBU create mode 100755 NONE-CKUBU2/rc.local.NONE-CKUBU create mode 100644 NONE-CKUBU2/resolv.conf.NONE-CKUBU create mode 100644 NONE-CKUBU2/sasl_passwd.NONE-CKUBU create mode 100644 NONE-CKUBU2/sasl_passwd.db.NONE-CKUBU create mode 100755 NONE-CKUBU2/sbin/disk-action create mode 100755 NONE-CKUBU2/sbin/ipt-firewall-gateway create mode 100755 NONE-CKUBU2/sbin/ipt-firewall-gateway.ALT create mode 100755 NONE-CKUBU2/sbin/rebind create mode 100755 NONE-CKUBU2/sbin/synctime create mode 100755 NONE-CKUBU2/sbin/tmpsize create mode 100755 NONE-CKUBU2/sbin/usb-leds-on-off create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1.tar.gz create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/AUTHORS create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/COPYING create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/ChangeLog create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/GPL.txt create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/INSTALL create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.am create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.in create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/NEWS create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/README create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Stanford.txt create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/aclocal.m4 create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.guess create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h.in create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.log create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.status create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.sub create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure.ac create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/depcomp create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.am create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.in create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8 create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8.in create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5 create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5.in create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/igmpproxy.conf create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/install-sh create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/missing create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/callout.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/config.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/confread.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/ifvc.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmp.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmpproxy.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/kern.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/lib.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mcgroup.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mroute-api.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/request.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/rttable.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/syslog.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/udpsock.Po create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.am create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.in create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/config.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/config.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/ifvc.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/ifvc.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmp.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmp.o create mode 100755 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/kern.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/kern.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mcgroup.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mcgroup.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-dragonfly.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-freebsd.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-linux.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-netbsd.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-openbsd.h create mode 120000 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os.h create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/syslog.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/syslog.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.c create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.o create mode 100644 NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/stamp-h1 create mode 100644 NONE-CKUBU2/src/ipw2100-fw/LICENSE create mode 100644 NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3-i.fw create mode 100644 NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3-p.fw create mode 100644 NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3.fw create mode 100644 NONE-CKUBU2/src/ipw2100-fw/ipw2100-fw-1.3.tgz diff --git a/NONE-CKUBU2/README.txt b/NONE-CKUBU2/README.txt new file mode 100644 index 0000000..2f1b32c --- /dev/null +++ b/NONE-CKUBU2/README.txt @@ -0,0 +1,25 @@ + +Notice: + You have to change some configuration files becaus the because + the configuration of network interfaces must not be equal. + + !! Take care, to use the right device names !! + Maybe they are called i.e. 'enp0sXX', but you can rename it. + See also : README.rename.netdevices + + For the backup gateway host: + eth1 --> LAN + eth2 --> WAN or ppp0 (DSL device) + + eth0 --> WLAN or second LAN or what ever + or + br0 --> WLAN or second LAN or what ever + + + So you have to change the following files + dsl-provider.NONE-CKUBU: ppp0 comes over eth2 + interfaces.NONE-CKUBU: see above + default_isc-dhcp-server.NONE-CKUBU + ipt-firewall.NONE-CKUBU: LAN device (mostly ) = eth1 + second LAN WLAN or what ever (if present) = eth0 + diff --git a/NONE-CKUBU2/aiccu.NONE-CKUBU b/NONE-CKUBU2/aiccu.NONE-CKUBU new file mode 100644 index 0000000..5482d8f --- /dev/null +++ b/NONE-CKUBU2/aiccu.NONE-CKUBU @@ -0,0 +1,11 @@ +# This is a configuration file for /etc/init.d/aiccu; it allows you to +# perform common modifications to the behavior of the aiccu daemon +# startup without editing the init script (and thus getting prompted +# by dpkg on upgrades). We all love dpkg prompts. + +# Arguments to pass to aiccu daemon. +DAEMON_ARGS="" + +# Run aiccu at startup ? +AICCU_ENABLED=Yes + diff --git a/NONE-CKUBU2/aiccu.conf.NONE-CKUBU b/NONE-CKUBU2/aiccu.conf.NONE-CKUBU new file mode 100644 index 0000000..c1c27a7 --- /dev/null +++ b/NONE-CKUBU2/aiccu.conf.NONE-CKUBU @@ -0,0 +1,79 @@ +# Under control from debconf, please use 'dpkg-reconfigure aiccu' to reconfigure +# AICCU Configuration + +# Login information (defaults: none) +username CKM11-SIXXS +password zLkJIZF0 + +# Protocol and server to use for setting up the tunnel (defaults: none) +protocol tic +server tic.sixxs.net + +# Interface names to use (default: aiccu) +# ipv6_interface is the name of the interface that will be used as a tunnel interface. +# On *BSD the ipv6_interface should be set to gifX (eg gif0) for proto-41 tunnels +# or tunX (eg tun0) for AYIYA tunnels. +ipv6_interface sixxs + +# The tunnel_id to use (default: none) +# (only required when there are multiple tunnels in the list) +tunnel_id T129038 + +# Be verbose? (default: false) +#verbose false + +# Daemonize? (default: true) +# Set to false if you want to see any output +# When true output goes to syslog +# +# WARNING: never run AICCU from DaemonTools or a similar automated +# 'restart' tool/script. When AICCU does not start, it has a reason +# not to start which it gives on either the stdout or in the (sys)log +# file. The TIC server *will* automatically disable accounts which +# are detected to run in this mode. +# +daemonize true + +# Automatic Login and Tunnel activation? +automatic true + +# Require TLS? +# When set to true, if TLS is not supported on the server +# the TIC transaction will fail. +# When set to false, it will try a starttls, when that is +# not supported it will continue. +# In any case if AICCU is build with TLS support it will +# try to do a 'starttls' to the TIC server to see if that +# is supported. +requiretls false + +# PID File +#pidfile /var/run/aiccu.pid + +# Add a default route (default: true) +#defaultroute true + +# Script to run after setting up the interfaces (default: none) +#setupscript /usr/local/etc/aiccu-subnets.sh + +# Make heartbeats (default true) +# In general you don't want to turn this off +# Of course only applies to AYIYA and heartbeat tunnels not to static ones +#makebeats true + +# Don't configure anything (default: false) +#noconfigure true + +# Behind NAT (default: false) +# Notify the user that a NAT-kind network is detected +#behindnat true + +# Local IPv4 Override (default: none) +# Overrides the IPv4 parameter received from TIC +# This allows one to configure a NAT into "DMZ" mode and then +# forwarding the proto-41 packets to an internal host. +# +# This is only needed for static proto-41 tunnels! +# AYIYA and heartbeat tunnels don't require this. +#local_ipv4_override + diff --git a/NONE-CKUBU2/bin/clean_log_files.sh b/NONE-CKUBU2/bin/clean_log_files.sh new file mode 120000 index 0000000..4a65412 --- /dev/null +++ b/NONE-CKUBU2/bin/clean_log_files.sh @@ -0,0 +1 @@ +admin-stuff/clean_log_files.sh \ No newline at end of file diff --git a/NONE-CKUBU2/bin/os-upgrade.sh b/NONE-CKUBU2/bin/os-upgrade.sh new file mode 120000 index 0000000..02ddc66 --- /dev/null +++ b/NONE-CKUBU2/bin/os-upgrade.sh @@ -0,0 +1 @@ +admin-stuff/os-upgrade.sh \ No newline at end of file diff --git a/NONE-CKUBU2/bin/test_email.sh b/NONE-CKUBU2/bin/test_email.sh new file mode 120000 index 0000000..86f3e17 --- /dev/null +++ b/NONE-CKUBU2/bin/test_email.sh @@ -0,0 +1 @@ +admin-stuff/test_email.sh \ No newline at end of file diff --git a/NONE-CKUBU2/bind/bind.keys b/NONE-CKUBU2/bind/bind.keys new file mode 100644 index 0000000..db22d4b --- /dev/null +++ b/NONE-CKUBU2/bind/bind.keys @@ -0,0 +1,69 @@ +# The bind.keys file is used to override the built-in DNSSEC trust anchors +# which are included as part of BIND 9. As of the current release, the only +# trust anchors it contains are those for the DNS root zone ("."), and for +# the ISC DNSSEC Lookaside Validation zone ("dlv.isc.org"). Trust anchors +# for any other zones MUST be configured elsewhere; if they are configured +# here, they will not be recognized or used by named. +# +# The built-in trust anchors are provided for convenience of configuration. +# They are not activated within named.conf unless specifically switched on. +# To use the built-in root key, set "dnssec-validation auto;" in +# named.conf options. To use the built-in DLV key, set +# "dnssec-lookaside auto;". Without these options being set, +# the keys in this file are ignored. +# +# This file is NOT expected to be user-configured. +# +# These keys are current as of Feburary 2017. If any key fails to +# initialize correctly, it may have expired. In that event you should +# replace this file with a current version. The latest version of +# bind.keys can always be obtained from ISC at https://www.isc.org/bind-keys. + +managed-keys { + # ISC DLV: See https://www.isc.org/solutions/dlv for details. + # + # NOTE: The ISC DLV zone is being phased out as of February 2017; + # the key will remain in place but the zone will be otherwise empty. + # Configuring "dnssec-lookaside auto;" to activate this key is + # harmless, but is no longer useful and is not recommended. + dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 + brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ + 1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 + ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk + Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM + QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt + TDN0YUuWrBNh"; + + # ROOT KEYS: See https://data.iana.org/root-anchors/root-anchors.xml + # for current trust anchor information. + # + # These keys are activated by setting "dnssec-validation auto;" + # in named.conf. + # + # This key (19036) is to be phased out starting in 2017. It will + # remain in the root zone for some time after its successor key + # has been added. It will remain this file until it is removed from + # the root zone. + . initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF + FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX + bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD + X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz + W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS + Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq + QxA+Uk1ihz0="; + + # This key (20326) is to be published in the root zone in 2017. + # Servers which were already using the old key (19036) should + # roll seamlessly to this new one via RFC 5011 rollover. Servers + # being set up for the first time can use the contents of this + # file as initializing keys; thereafter, the keys in the + # managed key database will be trusted and maintained + # automatically. + . initial-key 257 3 8 "AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3 + +/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kv + ArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF + 0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+e + oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd + RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwN + R1AkUTV74bU="; +}; diff --git a/NONE-CKUBU2/bind/bind.keys.dpkg-old b/NONE-CKUBU2/bind/bind.keys.dpkg-old new file mode 100644 index 0000000..b003c53 --- /dev/null +++ b/NONE-CKUBU2/bind/bind.keys.dpkg-old @@ -0,0 +1,49 @@ +/* $Id: bind.keys,v 1.5.42.2 2011-01-04 19:14:48 each Exp $ */ +# The bind.keys file is used to override built-in DNSSEC trust anchors +# which are included as part of BIND 9. As of the current release (BIND +# 9.7), the only trust anchor it sets is the one for the ISC DNSSEC +# Lookaside Validation zone ("dlv.isc.org"). Trust anchors for any other +# zones MUST be configured elsewhere; if they are configured here, they +# will not be recognized or used by named. +# +# This file also contains a copy of the trust anchor for the DNS root zone +# ("."). However, named does not use it; it is provided here for +# informational purposes only. To switch on DNSSEC validation at the +# root, the root key below can be copied into named.conf. +# +# The built-in DLV trust anchor in this file is used directly by named. +# However, it is not activated unless specifically switched on. To use +# the DLV key, set "dnssec-lookaside auto;" in the named.conf options. +# Without this option being set, the key in this file is ignored. +# +# This file is NOT expected to be user-configured. +# +# These keys are current as of January 2011. If any key fails to +# initialize correctly, it may have expired. In that event you should +# replace this file with a current version. The latest version of +# bind.keys can always be obtained from ISC at https://www.isc.org/bind-keys. + +managed-keys { + # ISC DLV: See https://www.isc.org/solutions/dlv for details. + # NOTE: This key is activated by setting "dnssec-lookaside auto;" + # in named.conf. + dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 + brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ + 1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 + ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk + Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM + QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt + TDN0YUuWrBNh"; + + # ROOT KEY: See https://data.iana.org/root-anchors/root-anchors.xml + # for current trust anchor information. + # NOTE: This key is activated by setting "dnssec-validation auto;" + # in named.conf. + . initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF + FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX + bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD + X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz + W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS + Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq + QxA+Uk1ihz0="; +}; diff --git a/NONE-CKUBU2/bind/db.0 b/NONE-CKUBU2/bind/db.0 new file mode 100644 index 0000000..e3aabdb --- /dev/null +++ b/NONE-CKUBU2/bind/db.0 @@ -0,0 +1,12 @@ +; +; BIND reverse data file for broadcast zone +; +$TTL 604800 +@ IN SOA localhost. root.localhost. ( + 1 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS localhost. diff --git a/NONE-CKUBU2/bind/db.127 b/NONE-CKUBU2/bind/db.127 new file mode 100644 index 0000000..cd05bef --- /dev/null +++ b/NONE-CKUBU2/bind/db.127 @@ -0,0 +1,13 @@ +; +; BIND reverse data file for local loopback interface +; +$TTL 604800 +@ IN SOA localhost. root.localhost. ( + 1 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS localhost. +1.0.0 IN PTR localhost. diff --git a/NONE-CKUBU2/bind/db.255 b/NONE-CKUBU2/bind/db.255 new file mode 100644 index 0000000..e3aabdb --- /dev/null +++ b/NONE-CKUBU2/bind/db.255 @@ -0,0 +1,12 @@ +; +; BIND reverse data file for broadcast zone +; +$TTL 604800 +@ IN SOA localhost. root.localhost. ( + 1 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS localhost. diff --git a/NONE-CKUBU2/bind/db.empty b/NONE-CKUBU2/bind/db.empty new file mode 100644 index 0000000..8a12858 --- /dev/null +++ b/NONE-CKUBU2/bind/db.empty @@ -0,0 +1,14 @@ +; BIND reverse data file for empty rfc1918 zone +; +; DO NOT EDIT THIS FILE - it is used for multiple zones. +; Instead, copy it, edit named.conf, and use that copy. +; +$TTL 86400 +@ IN SOA localhost. root.localhost. ( + 1 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 86400 ) ; Negative Cache TTL +; +@ IN NS localhost. diff --git a/NONE-CKUBU2/bind/db.local b/NONE-CKUBU2/bind/db.local new file mode 100644 index 0000000..2f272d4 --- /dev/null +++ b/NONE-CKUBU2/bind/db.local @@ -0,0 +1,14 @@ +; +; BIND data file for local loopback interface +; +$TTL 604800 +@ IN SOA localhost. root.localhost. ( + 2 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS localhost. +@ IN A 127.0.0.1 +@ IN AAAA ::1 diff --git a/NONE-CKUBU2/bind/db.root b/NONE-CKUBU2/bind/db.root new file mode 100644 index 0000000..f0b79d2 --- /dev/null +++ b/NONE-CKUBU2/bind/db.root @@ -0,0 +1,90 @@ +; This file holds the information on root name servers needed to +; initialize cache of Internet domain name servers +; (e.g. reference this file in the "cache . " +; configuration file of BIND domain name servers). +; +; This file is made available by InterNIC +; under anonymous FTP as +; file /domain/named.cache +; on server FTP.INTERNIC.NET +; -OR- RS.INTERNIC.NET +; +; last update: February 17, 2016 +; related version of root zone: 2016021701 +; +; formerly NS.INTERNIC.NET +; +. 3600000 NS A.ROOT-SERVERS.NET. +A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 +A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30 +; +; FORMERLY NS1.ISI.EDU +; +. 3600000 NS B.ROOT-SERVERS.NET. +B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201 +B.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:84::b +; +; FORMERLY C.PSI.NET +; +. 3600000 NS C.ROOT-SERVERS.NET. +C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 +C.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2::c +; +; FORMERLY TERP.UMD.EDU +; +. 3600000 NS D.ROOT-SERVERS.NET. +D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13 +D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2d::d +; +; FORMERLY NS.NASA.GOV +; +. 3600000 NS E.ROOT-SERVERS.NET. +E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 +; +; FORMERLY NS.ISC.ORG +; +. 3600000 NS F.ROOT-SERVERS.NET. +F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 +F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f +; +; FORMERLY NS.NIC.DDN.MIL +; +. 3600000 NS G.ROOT-SERVERS.NET. +G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 +; +; FORMERLY AOS.ARL.ARMY.MIL +; +. 3600000 NS H.ROOT-SERVERS.NET. +H.ROOT-SERVERS.NET. 3600000 A 198.97.190.53 +H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::53 +; +; FORMERLY NIC.NORDU.NET +; +. 3600000 NS I.ROOT-SERVERS.NET. +I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 +I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fe::53 +; +; OPERATED BY VERISIGN, INC. +; +. 3600000 NS J.ROOT-SERVERS.NET. +J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30 +J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:c27::2:30 +; +; OPERATED BY RIPE NCC +; +. 3600000 NS K.ROOT-SERVERS.NET. +K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 +K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1 +; +; OPERATED BY ICANN +; +. 3600000 NS L.ROOT-SERVERS.NET. +L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42 +L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42 +; +; OPERATED BY WIDE +; +. 3600000 NS M.ROOT-SERVERS.NET. +M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 +M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35 +; End of file diff --git a/NONE-CKUBU2/bind/db.root.dpkg-old b/NONE-CKUBU2/bind/db.root.dpkg-old new file mode 100644 index 0000000..d081faa --- /dev/null +++ b/NONE-CKUBU2/bind/db.root.dpkg-old @@ -0,0 +1,87 @@ +; This file holds the information on root name servers needed to +; initialize cache of Internet domain name servers +; (e.g. reference this file in the "cache . " +; configuration file of BIND domain name servers). +; +; This file is made available by InterNIC +; under anonymous FTP as +; file /domain/named.cache +; on server FTP.INTERNIC.NET +; -OR- RS.INTERNIC.NET +; +; last update: Jun 17, 2010 +; related version of root zone: 2010061700 +; +; formerly NS.INTERNIC.NET +; +. 3600000 IN NS A.ROOT-SERVERS.NET. +A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 +A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30 +; +; FORMERLY NS1.ISI.EDU +; +. 3600000 NS B.ROOT-SERVERS.NET. +B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201 +; +; FORMERLY C.PSI.NET +; +. 3600000 NS C.ROOT-SERVERS.NET. +C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 +; +; FORMERLY TERP.UMD.EDU +; +. 3600000 NS D.ROOT-SERVERS.NET. +D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 +; +; FORMERLY NS.NASA.GOV +; +. 3600000 NS E.ROOT-SERVERS.NET. +E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 +; +; FORMERLY NS.ISC.ORG +; +. 3600000 NS F.ROOT-SERVERS.NET. +F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 +F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2F::F +; +; FORMERLY NS.NIC.DDN.MIL +; +. 3600000 NS G.ROOT-SERVERS.NET. +G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 +; +; FORMERLY AOS.ARL.ARMY.MIL +; +. 3600000 NS H.ROOT-SERVERS.NET. +H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 +H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803F:235 +; +; FORMERLY NIC.NORDU.NET +; +. 3600000 NS I.ROOT-SERVERS.NET. +I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 +I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FE::53 +; +; OPERATED BY VERISIGN, INC. +; +. 3600000 NS J.ROOT-SERVERS.NET. +J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30 +J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30 +; +; OPERATED BY RIPE NCC +; +. 3600000 NS K.ROOT-SERVERS.NET. +K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 +K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FD::1 +; +; OPERATED BY ICANN +; +. 3600000 NS L.ROOT-SERVERS.NET. +L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42 +L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42 +; +; OPERATED BY WIDE +; +. 3600000 NS M.ROOT-SERVERS.NET. +M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 +M.ROOT-SERVERS.NET. 3600000 AAAA 2001:DC3::35 +; End of File diff --git a/NONE-CKUBU2/bind/named.conf b/NONE-CKUBU2/bind/named.conf new file mode 100644 index 0000000..880786a --- /dev/null +++ b/NONE-CKUBU2/bind/named.conf @@ -0,0 +1,11 @@ +// This is the primary configuration file for the BIND DNS server named. +// +// Please read /usr/share/doc/bind9/README.Debian.gz for information on the +// structure of BIND configuration files in Debian, *BEFORE* you customize +// this configuration file. +// +// If you are just adding zones, please do that in /etc/bind/named.conf.local + +include "/etc/bind/named.conf.options"; +include "/etc/bind/named.conf.local"; +include "/etc/bind/named.conf.default-zones"; diff --git a/NONE-CKUBU2/bind/named.conf.default-zones b/NONE-CKUBU2/bind/named.conf.default-zones new file mode 100644 index 0000000..355338b --- /dev/null +++ b/NONE-CKUBU2/bind/named.conf.default-zones @@ -0,0 +1,30 @@ +// prime the server with knowledge of the root servers +zone "." { + type hint; + file "/etc/bind/db.root"; +}; + +// be authoritative for the localhost forward and reverse zones, and for +// broadcast zones as per RFC 1912 + +zone "localhost" { + type master; + file "/etc/bind/db.local"; +}; + +zone "127.in-addr.arpa" { + type master; + file "/etc/bind/db.127"; +}; + +zone "0.in-addr.arpa" { + type master; + file "/etc/bind/db.0"; +}; + +zone "255.in-addr.arpa" { + type master; + file "/etc/bind/db.255"; +}; + + diff --git a/NONE-CKUBU2/bind/named.conf.local b/NONE-CKUBU2/bind/named.conf.local new file mode 100644 index 0000000..a00e259 --- /dev/null +++ b/NONE-CKUBU2/bind/named.conf.local @@ -0,0 +1,9 @@ +// +// Do any local configuration here +// + +// Consider adding the 1918 zones here, if they are not used in your +// organization +//include "/etc/bind/zones.rfc1918"; + + diff --git a/NONE-CKUBU2/bind/named.conf.local.INSTALL b/NONE-CKUBU2/bind/named.conf.local.INSTALL new file mode 100644 index 0000000..7a57b10 --- /dev/null +++ b/NONE-CKUBU2/bind/named.conf.local.INSTALL @@ -0,0 +1,8 @@ +// +// Do any local configuration here +// + +// Consider adding the 1918 zones here, if they are not used in your +// organization +//include "/etc/bind/zones.rfc1918"; + diff --git a/NONE-CKUBU2/bind/named.conf.options b/NONE-CKUBU2/bind/named.conf.options new file mode 100644 index 0000000..19773dd --- /dev/null +++ b/NONE-CKUBU2/bind/named.conf.options @@ -0,0 +1,86 @@ +options { + directory "/var/cache/bind"; + + // If there is a firewall between you and nameservers you want + // to talk to, you may need to fix the firewall to allow multiple + // ports to talk. See http://www.kb.cert.org/vuls/id/800113 + + // If your ISP provided one or more IP addresses for stable + // nameservers, you probably want to use them as forwarders. + // Uncomment the following block, and insert the addresses replacing + // the all-0's placeholder. + + // forwarders { + // 0.0.0.0; + // }; + + //======================================================================== + // If BIND logs error messages about the root key being expired, + // you will need to update your keys. See https://www.isc.org/bind-keys + //======================================================================== + dnssec-validation auto; + + auth-nxdomain no; # conform to RFC1035 + + listen-on port 53 { + 127.0.0.1; + }; + + allow-query { + 127.0.0.1; + }; + + allow-recursion { + 127.0.0.1; + }; + + allow-transfer { none; }; + + listen-on-v6 { + ::1; + }; +}; + +logging { + channel simple_log { + file "/var/log/named/bind.log" versions 3 size 5m; + //severity warning; + severity info; + print-time yes; + print-severity yes; + print-category yes; + }; + channel queries_log { + file "/var/log/named/query.log" versions 10 size 5m; + severity debug; + //severity notice; + print-time yes; + print-severity yes; + print-category no; + }; + channel log_zone_transfers { + file "/var/log/named/axfr.log" versions 5 size 2m; + severity info; + print-time yes; + print-severity yes; + print-category yes; + }; + category resolver { + queries_log; + }; + category queries { + queries_log; + }; + category xfer-in { + log_zone_transfers; + }; + category xfer-out { + log_zone_transfers; + }; + category notify { + log_zone_transfers; + }; + category default{ + simple_log; + }; +}; diff --git a/NONE-CKUBU2/bind/named.conf.options.INSTALL b/NONE-CKUBU2/bind/named.conf.options.INSTALL new file mode 100644 index 0000000..af79758 --- /dev/null +++ b/NONE-CKUBU2/bind/named.conf.options.INSTALL @@ -0,0 +1,20 @@ +options { + directory "/var/cache/bind"; + + // If there is a firewall between you and nameservers you want + // to talk to, you may need to fix the firewall to allow multiple + // ports to talk. See http://www.kb.cert.org/vuls/id/800113 + + // If your ISP provided one or more IP addresses for stable + // nameservers, you probably want to use them as forwarders. + // Uncomment the following block, and insert the addresses replacing + // the all-0's placeholder. + + // forwarders { + // 0.0.0.0; + // }; + + auth-nxdomain no; # conform to RFC1035 + listen-on-v6 { any; }; +}; + diff --git a/NONE-CKUBU2/bind/rndc.key b/NONE-CKUBU2/bind/rndc.key new file mode 100644 index 0000000..48256d5 --- /dev/null +++ b/NONE-CKUBU2/bind/rndc.key @@ -0,0 +1,4 @@ +key "rndc-key" { + algorithm hmac-md5; + secret "p8uEoosC6vrcRj73ribYKg=="; +}; diff --git a/NONE-CKUBU2/bind/zones.rfc1918 b/NONE-CKUBU2/bind/zones.rfc1918 new file mode 100644 index 0000000..03b5546 --- /dev/null +++ b/NONE-CKUBU2/bind/zones.rfc1918 @@ -0,0 +1,20 @@ +zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; + +zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; + +zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; diff --git a/NONE-CKUBU2/chap-secrets.NONE-CKUBU b/NONE-CKUBU2/chap-secrets.NONE-CKUBU new file mode 100644 index 0000000..cb6eeef --- /dev/null +++ b/NONE-CKUBU2/chap-secrets.NONE-CKUBU @@ -0,0 +1,51 @@ +# Secrets for authentication using CHAP +# client server secret IP addresses + + +## - Aktionsbuendnis +"feste-ip9/1TBGC27CYX92@t-online-com.de" * "7FbmJz7L" + +## - Anwaltskanzlei - Karl-Marx_Strasse (anw-km) +"0017005041965502052728690001@t-online.de" * "62812971" + +## - Anwaltskanzlei - Urbanstrasse (anw-urb) +"0019673090265502751343110001@t-online.de" * "85593499" + +## - B3 Bornim +"t-online-com/8TB0LIXKXV82@t-online-com.de" * "38460707" + +## - Fluechlingsrat BRB +"0022044435885511150351780001@t-online.de" * "27475004" + +## - Jonas +"0023866648325511093506040001@t-online.de" * "13635448" + +## - Kanzlei Kiel +## - DSL +"ar0284280107" * "39457541" +## - VDSL +"ab3391185321" * "jhecfmvk" + +## - MBR Berlin +## - DSL +"0019507524965100021004430001@t-online.de" * "76695918" +## - VDSL +"0029741693695511193970180001@t-online.de" * "84616024" + +## - Opferperspektive +"feste-ip3/6TB9UZGGP1GK@t-online-com.de" * "53506202" + +## - ReachOut Berlin +## - first (primary) line +"ar2667509237" * "93925410" +## - second line +"ar1435496252" * "93925410" + +## - Sprachenatelier Berlin +"0021920376975502683262730001@t-online.de" * "52167784" + +## - Warenform +"feste-ip4/7TB02K2HZ4Q3@t-online-com.de" * "EadGl15E" + +## - ckubu +"0025591824365511139967620001@t-online.de" * "67982653" diff --git a/NONE-CKUBU2/cron_root.NONE-CKUBU b/NONE-CKUBU2/cron_root.NONE-CKUBU new file mode 100644 index 0000000..6f59d3b --- /dev/null +++ b/NONE-CKUBU2/cron_root.NONE-CKUBU @@ -0,0 +1,35 @@ +# DO NOT EDIT THIS FILE - edit the master and reinstall. +# (/tmp/crontab.WiXOQE/crontab installed on Sun May 6 17:52:10 2018) +# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) +# Edit this file to introduce tasks to be run by cron. +# +# Each task to run has to be defined through a single line +# indicating with different fields when the task will be run +# and what command to run for the task +# +# To define the time you can provide concrete values for +# minute (m), hour (h), day of month (dom), month (mon), +# and day of week (dow) or use '*' in these fields (for 'any').# +# Notice that tasks will be started based on the cron's system +# daemon's notion of time and timezones. +# +# Output of the crontab jobs (including errors) is sent through +# email to the user the crontab file belongs to (unless redirected). +# +# For example, you can run a backup of all your user accounts +# at 5 a.m every week with: +# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ +# +# For more information see the manual pages of crontab(5) and cron(8) +# +# m h dom mon dow command + +PATH=/root/bin/admin-stuff:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +@reboot systemctl stop isc-dhcp-server +@reboot systemctl stop ipt-firewall + + +# - Copy gateway configuration +# - +13 4 * * * /root/bin/manage-gw-config/copy_gateway-config.sh NONE-CKUBU diff --git a/NONE-CKUBU2/ddclient.conf.NONE-CKUBU b/NONE-CKUBU2/ddclient.conf.NONE-CKUBU new file mode 100644 index 0000000..8a35e9b --- /dev/null +++ b/NONE-CKUBU2/ddclient.conf.NONE-CKUBU @@ -0,0 +1,11 @@ +# Configuration file for ddclient generated by debconf +# +# /etc/ddclient.conf + +protocol=dyndns2 +use=if, if=ppp0 +server=members.dyndns.org +login=ckubu +password='ckubu100' +mail=argus@oopen.de +ckubu.homelinux.org diff --git a/NONE-CKUBU2/default_isc-dhcp-server.NONE-CKUBU b/NONE-CKUBU2/default_isc-dhcp-server.NONE-CKUBU new file mode 100644 index 0000000..3fb715c --- /dev/null +++ b/NONE-CKUBU2/default_isc-dhcp-server.NONE-CKUBU @@ -0,0 +1,21 @@ +# Defaults for isc-dhcp-server initscript +# sourced by /etc/init.d/isc-dhcp-server +# installed at /etc/default/isc-dhcp-server by the maintainer scripts + +# +# This is a POSIX shell fragment +# + +# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). +#DHCPD_CONF=/etc/dhcp/dhcpd.conf + +# Path to dhcpd's PID file (default: /var/run/dhcpd.pid). +#DHCPD_PID=/var/run/dhcpd.pid + +# Additional options to start dhcpd with. +# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead +#OPTIONS="" + +# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? +# Separate multiple interfaces with spaces, e.g. "eth0 eth1". +INTERFACESv4="eth1" diff --git a/NONE-CKUBU2/dhcpd.conf.NONE-CKUBU b/NONE-CKUBU2/dhcpd.conf.NONE-CKUBU new file mode 100644 index 0000000..860dc6d --- /dev/null +++ b/NONE-CKUBU2/dhcpd.conf.NONE-CKUBU @@ -0,0 +1,109 @@ +# dhcpd.conf +# +# Sample configuration file for ISC dhcpd +# + +# option definitions common to all supported networks... +option domain-name "example.org"; +option domain-name-servers ns1.example.org, ns2.example.org; + +default-lease-time 600; +max-lease-time 7200; + +# The ddns-updates-style parameter controls whether or not the server will +# attempt to do a DNS update when a lease is confirmed. We default to the +# behavior of the version 2 packages ('none', since DHCP v2 didn't +# have support for DDNS.) +ddns-update-style none; + +# If this DHCP server is the official DHCP server for the local +# network, the authoritative directive should be uncommented. +#authoritative; + +# Use this to send dhcp log messages to a different log file (you also +# have to hack syslog.conf to complete the redirection). +#log-facility local7; + +# No service will be given on this subnet, but declaring it helps the +# DHCP server to understand the network topology. + +#subnet 10.152.187.0 netmask 255.255.255.0 { +#} +subnet 192.168.63.0 netmask 255.255.255.0 { +} + +# This is a very basic subnet declaration. + +#subnet 10.254.239.0 netmask 255.255.255.224 { +# range 10.254.239.10 10.254.239.20; +# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; +#} + +# This declaration allows BOOTP clients to get dynamic addresses, +# which we don't really recommend. + +#subnet 10.254.239.32 netmask 255.255.255.224 { +# range dynamic-bootp 10.254.239.40 10.254.239.60; +# option broadcast-address 10.254.239.31; +# option routers rtr-239-32-1.example.org; +#} + +# A slightly different configuration for an internal subnet. +#subnet 10.5.5.0 netmask 255.255.255.224 { +# range 10.5.5.26 10.5.5.30; +# option domain-name-servers ns1.internal.example.org; +# option domain-name "internal.example.org"; +# option routers 10.5.5.1; +# option broadcast-address 10.5.5.31; +# default-lease-time 600; +# max-lease-time 7200; +#} + +# Hosts which require special configuration options can be listed in +# host statements. If no address is specified, the address will be +# allocated dynamically (if possible), but the host-specific information +# will still come from the host declaration. + +#host passacaglia { +# hardware ethernet 0:0:c0:5d:bd:95; +# filename "vmunix.passacaglia"; +# server-name "toccata.example.com"; +#} + +# Fixed IP addresses can also be specified for hosts. These addresses +# should not also be listed as being available for dynamic assignment. +# Hosts for which fixed IP addresses have been specified can boot using +# BOOTP or DHCP. Hosts for which no fixed address is specified can only +# be booted with DHCP, unless there is an address range on the subnet +# to which a BOOTP client is connected which has the dynamic-bootp flag +# set. +#host fantasia { +# hardware ethernet 08:00:07:26:c0:a5; +# fixed-address fantasia.example.com; +#} + +# You can declare a class of clients and then do address allocation +# based on that. The example below shows a case where all clients +# in a certain class get addresses on the 10.17.224/24 subnet, and all +# other clients get addresses on the 10.0.29/24 subnet. + +#class "foo" { +# match if substring (option vendor-class-identifier, 0, 4) = "SUNW"; +#} + +#shared-network 224-29 { +# subnet 10.17.224.0 netmask 255.255.255.0 { +# option routers rtr-224.example.org; +# } +# subnet 10.0.29.0 netmask 255.255.255.0 { +# option routers rtr-29.example.org; +# } +# pool { +# allow members of "foo"; +# range 10.17.224.10 10.17.224.250; +# } +# pool { +# deny members of "foo"; +# range 10.0.29.10 10.0.29.230; +# } +#} diff --git a/NONE-CKUBU2/dhcpd6.conf.NONE-CKUBU b/NONE-CKUBU2/dhcpd6.conf.NONE-CKUBU new file mode 100644 index 0000000..87786b4 --- /dev/null +++ b/NONE-CKUBU2/dhcpd6.conf.NONE-CKUBU @@ -0,0 +1,102 @@ +# Server configuration file example for DHCPv6 +# From the file used for TAHI tests - addresses chosen +# to match TAHI rather than example block. + +# IPv6 address valid lifetime +# (at the end the address is no longer usable by the client) +# (set to 30 days, the usual IPv6 default) +default-lease-time 2592000; + +# IPv6 address preferred lifetime +# (at the end the address is deprecated, i.e., the client should use +# other addresses for new connections) +# (set to 7 days, the usual IPv6 default) +preferred-lifetime 604800; + +# T1, the delay before Renew +# (default is 1/2 preferred lifetime) +# (set to 1 hour) +option dhcp-renewal-time 3600; + +# T2, the delay before Rebind (if Renews failed) +# (default is 3/4 preferred lifetime) +# (set to 2 hours) +option dhcp-rebinding-time 7200; + +# Enable RFC 5007 support (same than for DHCPv4) +allow leasequery; + +# Global definitions for name server address(es) and domain search list +option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e; +option dhcp6.domain-search "test.example.com","example.com"; + +# Set preference to 255 (maximum) in order to avoid waiting for +# additional servers when there is only one +##option dhcp6.preference 255; + +# Server side command to enable rapid-commit (2 packet exchange) +##option dhcp6.rapid-commit; + +# The delay before information-request refresh +# (minimum is 10 minutes, maximum one day, default is to not refresh) +# (set to 6 hours) +option dhcp6.info-refresh-time 21600; + +# Static definition (must be global) +#host myclient { +# # The entry is looked up by this +# host-identifier option +# dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2; +# +# # A fixed address +# fixed-address6 3ffe:501:ffff:100::1234; +# +# # A fixed prefix +# fixed-prefix6 3ffe:501:ffff:101::/64; +# +# # Override of the global definitions, +# # works only when a resource (address or prefix) is assigned +# option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e; +# +# # For debug (to see when the entry statements are executed) +# # (log "sol" when a matching Solicitation is received) +# ##if packet(0,1) = 1 { log(debug,"sol"); } +#} +# +#host otherclient { +# # This host entry is hopefully matched if the client supplies a DUID-LL +# # or DUID-LLT containing this MAC address. +# hardware ethernet 01:00:80:a2:55:67; +# +# fixed-address6 3ffe:501:ffff:100::4321; +#} + +# The subnet where the server is attached +# (i.e., the server has an address in this subnet) +#subnet6 3ffe:501:ffff:100::/64 { +# # Two addresses available to clients +# # (the third client should get NoAddrsAvail) +# range6 3ffe:501:ffff:100::10 3ffe:501:ffff:100::11; +# +# # Use the whole /64 prefix for temporary addresses +# # (i.e., direct application of RFC 4941) +# range6 3ffe:501:ffff:100:: temporary; +# +# # Some /64 prefixes available for Prefix Delegation (RFC 3633) +# prefix6 3ffe:501:ffff:100:: 3ffe:501:ffff:111:: /64; +#} + +# A second subnet behind a relay agent +#subnet6 3ffe:501:ffff:101::/64 { +# range6 3ffe:501:ffff:101::10 3ffe:501:ffff:101::11; +# +# # Override of the global definitions, +# # works only when a resource (address or prefix) is assigned +# option dhcp6.name-servers 3ffe:501:ffff:101:200:ff:fe00:3f3e; +# +#} + +# A third subnet behind a relay agent chain +#subnet6 3ffe:501:ffff:102::/64 { +# range6 3ffe:501:ffff:102::10 3ffe:501:ffff:102::11; +#} diff --git a/NONE-CKUBU2/email_notice.NONE-CKUBU b/NONE-CKUBU2/email_notice.NONE-CKUBU new file mode 100755 index 0000000..86fde2e --- /dev/null +++ b/NONE-CKUBU2/email_notice.NONE-CKUBU @@ -0,0 +1,42 @@ +#!/bin/sh + +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 + + +file=/tmp/mail_ip-up$$ +admin_email=argus@oopen.de + +from_address=ip-up_`hostname`@oopen.de +from_name="ip-up - ckubu local net" +host=`hostname -f` + +echo "" > $file +echo " *************************************************************" >> $file +echo " *** This is an autogenerated mail from $host ***" >> $file +echo "" >> $file +echo " I brought up the ppp-daemon with the following" >> $file +echo -e " parameters:\n" >> $file +echo -e "\tInterface name...............: $PPP_IFACE" >> $file +echo -e "\tThe tty......................: $PPP_TTY" >> $file +echo -e "\tThe link speed...............: $PPP_SPEED" >> $file +echo -e "\tLocal IP number..............: $PPP_LOCAL" >> $file +echo -e "\tPeer IP number..............: $PPP_REMOTE" >> $file +if [ "$USEPEERDNS" ] && [ "$DNS1" ] ; then + echo -e "\tNameserver 1.................: $DNS1" >> $file + if [ "$DNS2" ] ; then + echo -e "\tNameserver 2.................: $DNS2" >> $file + fi +fi + + +echo -e "\tOptional \"ipparam\" value.....: $PPP_IPPARAM" >> $file +echo "" >> $file +echo -e "\tDate.........................: `date +\"%d.%m.%Y\"`" >> $file +echo -e "\tTime.........................: `date +\"%H:%M:%S\"`" >> $file +echo "" >> $file +echo " **************************************************************" >> $file + +echo -e "To:${admin_email}\nSubject:$PPP_LOCAL\n`cat $file`" | /usr/sbin/sendmail -F "$from_name" -f $from_address $admin_email + +rm -f $file + diff --git a/NONE-CKUBU2/generic.NONE-CKUBU b/NONE-CKUBU2/generic.NONE-CKUBU new file mode 100644 index 0000000..c53773a --- /dev/null +++ b/NONE-CKUBU2/generic.NONE-CKUBU @@ -0,0 +1,3 @@ +root@gw-replacement.local.netz root_gw-replacement@oopen.de +cron@gw-replacement.local.netz cron_gw-replacement@oopen.de +@gw-replacement.local.netz other_gw-replacement@oopen.de diff --git a/NONE-CKUBU2/generic.db.NONE-CKUBU b/NONE-CKUBU2/generic.db.NONE-CKUBU new file mode 100644 index 0000000000000000000000000000000000000000..6198ad3d792c9be403e6e35bd63788c4504ccfaf GIT binary patch literal 12288 zcmeI&Jqp4w6u|LUh57*!7ms1j(AC*pDK)f1ZKMjb`&rUa@kuN>B8QR%(8{<+WZ z%S6fGtPX0gHY!o})EM9N|J^?X^#2=d91uVN0R#|0009ILKmY**{z1Sij49_yH7@ij vi(%Yw_a3channel 36 +## - +#ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40] +#ht_capab=[SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40] +## - +## - D-LINK DWA-556 (PCIe) (2,4 / 5 Ghz) +## - +#ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40] +## - +## - Linksys WMP600N (Dualband: 2.4 / 5 Ghz) +## - +#ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC12] + + +# adjust to fit your location +country_code=DE + + +# SSID to be used in IEEE 802.11 management frames +ssid=WLAN-OOPEN + +# makes the SSID visible and broadcasted +ignore_broadcast_ssid=0 + +# IEEE 802.11 specifies two authentication algorithms. hostapd can be +# configured to allow both of these or only one. Open system authentication +# should be used with IEEE 802.1X. +# Bit fields of allowed authentication algorithms: +# bit 0 = Open System Authentication +# bit 1 = Shared Key Authentication (requires WEP) +#auth_algs=3 +auth_algs=1 + +# bit0 = WPA +# bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled) +wpa=3 + +# Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The +# entries are separated with a space. WPA-PSK-SHA256 and WPA-EAP-SHA256 can be +# added to enable SHA256-based stronger algorithms. +# (dot11RSNAConfigAuthenticationSuitesTable) +wpa_key_mgmt=WPA-PSK + +# WPA pre-shared keys for WPA-PSK. +wpa_passphrase=WoAuchImmer + +# Set of accepted cipher suites (encryption algorithms) for pairwise keys +# (unicast packets). This is a space separated list of algorithms: +# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] +# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] +# Group cipher suite (encryption algorithm for broadcast and multicast frames) +# is automatically selected based on this configuration. If only CCMP is +# allowed as the pairwise cipher, group cipher will also be CCMP. Otherwise, +# TKIP will be used as the group cipher. +# (dot11RSNAConfigPairwiseCiphersTable) +# Pairwise cipher for WPA (v1) (default: TKIP) +wpa_pairwise=TKIP CCMP + +# Pairwise cipher for RSN/WPA2 (default: use wpa_pairwise value) +rsn_pairwise=CCMP + +# Time interval for rekeying GTK (broadcast/multicast encryption keys) in +# seconds. (dot11RSNAConfigGroupRekeyTime) +wpa_group_rekey=600 + +# Station MAC address -based authentication +# Please note that this kind of access control requires a driver that uses +# hostapd to take care of management frame processing and as such, this can be +# used with driver=hostap or driver=nl80211, but not with driver=madwifi. +# 0 = accept unless in deny list +# 1 = deny unless in accept list +# 2 = use external RADIUS server (accept/deny lists are searched first) +macaddr_acl=0 + +# Interface for separate control program. If this is specified, hostapd +# will create this directory and a UNIX domain socket for listening to requests +# from external programs (CLI/GUI, etc.) for status information and +# configuration. The socket file will be named based on the interface name, so +# multiple hostapd processes/interfaces can be run at the same time if more +# than one interface is used. +# /var/run/hostapd is the recommended directory for sockets and by default, +# hostapd_cli will use it when trying to connect with hostapd. +ctrl_interface=/var/run/hostapd + + +# debugging output - uncomment them to activate; issue hostapd -d /etc/hostapd/hostapd.conf +# to get debugging info in visible/real-time form +#logger_syslog=-1 +#logger_syslog_level=2 +#logger_stdout=-1 +#logger_stdout_level=2 diff --git a/NONE-CKUBU2/hostname.NONE-CKUBU b/NONE-CKUBU2/hostname.NONE-CKUBU new file mode 100644 index 0000000..7b87fc8 --- /dev/null +++ b/NONE-CKUBU2/hostname.NONE-CKUBU @@ -0,0 +1 @@ +gw-replacement2 diff --git a/NONE-CKUBU2/hosts.NONE-CKUBU b/NONE-CKUBU2/hosts.NONE-CKUBU new file mode 100644 index 0000000..9e8c77c --- /dev/null +++ b/NONE-CKUBU2/hosts.NONE-CKUBU @@ -0,0 +1,9 @@ +127.0.0.1 localhost +127.0.1.1 gw-replacement2.local.netz gw-replacement2 + +# The following lines are desirable for IPv6 capable hosts +::1 ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff00::0 ip6-mcastprefix +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters diff --git a/NONE-CKUBU2/igmpproxy.conf.NONE-CKUBU b/NONE-CKUBU2/igmpproxy.conf.NONE-CKUBU new file mode 100644 index 0000000..9f6e290 --- /dev/null +++ b/NONE-CKUBU2/igmpproxy.conf.NONE-CKUBU @@ -0,0 +1,75 @@ +######################################################## +# +# Example configuration file for the IgmpProxy +# -------------------------------------------- +# +# The configuration file must define one upstream +# interface, and one or more downstream interfaces. +# +# If multicast traffic originates outside the +# upstream subnet, the "altnet" option can be +# used in order to define legal multicast sources. +# (Se example...) +# +# The "quickleave" should be used to avoid saturation +# of the upstream link. The option should only +# be used if it's absolutely nessecary to +# accurately imitate just one Client. +# +######################################################## + +##------------------------------------------------------ +## Enable Quickleave mode (Sends Leave instantly) +##------------------------------------------------------ +quickleave + + +##------------------------------------------------------ +## Configuration for eth0 (Upstream Interface) +##------------------------------------------------------ +#phyint eth0 upstream ratelimit 0 threshold 1 +# altnet 10.0.0.0/8 +# altnet 192.168.0.0/24 +##------------------------------------------------------ +## Configuration for ppp0 (Upstream Interface) +##------------------------------------------------------ +#phyint ppp0 upstream ratelimit 0 threshold 1 +phyint eth2.8 upstream ratelimit 0 threshold 1 + altnet 217.0.119.194/24 + altnet 193.158.35.0/24; + altnet 239.35.100.6/24; + altnet 93.230.64.0/19; + altnet 192.168.63.0/24; + # + #altnet 192.168.63.5/32; + #altnet 192.168.63.40/32; + + +##------------------------------------------------------ +## Configuration for eth1 (Downstream Interface) +##------------------------------------------------------ +#phyint br0 downstream ratelimit 0 threshold 1 +phyint eth1 downstream ratelimit 0 threshold 1 + # IP der TV-Box + altnet 192.168.63.0/24; + #altnet 192.168.63.5/32; + #altnet 192.168.63.40/32; + + +##------------------------------------------------------ +## Configuration for eth2 (Disabled Interface) +##------------------------------------------------------ +#phyint eth2 disabled +##------------------------------------------------------ +## Configuration for eth2 (Disabled Interface) +##------------------------------------------------------ +phyint eth0 disabled +phyint eth2 disabled +phyint eth2.7 disabled +phyint eth1:0 disabled +phyint eth1:wf disabled +phyint ppp0 disabled +phyint tun0 disabled +phyint lo disabled + + diff --git a/NONE-CKUBU2/interfaces.NONE-CKUBU b/NONE-CKUBU2/interfaces.NONE-CKUBU new file mode 100644 index 0000000..9c9193f --- /dev/null +++ b/NONE-CKUBU2/interfaces.NONE-CKUBU @@ -0,0 +1,16 @@ +# This file describes the network interfaces available on your system +# and how to activate them. For more information, see interfaces(5). + +# The loopback network interface +auto lo +iface lo inet loopback + +auto eth1 +iface eth1 inet static + address 192.168.63.252 + network 192.168.63.0 + netmask 255.255.255.0 + broadcast 192.168.63.255 + gateway 192.168.63.254 + + diff --git a/NONE-CKUBU2/ipt-firewall.service.NONE-CKUBU b/NONE-CKUBU2/ipt-firewall.service.NONE-CKUBU new file mode 100644 index 0000000..9842090 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall.service.NONE-CKUBU @@ -0,0 +1,14 @@ +[Unit] +Description=IPv4 Firewall with iptables +After=network.target + +[Service] +SyslogIdentifier="ipt-gateway" +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/local/sbin/ipt-firewall-gateway start +ExecStop=/usr/local/sbin/ipt-firewall-gateway stop +User=root + +[Install] +WantedBy=multi-user.target diff --git a/NONE-CKUBU2/ipt-firewall/ban_ipv4.list.sample b/NONE-CKUBU2/ipt-firewall/ban_ipv4.list.sample new file mode 100644 index 0000000..10b7da3 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/ban_ipv4.list.sample @@ -0,0 +1,22 @@ +# - IPv4 addresses listet here will be completly banned by the firewall +# - +# - - Line beginning with '#' will be ignored. +# - - Blank lines will be ignored +# - - Only the first entry (until space sign or end of line) of each line will be considered. +# - +# - Valid values are: +# - complete IPv4 adresses like 1.2.3.4 (will be converted to 1.2.3.0/32) +# - partial IPv4 addresses like 1.2.3 (will be converted to 1.2.3.0/24) +# - network/nn CIDR notation like 1.2.3.0/27 +# - network/netmask notaions like 1.2.3.0/255.255.255.0 +# - network/partial_netmask like 1.2.3.4/255 +# - +# - Note: +# - - wrong addresses like 1.2.3.256 or 1.2.3.4/33 will be ignored +# - +# - Example: +# - 79.171.81.0/24 +# - 79.171.81.0/255.255.255.0 +# - 79.171.81.0/255.255.255 +# - 79.171.81 + diff --git a/NONE-CKUBU2/ipt-firewall/default_ports.conf b/NONE-CKUBU2/ipt-firewall/default_ports.conf new file mode 100644 index 0000000..a6ee932 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/default_ports.conf @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +# ============= +# --- Define Ports for Services out +# ============= + +standard_ident_port=113 +standard_silc_port=706 +standard_irc_port=6667 +standard_jabber_port=5222 +standard_smtp_port=25 +standard_ssh_port=22 +standard_http_port=80 +standard_https_port=443 +standard_ftp_port=21 +standard_tftp_udp_port=69 +standard_ntp_port=123 +standard_snmp_port=161 +standard_snmp_trap_port=162 +standard_timeserver_port=37 +standard_pgp_keyserver_port=11371 +standard_telnet_port=23 +standard_whois_port=43 +standard_cpan_wait_port=1404 +standard_xymon_port=1984 +standard_hbci_port=3000 +standard_mysql_port=3306 +standard_ipp_port=631 +standard_cups_port=$standard_ipp_port +standard_print_raw_port=515 +standard_print_port=9100 +standard_remote_console_port=5900 + +# - IPsec - Internet Security Association and +# - Key Management Protocol +standard_isakmp_port=500 +standard_ipsec_nat_t=4500 + + +# - Comma separated lists +# - +standard_http_ports="80,443" +standard_mailuser_ports="587,465,110,995,143,993" + diff --git a/NONE-CKUBU2/ipt-firewall/include_functions.conf b/NONE-CKUBU2/ipt-firewall/include_functions.conf new file mode 100644 index 0000000..9bb5205 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/include_functions.conf @@ -0,0 +1,113 @@ +#!/usr/bin/env bash + +# ============= +# --- Some functions +# ============= + +# - Is this script running on terminal ? +# - +if [[ -t 1 ]] ; then + terminal=true +else + terminal=false +fi + +echononl(){ + echo X\\c > /tmp/shprompt$$ + if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then + echo -e -n "$*\\c" 1>&2 + else + echo -e -n "$*" 1>&2 + fi + rm /tmp/shprompt$$ +} +echo_done() { + if $terminal ; then + echo -e "\033[75G[ \033[32mdone\033[m ]" + else + echo " [ done ]" + fi +} +echo_ok() { + if $terminal ; then + echo -e "\033[75G[ \033[32mok\033[m ]" + else + echo " [ ok ]" + fi +} +echo_warning() { + if $terminal ; then + echo -e "\033[75G[ \033[33m\033[1mwarn\033[m ]" + else + echo " [ warning ]" + fi +} +echo_failed(){ + if $terminal ; then + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" + else + echo ' [ failed! ]' + fi +} +echo_skipped() { + if $terminal ; then + echo -e "\033[75G[ \033[37mskipped\033[m ]" + else + echo " [ skipped ]" + fi +} + + +fatal (){ + echo "" + echo "" + if $terminal ; then + echo -e "\t[ \033[31m\033[1mFatal\033[m ]: \033[37m\033[1m$*\033[m" + echo "" + echo -e "\t\033[31m\033[1m Firewall Script will be interrupted..\033[m\033[m" + else + echo "fatal: $*" + echo "Firewall Script will be interrupted.." + fi + echo "" + exit 1 +} + +error(){ + echo "" + if $terminal ; then + echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" + else + echo "Error: $*" + fi + echo "" +} + +warn (){ + echo "" + if $terminal ; then + echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" + else + echo "Warning: $*" + fi + echo "" +} + +info (){ + echo "" + if $terminal ; then + echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" + else + echo "Info: $*" + fi + echo "" +} + +## - Check if a given array (parameter 2) contains a given string (parameter 1) +## - +containsElement () { + local e + for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done + return 1 +} + diff --git a/NONE-CKUBU2/ipt-firewall/interfaces_ipv4.conf b/NONE-CKUBU2/ipt-firewall/interfaces_ipv4.conf new file mode 100644 index 0000000..948810e --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/interfaces_ipv4.conf @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# ============= +# --- Define Network Interfaces / Ip-Adresses / Ports +# ============= + +# - Extern Interfaces DSL Lines +# - (blank separated list) +ext_if_dsl_1="" +ext_if_dsl_2="" +ext_if_dsl_3="" +ext_if_dsl_4="" + +ext_ifs_dsl="$ext_if_dsl_1 $ext_if_dsl_2 $ext_if_dsl_3 $ext_if_dsl_4" + +# - Extern Interfaces Static Lines +# - (blank separated list) +ext_if_static_1="eth1" +ext_if_static_2="" +ext_if_static_3="" + +ext_ifs_static="$ext_if_static_1 $ext_if_static_2 $ext_if_static_3" + +# - VPN Interfaces +# - (blank separated list) +vpn_ifs="tun+" + +# - Local Interfaces +local_if_1="" +local_if_2="" +local_if_3="" +local_if_4="" +local_if_5="" +local_if_6="" +local_if_7="" + +local_ifs="$local_if_1 $local_if_2 $local_if_3 $local_if_4 $local_if_5 $local_if_6 $local_if_7" + +# - Devices given in list "nat_devices" will be natted +# - +# - Notice: Devices "ext_if_dsl_n" will be natted and must not been given here. +# - +# - Blank separated list +# - +nat_devices="" + +# - Are local alias interfaces like eth0:0 defined" +# - +local_alias_interfaces=true diff --git a/NONE-CKUBU2/ipt-firewall/load_modules_ipv4.conf b/NONE-CKUBU2/ipt-firewall/load_modules_ipv4.conf new file mode 100644 index 0000000..bc383f0 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/load_modules_ipv4.conf @@ -0,0 +1,36 @@ +# ============= +# - Load Kernel Modules +# ============= + +# - Note:! +# - Since Kernel 4.7 the automatic conntrack helper assignment +# - is disabled by default (net.netfilter.nf_conntrack_helper = 0). +# - Enable it by setting this variable in file /etc/sysctl.conf: +# - +# - net.netfilter.nf_conntrack_helper = 1 +# - +# - Reboot or type "sysctl -p" + + +ip_tables + +iptable_nat +iptable_filter +iptable_mangle +iptable_raw + +# - Load base modules for tracking +# - +nf_conntrack +nf_nat + +# - Load module for FTP Connection tracking and NAT +# - +nf_conntrack_ftp +nf_nat_ftp + +# - Load modules for SIP VOIP +# - +nf_conntrack_sip +nf_nat_sip + diff --git a/NONE-CKUBU2/ipt-firewall/load_modules_ipv6.conf b/NONE-CKUBU2/ipt-firewall/load_modules_ipv6.conf new file mode 100644 index 0000000..2c55689 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/load_modules_ipv6.conf @@ -0,0 +1,9 @@ +# ============= +# - Load Kernel Modules +# ============= + +ip6_tables +ip6table_filter +ip6t_REJECT + +ip6table_mangle diff --git a/NONE-CKUBU2/ipt-firewall/logging_ipv4.conf b/NONE-CKUBU2/ipt-firewall/logging_ipv4.conf new file mode 100644 index 0000000..e653972 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/logging_ipv4.conf @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# ============= +# --- Logging +# ============= + +log_all=false + +log_syn_flood=false +log_fragments=false +log_new_not_sync=false +log_invalid_state=false +log_invalid_flags=false +log_spoofed=false +log_spoofed_out=false +log_to_lo=false +log_not_wanted=false +log_blocked=false +log_unprotected=false +log_prohibited=false +log_voip=false +log_rejected=false + +log_ssh=false + +# - Log using the specified syslog level. 7 (debug) is a good choice +# - unless you specifically need something else. +# - +log_level=debug + +# - logging messages +# - +log_prefix="IPv4:" + + +# --- +# - Log all traffic for givven ip address +# --- + +log_ips="" diff --git a/NONE-CKUBU2/ipt-firewall/logging_ipv6.conf b/NONE-CKUBU2/ipt-firewall/logging_ipv6.conf new file mode 100644 index 0000000..a024215 --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/logging_ipv6.conf @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# ============= +# --- Logging +# ============= + +log_all=false + +log_syn_flood=false +log_fragments=false +log_new_not_sync=false +log_invalid_state=false +log_invalid_flags=false +log_spoofed=false +log_spoofed_out=false +log_to_lo=false +log_not_wanted=false +log_blocked=false +log_unprotected=false +log_prohibited=false +log_voip=false +log_rejected=false + +log_ssh=false + +# - Log using the specified syslog level. 7 (debug) is a good choice +# - unless you specifically need something else. +# - +log_level=debug + +# - logging messages +# - +log_prefix="IPv6:" + + +# --- +# - Log all traffic for givven ip address +# --- + +log_ips="" diff --git a/NONE-CKUBU2/ipt-firewall/main_ipv4.conf b/NONE-CKUBU2/ipt-firewall/main_ipv4.conf new file mode 100644 index 0000000..561bd7f --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/main_ipv4.conf @@ -0,0 +1,1357 @@ +#!/usr/bin/env bash + +## --------------------------------------------------------- +## --- Main Configurations Ipv4 Firewall Script ipt-firewall +## --------------------------------------------------------- + +# --- +# - IPv4 Addresses Gateway +# --- +declare -a gateway_ipv4_address_arr + +_ips="$(ip a | grep "inet " | awk '{print$2}' | cut -d'/' -f1)" +for _ip in $_ips ; do + gateway_ipv4_address_arr+=("$_ip") + done + + +# ============= +# --- Interfaces completly blocked +# ============= + +# - Interfaces to block (note: they will all be blocked) +# - +# - For Example: eth1 is used for DSL Line, that becomes an extra +# - interface (ppp-light). A further use of eth1 (which would +# - be possible) is not configured at time, so you can block it. +# - +blocked_ifs="" + + + +# ============= +# --- Interfaces not firewalled +# ============= + +# - Note: +# - Can be (for example) an interface, whose (complete) traffic is +# - protected by a firewall on an other system in the local area +# - +# - Here: the static line castle stockhausen +# - +unprotected_ifs="" + + + +# ============= +# --- Networks not firewalled through extern interfaces +# ============= + +# - Allow these networks any access to the internet. +# - +# - Blank separated list of networks +# - +any_access_to_inet_networks="" + + +# - Allow these networks getting any access from the internet. +# - +# - Note: +# - ===== +# - Traffic recieved on natted interfaces will be ommitted! +# - +# - Blank separated list of networks +# - +any_access_from_inet_networks="" + + + +# ============= +# - Allow local services from given extern networks +# ============= + +# - allow_ext_net_to_local_service +# - +# - allow_ext_net_to_local_service="ext-net:local-address:port:protocol" +# - +# - Note: +# - ===== +# - - Only 'tcp' and 'udp' are allowed valuse for protocol. +# - - Traffic recieved on natted interfaces will be ommitted! +# - +# - Use this parameter to (only) give some local netwoks access to special local +# - services (but not for all local networks as you can configure later). +# - +# - If you plan to separate networks (see parameter 'separate_local_networks'), but +# - to allow these networks some special local services, you can also use this parameter. +# - +# - Example: +# - allow access from 194.150.169.139 to ssh service at 83.223.73.210 on port 1036 +# - allow access from 86.73.85.0/24 to https service at 83.223.73.204 +# - +# - allow_ext_net_to_local_service="194.150.169.139/32:83.223.73.210:1036:tcp +# - 86.73.85.0/24:83.223.73.204:$standard_https_port:tcp" +# - +# - Blank separated list +# - +allow_ext_net_to_local_service="" + + + +# ============= +# - Allow all traffic from extern address/network to local address/network +# ============= + +# - allow_ext_net_to_local_net +# - +# - allow_ext_net_to_local_net=": [:] [..]" +# - +# - All traffic from the given first network to the given second network is allowed +# - +# - Note: +# - ===== +# - - Traffic recieved on natted interfaces will be ommitted! +# - - If you want allow both directions, you have to make two entries - one for evry directions. +# - +# - Example: +# - allow_ext_net_to_local_net="86.223.85.0/24:86.223.73.192/26 +# - 83.223.86.96/32:86.223.73.0/24" +# - +# - Blank separated list +# - +allow_ext_net_to_local_net="" + + + +# ============= +# - Block all extern traffic to (given) local network +# ============= + +# - block_all_ext_to_local_net +# - +# - block_all_ext_to_local_net=" []= +# - +# - Note: +# - Each extern interface can have only one thuch service +# - +# - vpn_server_dmz_arr[192.168.10.1]=$ext_if_dsl_2 +# - vpn_server_dmz_arr[192.168.10.13]=$ext_if_dsl_1 +# - +# - Multiple settins of this parameter is possible +# - +declare -A vpn_server_dmz_arr + +# - Local VPN Ports +# - +# - Blank separated list +# - +vpn_local_net_ports="1194" + + +# ====== +# - DHCP Service +# ====== + +# - Ist this Gateway DHCP Client? +# - +# - local_dhcp_client_interfaces=" [ [.." +# - +# - Example: +# - dhcp_client_interfaces="$ext_if_static_1" +# - +dhcp_client_interfaces="" + +# - DHCP Server Gateway +# - +local_dhcp_service=true + +# - Are DHCP Failover Servers present? +# - +# - Balnk separated list +# - +dhcp_failover_server_ips="" + +dhcp_failover_port=647 + + +# ====== +# - DNS Service +# ====== + +# - DNS Service Gateway +# - +local_dns_service=true + +# - DNS Server local Networks +# - +# - Blank separated list +# - +dns_server_ips="" + + +# ====== +# - SSH +# ====== + +# - SSH Service Gateway +# - +local_ssh_service=true + + +# - SSH Services local Networks +# - +# - Blank separated list +# - +ssh_server_only_local_ips="" + + +# - SSH Services DMZ (reachable also from WAN) +# - +# - ssh_server_dmz_arr[]= +# - +# - Note: +# - Each extern interface can have only one service on a certain port. +# - +# - ssh_server_dmz_arr[192.168.10.1]=$ext_if_dsl_2 +# - ssh_server_dmz_arr[192.168.10.13]=$ext_if_dsl_1 +# - +# - Multiple settins of this parameter is possible +# - +declare -A ssh_server_dmz_arr + + +# - SSH Ports used on Gateway and also local machines +# - +# - blank separated list +# - +ssh_ports="22" + + +# ====== +# - HTTP(S) Service +# ====== + +# - HTTP(S) Service Gateway +# - +local_http_service=false + + +# - HTTP(S) Services only locale Networks +# - +# - Blank separated list +# - +http_server_only_local_ips="" + + +# - HTTP(S) Services DMZ (reachable also from WAN) +# - +# - http_server_dmz_arr[]= +# - +# - Note: +# - Each extern interface can have only one service on a certain port. +# - +# - Example: +# - Mail Server: 192.168.10.1 incomming on ppp-st ($ext_if_dsl_2) +# - Citrix Server: 192.168.10.13 incomming on ppp-surf1 ($ext_if_dsl_1) +# - +# - http_server_dmz_arr[192.168.10.1]=$ext_if_dsl_2 +# - http_server_dmz_arr[192.168.10.13]=$ext_if_dsl_1 +# - +# - WebServer Luna: 192.168.63.20 (ppp-ckubu = $ext_if_dsl_1) +# - +# - Multiple settins of this parameter is possible +# - +declare -A http_server_dmz_arr + + +# - HTTPS Services DMZ only port 443 (reachable also from WAN) +# - +# - http__ssl_server_dmz_arr[]= +# - +# - Note: +# - Each extern interface can have only one thuch service +# - +# - Example: +# - Mail Server: 192.168.10.1 incomming on ppp-st ($ext_if_dsl_2) +# - Citrix Server: 192.168.10.13 incomming on ppp-surf1 ($ext_if_dsl_1) +# - +# - http_ssl_server_dmz_arr[192.168.10.1]=$ext_if_dsl_2 +# - http_ssl_server_dmz_arr[192.168.10.13]=$ext_if_dsl_1 +# - +# - Multiple settins of this parameter is possible +# - +declare -A http_ssl_server_dmz_arr + + +# - HTTP(S) Ports +# - +# - comma separated list +# - +http_ports="$standard_http_ports" + + +# ====== +# - Mail Services +# ====== + +# - SMTP server (i.e. mail relay service) Gateway +# - +local_smtp_service=false + + +# - Mailserver (SMTP(POP/IMAP) Gateway +# - +# - NOT YET IMPLEMENTED +# - +local_mail_service=false + + +# - Mail Services smtp,smtps/pop(s)/imap(s) only local Networks +# - +# - comma separated list +# - +mail_server_only_local_ips="" + + +# - Mails Services DMZ smtp,smtps/pop(s)/imap(s) (reachable also from WAN) +# - +# - mail_server_dmz_arr[]= +# - +# - Multiple declarations are possible +# - +# - Example: +# - Mail Server: 192.168.10.1 incomming on ppp-st ($ext_if_dsl_2) +# - +# - mail_server_dmz_arr[192.168.10.1]=$ext_if_dsl_2 +# - +declare -A mail_server_dmz_arr + + +# - Mail client ports (smtps/pop(s)/imap(s) +# - +# - comma separated list +# - +mail_user_ports="$standard_mailuser_ports" + + +# - Mail Server (local Networks) SMTP Port +# - +mail_smtp_port="$standard_smtp_port" + + +# ====== +# - FTP Service +# ====== + +# - FTP Service Gateway +# - +local_ftp_service=false + +# - FTP Server at local Networks +# - +# - comma separated list +# - +ftp_server_only_local_ips="" + +# - FTP Service DMZ +# - +# - Note: +# - Each extern interface can have only one thuch service +# - +# - ftp_server_dmz_arr[]= +# - ftp_passive_port_range= +# - +declare -A ftp_server_dmz_arr +#ftp_server_dmz_arr[192.168.63.20]=$ext_if_dsl_1 +ftp_passive_port_range="50000:50400" + +# - FTP Ports +# - +# - Hard scriptetd: +# - FTP Control Port: 21 +# - FTP Data Port: 20 + + +# ====== +# - TFTP Service Gateway +# ====== + +# - TFTP Server Gateway (Port udp 69) +local_tftp_service=false + +# - TFTP Server at local Networks +# - +tftp_server_ips="" + +# - TFTF Ports +# - +# - Note: its udp ! +# - +tftp_udp_port=69 + + +# ====== +# - LDAP Service +# ====== + +# - Is this a LDAP Server ? +# - +local_ldap_service=false + +# - LDAP Service local Networks +# - +# - Ports: 389 udp +# - 389 tcp +# - +# - Ports LDAP SSL: 636 tcp +# - +ldap_server_local_ips="" +ldap_udp_ports="389" +ldap_tcp_ports="389 636" + + +# ====== +# - Samba Service +# ====== + +# - Samba Server Gateway +# - +local_samba_service=false + +# - Samba Service +# - +# - Ports: 137,138 udp +# - 139,445 tcp +# - +samba_udp_ports="137:138" +samba_tcp_ports="137 138 139 445" + +# - Samba Service local networks +# - +samba_server_local_ips="" + +# - Samba Service DMZ +# - +# - samba_server_dmz_arr[]= +# - +# - Note: +# - Each extern interface can have only one thuch service +# - +# - Multiple settins of this parameter is possible +# - +declare -A samba_server_dmz_arr + + +# ====== +# - NTP Service +# ====== + +# - NTP Service Gateway +# - +local_ntp_service=true + + +# ====== +# - SNMP Service +# ====== + +# - SNMP services local Networks +# - +# - Blank separated list of ip's +# - +snmp_server_ips="" + +# - SNMP Port +# - +# - snmp_port Port Agent +# - snmp_trap_port Port Management Station +# - +snmp_port="$standard_snmp_port" +snmp_trap_port="$standard_snmp_trap_port" + + +# ====== +# - Mumble Service +# ====== + +# - NOT YET IMPLEMENTED + +# - Mumble ports +# - +mumble_ports="64738" + + +# ====== +# - XyMon Service +# ====== + +# - XyMon Service Gateway (usually TCP port 1984) +# - +local_xymon_server=false + +# - XyMon Service (usually TCP port 1984) +# - +# - Blank separated list of ip's +# - +xymon_server_ips="" +local_xymon_client="" + +# - XyMon Ports +# - +xymon_port="$standard_xymon_port" + + +# ====== +# - Munin Service +# ====== + +# - Munin Service Gateway (usually TCP port 4949) +# - +local_munin_server=false + + +# - If 'local_munin_server=' provide service also to inet? +# - +provide_munin_service_to_inet=true +munin_remote_port="4949" + + +# - Munin Server local Networks (usually TCP port 4949) +# - +# - Blank separated list +# - +munin_local_server_ips="" + + +# - Munin Remote Server +# - +# - Note: +# - The munin server himself initiates the connection to the concerning clients. +# - In case of natted (local) networks you have to also nat the incomming +# - requests from munin server. +# - +# - Note: +# - Each extern interface can have only one thuch service +# - +# - munin_local_client_ip_arr[]= +# - +# - Multiple settins of this parameter is possible +# - +#munin_remote_server="83.223.86.163" +munin_remote_server="" + + +# - Munin - clients on local network (server is $munin_remote_server) +# - +# - Example: +# - munin_local_client_ip_arr[192.168.63.20]=$ext_if_dsl_1 +# - +declare -A munin_local_client_ip_arr + +# - Munin Port +# - +munin_local_port=4949 + + +# ====== +# - PowerChut Network Shutdown (PCNS) +# ====== + +# - PCNS local Services +# - +pcns_server_ips="" + +# - local USV +# - +usv_ip="" + +# - PCNS Ports +# - +# - Webinterface (https): tcp 6547 +# - Connection usv: tcp/udp 3052 +# - +pcns_tcp_port=3052 +pcns_udp_port=3052 +pcns_web_port=6547 + + +# ====== +# - Remote Console (VNC Service) +# ====== + +# - VNC Service local network +# +# - Blank separated list +# - +rm_server_ips="" + +# - VNC Service DMZ +# - +# - Note: +# - Each extern interface can have only one thuch service +# - +# - rm_server_dmz_arr[]= +# - +declare -A rm_server_dmz_arr +#rm_server_dmz_arr[192.168.63.20]=$ext_if_dsl_1 + +# - Remote Console (VNC) Port +# - +remote_console_port=5900 + + +# ====== +# - Ubiquiti Unifi +# ====== + +# - By default, the UniFi controller will operate on the following ports: +# - +# - unifi_http_port=8080 (port for UAP to inform controller) +# - unifi_https_port=8443 (port for controller GUI / API, as seen in web browser) +# - unifi_portal_http_port=8880 (port for HTTP portal redirect) +# - unifi_portal_https_port=8843 (port for HTTPS portal redirect) +# - unifi_http_port=6789 (port used for throughput measurement) +# - unifi_db_port=27117 (local-bound port for DB server) +# - +# - +# - In version 4.5.2 and later, users can also define the port assigned to STUN services, +# - for scenarios where two or more separate UniFi instances are desired on the +# - same controller machine. +# - +# - unifi_stun_port=3478 # UDP port used for STUN +# - +# - +# - Ubiquity Networks uses port 10001/UDP for its AirControl +# - management discovery protocol +# - +# - unifi_aircontroll_port=10001 +# - +# - +# - Since v3.2.9+ and v4.6.0+, two more ports are being reserved for device redirector. +# - There is no need to open firewall for these ports on controller. However, on +# - controller, avoid to use these ports: +# - +# - port 8881 for redirector port for wireless clients +# - port 8882 for redirector port for wired clients +# - +# - +# - For AP-EDU Broadcasts: +# - +# - UDP ports 5656-5699 +# - +unify_tcp_ports="8080,8443,8880,8843,6789,27117" +unify_udp_ports="3478" +unify_broadcast_udp_ports="10001,5656:5699" + +# - Unifi Controller at gateway? +# - +local_unifi_controller_service=false + +# - UniFi Controllers on local network (other than this machine) +# - +unify_controller_local_net_ips="" + + +# ====== +# - IPMI Tools +# ====== + +# - IPMI Tools local Networks +# - +# - Blank seoarated list +# - +ipmi_server_ips="" + +# - IPMI Tools Port +# - +# - UDP 623: Access IPMI Programms (as IPMIView or FreeIPMI) +# - TCP 623: Virtual Media for Remote Console +# - TCP 3520: "This is TCP Port 3520 which is also needed in addition to TCP port 5900 to be able to use iKVM." +# - +ipmi_udp_ports="623 5900" +ipmi_tcp_ports="80 443 623 3520" + + +# ============= +# - Rsync Out for given src ip-addresses +# ============= + +# - Rsync Protocol +# - +# - The given server address (from local network) can access rsyncd at (any) remote machine +# - +# - Needed for some integrated provider of clamav-unofficial-sigs +# - +rsync_out_ips="" +rsync_ports="873" + +# - rsync out from this machine? +# - +local_rsync_out=false + + + +# ============= +# - Printer +# ============= + +# - IP Addresses Printer +# - +# - Blank separated list +# - +printer_ips="" + + + +# ============= +# --- Scanner +# ============= + +# ====== +# - Brother (brscan) +# ====== + +# - IP Adresses Brother Scanner +# - +# - Blank seoarated list +# - +brother_scanner_ips="" +brscan_port=54921 + + + +# ============= +# --- Telefon Systems +# ============= + +# - IP Adresses Telephone Systems (Telefonanlagen) +# - +# - Dont't foregt to add ip-adresses also to http(s) service if the +# - systems provide webinterfaces! +# - +# - Blank seoarated list +# - +tele_sys_ips="" +tele_sys_remote_sip_server_port=5060 +tele_sys_local_sip_server_port=5067 +allow_between_tele_systems=false + +VOIP_PORTS="69 5000:5099 7775 32000:32512" +# - TFTP=69 (used from telephones getting their connection data / firmwareupdate ) +# - RTP_PORTS= UDP i.e. 5000:5099 or here +# - RTP_PORTS_END=5099 +#SIP_PORT_REMOTE=5060 +#SIP_PORT_LOCAL=5067 +#SIP_LOCAL_IP=192.168.63.240 +#STUN_PORTS=3478 +udp_voip_ports="7775 5000:5099" + + +# ===== +# - Telekom Internet TV (Entertain) +# ===== + +telekom_internet_tv=false +tv_ip="192.168.63.5" +tv_extern_if="eth2.8" +tv_local_if="$local_if_1" + + + +# ====== +# - Other local Services +# ====== + +# - You can configure further local services here. +# - +# - other_services=":: [:: [.." +# - +# - Blank seperated list +# - +other_services="" + + +# ============= +# --- Masuqerading +# ============= + +# - Masquerade (NAT) networks +# - +# - nat_networks=": [:] [.." +# - +# - Multiple declarations (blank separated list) are possible +# - +# - Example: +# - nat_network="172.16.1.0/24:${local_if_2} +# - 172.16.63.0/24:${ext_if_static_1}" +# - +# - 172.16.1.0/24 Rescue network (routers) +# - +nat_networks="" + + +# - Masquerade TCP Connections +# - +# - masquerade_tcp_con="::: [::..]" +# - +# - Multiple declarations (blank separated list) are possible +# - +# - Example: +# - +# - masquerade_tcp_con="192.168.63.0/24:192.168.62.244:80:${local_if_1} +# - 10.0.0.0/8:192.168.62.244:443:${local_if_1}" +# - +# - 192.168.64.55: Repeater TP-Link TL-WA850RE +# - +# - Blank separated list +# - +masquerade_tcp_cons="" + + +# ============= +# --- Portforwarding +# ============= + +# - Portforwarding TCP +# - +# - portforward_tcp=":::" +# - +# - Multiple declarations are possible +# - +# - Example: +# - portforward_tcp="$ext_if_dsl_1:9997:192.168.52.25:22 +# - $ext_if_dsl_1:9998:192.168.53.24:22" +# - +# - Blank separated list +# - +portforward_tcp="" + + +# - Portforwarding UDP +# - +# - portforward_udp=":::" +# - +# - Multiple declarations are possible +# - +# - Example: +# - portforward_udp="$ext_if_dsl_1:1094:192.168.52.25:1094 +# - $ext_if_dsl_1:9999:192.168.53.24:1095" +# - +# - Blank separated list +# - +portforward_udp="" + + + +# ============= +# --- Basic behavior +# ============= + +# === +# = Services allowed out to the world wide web +# === + +allow_ssh_request_out=true +allow_http_request_out=true +allow_smtp_request_out=true +allow_mail_request_out=true +allow_ftp_request_out=true +allow_tftp_request_out=true +allow_ntp_request_out=true +allow_timeserver_request_out=true +allow_pgpserver_request_out=true +allow_telnet_request_out=true +allow_whois_request_out=true +allow_cpan_wait_request_out=true +allow_hbci_request_out=true +allow_jabber_request_out=true +allow_silc_request_out=true +allow_irc_request_out=true +allow_mysql_request_out=true +allow_ipmi_request_out=true +allow_remote_console_request_out=true + +allow_samba_requests_out=true + +allow_vpn_out=true +vpn_out_ports="1194 1195 1196" + +llow_cisco_vpn_out=true +cisco_vpn_out_ports="$standard_isakmp_port $standard_ipsec_nat_t" +cisco_vpn_out_protocol="esp" + + +# === +# = Services allowed between local networks +# === + +# - These Parameters are only considered, if traffic +# - between local networks are not permitted, thats +# - if 'permit_between_local_networks=false' (see below). +# - +allow_ssh_between_local_nets=true +allow_samba_between_local_nets=false +allow_ldap_between_local_nets=false +allow_printing_between_local_nets=true +allow_scanning_between_local_nets=true + + +# === +# = Other Parameters +# === + +# - Permit internet access to all machines at local network +# - Does not include this server itself +# - +permit_local_net_to_inet=true + +# - Do not block any traffic between local machines +# - +permit_between_local_networks=false + +# - Do not block any ICMP traffic +# - +permit_all_icmp_traffic=true + +# - Access to Mailservices (LAN and WAN) (pop/imap/smtps) from local (gateway) machine. +# - +# - Maybe useful for testing purpose with telnet or openssl +# - +provide_mailservice_from_local=true + +# - iPerf is a tool for active measurements of the maximum achievable bandwidth on IP networks. +# - It supports tuning of various parameters related to timing, buffers and protocols (TCP, UDP, +# - SCTP with IPv4 and IPv6). For each test it reports the bandwidth, loss, and other parameters. +# - +create_iperf_rules=false + + + +# ============= +# - MAC Address Filtering +# ============= + +# - MAC Addreses alowed to all destinations (gateway, remote, local networks) +# - +# - Blank separated list +# - +allow_all_mac_src_addresses="" + +# - MAC Addreses alowed to local networks (gateway, local networks) +# - +# - Blank separated list +# - +allow_local_mac_src_addresses="" + + +# - MAC Addreses alowed to remote networks +# - +# - Blank separated list +# - +allow_remote_mac_src_addresses="" + + + + +# ============= +# --- Block IP's / IP-Ranges +# ============= + +# - 222.184.0.0/13 CHINANET-JS +# - 61.160.0.0/16 - CHINANET-JS +# - 116.8.0.0/14 CHINANET-GX +# - +# - Blank separated list +# - +blocked_ips="222.184.0.0/13 61.160.0.0/16 116.8.0.0/14" + + +# ============= +# --- Block Ports on extern Interfaces +# ============= + +# - Generally (for all interfaces) block this ports +# - +# - Portmapper +# - tcp 111 +# - udp 111 +# - +# - Authentication tap ident +# - tcp 113 +# - +# - Location Service +# - tcp 135 +# - +# - Windows Stuff +# - tcp 137:139 +# - udp 137:139 +# - tcp 445 +# - +block_tcp_ports="111 135 631" +block_udp_ports="111" +if ! $allow_samba_requests_out ; then + block_tcp_ports="$block_udp_ports 137:139 445" + block_udp_ports="$block_udp_ports 137:139" +fi + +block_ident=true + + +# ============= +# - Packets not wanted on gateway on local Interfaces +# ============= + +not_wanted_on_gw_tcp_ports="111 113 135 631" +not_wanted_on_gw_udp_ports="111 631" +if ! $local_samba_service ; then + not_wanted_on_gw_tcp_ports="$not_wanted_on_gw_tcp_ports 137:139 445" + not_wanted_on_gw_udp_ports="$not_wanted_on_gw_udp_ports 137:139" +fi + +not_wanted_ident=true + + +# ============= +# --- Router +# ============= + +# - Set to "true" to secure/tune the kernel +# - +adjust_kernel_parameters=true + +# - Protection against several attacks +# - +protect_against_several_attacks=true + + + +# ============= +# --- Kernel related - Adjust Kernel Parameters (Security/Tuning) +# ============= + +# - Activate forwarding +# - +# - Enable/disable forwarding to and between interfaces +# - +kernel_activate_forwarding=true + +# - Activate kernel support for dynamic IP adresses +# - (not needed in case of static IP) +# - +# - see also https://www.frozentux.net/iptables-tutorial/other/ip_dynaddr.txt +# - +# - The values for the ip_dynaddr sysctl are [*]: +# - +# - 1: To enable: +# - 2: To enable verbosity: +# - 4: To enable RST-provoking: +# - 8: To enable asymetric routing work-around [**] +# - +# - [*] At boot, by default no address rewriting is attempted. +# - [**] This code is currently totaly untested. +# - +# - Flags can be combined by adding them. Common settings +# - would be: +# - +# - To enable rewriting in quiet mode: +# - # echo 1 > /proc/sys/net/ipv4/ip_dynaddr +# - To enable rewriting in verbose mode: +# - # echo 3 > /proc/sys/net/ipv4/ip_dynaddr +# - To enable quiet RST-provoking mode (1+4): +# - # echo 5 > /proc/sys/net/ipv4/ip_dynaddr +# - ... +# - +kernel_support_dynaddr=true +dynaddr_flag="5" + +# - Reduce DoS'ing ability by reducing timeouts +# - +kernel_reduce_timeouts=true + +# - Hardening TCP/IP Stack Against SYN Floods +# - +# - Enable syn cookies prevents against the common 'syn flood attack' +# - +kernel_tcp_syncookies=true + +# - Protection against ICMP bogus error responses +# - +kernel_protect_against_icmp_bogus_messages=true + +# - Ignore Broadcast Pings +# - +kernel_ignore_broadcast_ping=true + +# - Deactivate Source Routed Packets +# - +kernel_deactivate_source_route=true + +# - Deactivate sending ICMP redirects +# - +# - Note: IP TV requires sending ICMP redirects. So if IP TV is provided, this +# - Parameter will be set to "false" +# - +# - ICMP redirects are used by routers to specify better routing paths out of +# - one network, based on the host choice, so basically it affects the way +# - packets are routed and destinations. +# - +kernel_dont_accept_redirects=true + +# - Activate Reverse Path Filtering (Antispoofing) +# - +# - Reverse Pfadfilterung aktivieren. Dies hilft durch automatisches Ablehnen +# - von Quelladressen, die nicht mit dem Netzwerkinterface übereinstimmen, +# - sicherzustellen, dass Pakete legitime Quelladressen benutzen. Dies hat +# - Sicherheitsvorteile, da es IP Spoofing verhindert. Wir müssen es für +# - alle net/ipv4/conf/* aktivieren, da sonst die Validierung der Quelle +# - nicht voll funktionsfähig ist. +# - +kernel_activate_rp_filter=true + +# - Logging of spoofed (source routed" and "redirect") packets +# - +kernel_log_martians=false + + + +# ============= +# --- Some further Ports/IP-Address Configuration +# ============= + +# - unpriviligierte Ports +# - +unprivports="1024:65535" + +# - Loopback +loopback="127.0.0.0/8" + +# - Private Networks +priv_class_a="10.0.0.0/8" +priv_class_b="172.16.0.0/12" +priv_class_c="192.168.0.0/16" + +# - Multicast Addresse +class_d_multicast="224.0.0.0/4" + +# Reserved Addresse +class_e_reserved="240.0.0.0/5" + diff --git a/NONE-CKUBU2/ipt-firewall/post_decalrations.conf b/NONE-CKUBU2/ipt-firewall/post_decalrations.conf new file mode 100644 index 0000000..7d0e9bf --- /dev/null +++ b/NONE-CKUBU2/ipt-firewall/post_decalrations.conf @@ -0,0 +1,505 @@ +#!/usr/bin/env bash + + +# ----------- +# --- Define Arrays +# ----------- + +# --- +# - Masquerade TCP Connections +# --- + +declare -a nat_network_arr +for _net in $nat_networks ; do + nat_network_arr+=("$_net") +done + +declare -a masquerade_tcp_con_arr +for _str in $masquerade_tcp_cons ; do + masquerade_tcp_con_arr+=("$_str") +done + + +# --- +# - Extern Network interfaces (DSL, Staic Lines, All together) +# --- +declare -a nat_device_arr +declare -a dsl_device_arr +declare -a ext_if_arr +for _dev in $ext_ifs_dsl ; do + dsl_device_arr+=("$_dev") + ext_if_arr+=("$_dev") + nat_device_arr+=("$_dev") +done +for _dev in $ext_ifs_static ; do + ext_if_arr+=("$_dev") +done +for _dev in $nat_devices ; do + if ! containsElement $_dev "${nat_device_arr[@]}" ; then + nat_device_arr+=("$_dev") + fi +done + +# --- +# - VPN Interfaces +# --- +declare -a vpn_if_arr +for _dev in $vpn_ifs ; do + vpn_if_arr+=("$_dev") +done + +# --- +# - Local Network Interfaces +# --- +declare -a local_if_arr +for _dev in $local_ifs ; do + local_if_arr+=("$_dev") +done + +# --- +# - Network Interfaces completly blocked +# --- +declare -a blocked_if_arr +for _dev in $blocked_ifs ; do + blocked_if_arr+=("$_dev") +done + +# --- +# - Network Interfaces not firewalled +# --- +declare -a unprotected_if_arr +for _dev in $unprotected_ifs ; do + unprotected_if_arr+=("$_dev") +done + +# --- +# - Allow these local networks any access to the internet +# --- +declare -a any_access_to_inet_network_arr +for _net in $any_access_to_inet_networks ; do + any_access_to_inet_network_arr+=("$_net") +done + +declare -a any_access_from_inet_network_arr +for _net in $any_access_from_inet_networks ; do + any_access_from_inet_network_arr+=("$_net") +done + +# --- +# - Allow local services from given extern networks +# --- +declare -a allow_ext_net_to_local_service_arr +for _val in $allow_ext_net_to_local_service ; do + allow_ext_net_to_local_service_arr+=("$_val") +done + +# --- +# - Allow all traffic from extern address/network to local address/network +# --- +declare -a allow_ext_net_to_local_net_arr +for _val in $allow_ext_net_to_local_net ; do + allow_ext_net_to_local_net_arr+=("$_val") +done + +# --- +# - Block all extern traffic to (given) local network +# --- +declare -a block_all_ext_to_local_net_arr +for _net in $block_all_ext_to_local_net ; do + block_all_ext_to_local_net_arr+=("$_net") +done + +# --- +# - Allow local services from given local networks +# --- +declare -a allow_local_net_to_local_service_arr +for _val in $allow_local_net_to_local_service ; do + allow_local_net_to_local_service_arr+=("$_val") +done + +# --- +# - Allow all traffic from local network to local ip-address +# --- +declare -a allow_local_net_to_local_ip_arr +for _val in $allow_local_net_to_local_ip ; do + allow_local_net_to_local_ip_arr+=("$_val") +done + +# --- +# - Allow all traffic from local ip-address to local network +# --- +declare -a allow_local_ip_to_local_net_arr +for _val in $allow_local_ip_to_local_net ; do + allow_local_ip_to_local_net_arr+=("$_val") +done + +# --- +# - Allow all traffic from (one) local network to (another) local network +# --- +declare -a allow_local_net_to_local_net_arr +for _val in $allow_local_net_to_local_net ; do + allow_local_net_to_local_net_arr+=("$_val") +done + +# --- +# - Allow local ip address from given local interface +# --- +declare -a allow_local_if_to_local_ip_arr +for _val in $allow_local_if_to_local_ip ; do + allow_local_if_to_local_ip_arr+=("$_val") +done + +# --- +# - Separate local Networks +# --- +declare -a separate_local_network_arr +for _net in $separate_local_networks ; do + separate_local_network_arr+=("$_net") +done + +# --- +# - Separate local Interfaces +# --- +declare -a separate_local_if_arr +for _net in $separate_local_ifs ; do + separate_local_if_arr+=("$_net") +done + +# --- +# - Generally block ports on extern interfaces +# --- +declare -a block_tcp_port_arr +for _port in $block_tcp_ports ; do + block_tcp_port_arr+=("$_port") +done + +declare -a block_udp_port_arr +for _port in $block_udp_ports ; do + block_udp_port_arr+=("$_port") +done + +# --- +# - Not wanted on intern interfaces +# --- +declare -a not_wanted_on_gw_tcp_port_arr +for _port in $not_wanted_on_gw_tcp_ports ; do + not_wanted_on_gw_tcp_port_arr+=("$_port") +done + +declare -a not_wanted_on_gw_udp_port_arr +for _port in $not_wanted_on_gw_udp_ports ; do + not_wanted_on_gw_udp_port_arr+=("$_port") +done + +# --- +# - Private IPs / IP-Ranges allowed to forward +# --- +declare -a forward_private_ip_arr +for _ip in $forward_private_ips ; do + forward_private_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses to log +# --- +declare -a log_ip_arr +for _ip in $log_ips ; do + log_ip_arr+=("$_ip") +done + +# --- +# - Network Devices local DHCP Client +# --- +declare -a dhcp_client_interfaces_arr +for _dev in $dhcp_client_interfaces ; do + dhcp_client_interfaces_arr+=("$_dev") +done + +# --- +# - IP Addresses DHCP Failover Server +# --- +declare -a dhcp_failover_server_ip_arr +for _ip in $dhcp_failover_server_ips ; do + dhcp_failover_server_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses DNS Server +# --- +declare -a dns_server_ip_arr +for _ip in $dns_server_ips ; do + dns_server_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses SSH Server only at ocal Networks +# --- +declare -a ssh_server_only_local_ip_arr +for _ip in $ssh_server_only_local_ips ; do + ssh_server_only_local_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses HTTP Server only local Networks +# --- +declare -a http_server_only_local_ip_arr +for _ip in $http_server_only_local_ips ; do + http_server_only_local_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses Mail Server only local Networks +# --- +declare -a mail_server_only_local_ip_arr +for _ip in $mail_server_only_local_ips ; do + mail_server_only_local_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses FTP Server +# --- +declare -a ftp_server_only_local_ip_arr +for _ip in $ftp_server_only_local_ips ; do + ftp_server_only_local_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses Samba Server +# --- +declare -a samba_server_local_ip_arr +for _ip in $samba_server_local_ips ; do + samba_server_local_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses LDAP Server +# --- +declare -a ldap_server_local_ip_arr +for _ip in $ldap_server_local_ips ; do + ldap_server_local_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses Telephone Systems +# --- +declare -a tele_sys_ip_arr +for _ip in $tele_sys_ips ; do + tele_sys_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses SNMP Server +# --- +declare -a snmp_server_ip_arr +for _ip in $snmp_server_ips ; do + snmp_server_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses Munin Service +# --- +declare -a munin_local_server_ip_arr +for _ip in $munin_local_server_ips ; do + munin_local_server_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses XyMon +# --- +declare -a xymon_server_ip_arr +for _ip in $xymon_server_ips ; do + xymon_server_ip_arr+=("$_ip") +done + +# --- +# - IP Adresses IPMI interface +# --- +declare -a ipmi_server_ip_arr +for _ip in $ipmi_server_ips ; do + ipmi_server_ip_arr+=("$_ip") +done + +# --- +# -IP Addresses Ubiquiti Unifi Accesspoints +# --- +declare -a unifi_ap_local_ip_arr +for _ip in $unifi_ap_local_ips ; do + unifi_ap_local_ip_arr+=("$_ip") +done +declare -a unifi_controller_gateway_ip_arr +for _ip in $unifi_controller_gateway_ips ; do + unifi_controller_gateway_ip_arr+=("$_ip") +done +declare -a unify_controller_local_net_ip_arr +for _ip in $unify_controller_local_net_ips ; do + unify_controller_local_net_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses Printer +# - +declare -a printer_ip_arr +for _ip in $printer_ips ; do + printer_ip_arr+=("$_ip") +done + + +# --- +# - IP Adresses Brother Scanner (brscan) +# --- +declare -a brother_scanner_ip_arr +for _ip in $brother_scanner_ips ; do + brother_scanner_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses PCNS Server +# --- +declare -a pcns_server_ip_arr +for _ip in $pcns_server_ips ; do + pcns_server_ip_arr+=("$_ip") +done + + +# --- +# - IP Addresses VNC Service +# --- +declare -a rm_server_ip_arr +for _ip in $rm_server_ips ; do + rm_server_ip_arr+=("$_ip") +done + +# --- +# - IP Addresses Rsync Out +# --- +# local +declare -a rsync_out_ip_arr +for _ip in $rsync_out_ips ; do + rsync_out_ip_arr+=("$_ip") +done + +# --- +# - Other local Services +# --- +declare -a other_service_arr +for _val in $other_services ; do + other_service_arr+=("$_val") +done + +# --- +# - SSH Ports +# --- +declare -a ssh_port_arr +for _port in $ssh_ports ; do + ssh_port_arr+=("$_port") +done + +# --- +# - Cisco kompartible VPN Ports +# --- +declare -a cisco_vpn_out_port_arr +for _port in $cisco_vpn_out_ports ; do + cisco_vpn_out_port_arr+=("$_port") +done + +# --- +# - VPN Ports +# --- +declare -a vpn_gw_port_arr +for _port in $vpn_gw_ports ; do + vpn_gw_port_arr+=("$_port") +done +declare -a vpn_local_net_port_arr +for _port in $vpn_local_net_ports ; do + vpn_local_net_port_arr+=("$_port") +done +declare -a vpn_out_port_arr +for _port in $vpn_out_ports ; do + vpn_out_port_arr+=("$_port") +done + +# --- +# - Rsync Out Ports +# -- +declare -a rsync_port_arr +for _port in $rsync_ports ; do + rsync_port_arr+=("$_port") +done + +# --- +# - Samba Ports +# --- + +declare -a samba_udp_port_arr +for _port in $samba_udp_ports ; do + samba_udp_port_arr+=("$_port") +done + +declare -a samba_tcp_port_arr +for _port in $samba_tcp_ports ; do + samba_tcp_port_arr+=("$_port") +done + +# --- +# - LDAP Ports +# --- + +declare -a ldap_udp_port_arr +for _port in $ldap_udp_ports ; do + ldap_udp_port_arr+=("$_port") +done + +declare -a ldap_tcp_port_arr +for _port in $ldap_tcp_ports ; do + ldap_tcp_port_arr+=("$_port") +done + +# --- +# - IPMI +# --- + +declare -a ipmi_udp_port_arr +for _port in $ipmi_udp_ports ; do + ipmi_udp_port_arr+=("$_port") +done + +declare -a ipmi_tcp_port_arr +for _port in $ipmi_tcp_ports ; do + ipmi_tcp_port_arr+=("$_port") +done + + +# --- +# - Portforwrds TCP +# --- +declare -a portforward_tcp_arr +for _str in $portforward_tcp ; do + portforward_tcp_arr+=("$_str") +done + +# --- +# - Portforwrds UDP +# --- +declare -a portforward_udp_arr +for _str in $portforward_udp ; do + portforward_udp_arr+=("$_str") +done + +# --- +# - MAC Address Filtering +# --- +declare -a allow_all_mac_src_address_arr +for _mac in $allow_all_mac_src_addresses ; do + allow_all_mac_src_address_arr+=("$_mac") +done + +declare -a allow_local_mac_src_address_arr +for _mac in $allow_local_mac_src_addresses ; do + allow_local_mac_src_address_arr+=("$_mac") +done + +declare -a allow_remote_mac_src_address_arr +for _mac in $allow_remote_mac_src_addresses ; do + allow_remote_mac_src_address_arr+=("$_mac") +done + diff --git a/NONE-CKUBU2/isc-dhcp6-server.NONE-CKUBU b/NONE-CKUBU2/isc-dhcp6-server.NONE-CKUBU new file mode 100755 index 0000000..071e1f8 --- /dev/null +++ b/NONE-CKUBU2/isc-dhcp6-server.NONE-CKUBU @@ -0,0 +1,116 @@ +#!/bin/sh +# +# + +### BEGIN INIT INFO +# Provides: isc-dhcp6-server +# Required-Start: $remote_fs $network $syslog +# Required-Stop: $remote_fs $network $syslog +# Should-Start: $local_fs slapd $named +# Should-Stop: $local_fs slapd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: DHCPv6 server +# Description: Dynamic Host Configuration Protocol Server +### END INIT INFO + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +OPTIONS="-6" + +test -f /usr/sbin/dhcpd || exit 0 + +DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp6-server}" + +# It is not safe to start if we don't have a default configuration... +if [ ! -f "$DHCPD_DEFAULT" ]; then + echo "$DHCPD_DEFAULT does not exist! - Aborting..." + if [ "$DHCPD_DEFAULT" = "/etc/default/isc-dhcp-server" ]; then + echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem." + fi + exit 0 +fi + +. /lib/lsb/init-functions + +# Read init script configuration +[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT" + +NAME=dhcpd6 +DESC="ISC DHCPv6 server" +# fallback to default config file +DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/dhcpd6.conf} +# try to read pid file name from config file, with fallback to /var/run/dhcpd.pid +if [ -z "$DHCPD_PID" ]; then + DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1) +fi +DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd6.pid}" + +test_config() +{ + if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then + echo "dhcpd self-test failed. Please fix $DHCPD_CONF." + echo "The error was: " + /usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF" + exit 1 + fi +} + +# single arg is -v for messages, -q for none +check_status() +{ + if [ ! -r "$DHCPD_PID" ]; then + test "$1" != -v || echo "$NAME is not running." + return 3 + fi + if read pid < "$DHCPD_PID" && ps -p "$pid" > /dev/null 2>&1; then + test "$1" != -v || echo "$NAME is running." + return 0 + else + test "$1" != -v || echo "$NAME is not running but $DHCPD_PID exists." + return 1 + fi +} + +case "$1" in + start) + test_config + log_daemon_msg "Starting $DESC" "$NAME" + start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \ + --exec /usr/sbin/dhcpd -- \ + -q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES + sleep 2 + + if check_status -q; then + log_end_msg 0 + else + log_failure_msg "check syslog for diagnostics." + log_end_msg 1 + exit 1 + fi + ;; + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + start-stop-daemon --stop --quiet --pidfile "$DHCPD_PID" + log_end_msg $? + rm -f "$DHCPD_PID" + ;; + restart | force-reload) + test_config + $0 stop + sleep 2 + $0 start + if [ "$?" != "0" ]; then + exit 1 + fi + ;; + status) + echo -n "Status of $DESC: " + check_status -v + exit "$?" + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status}" + exit 1 +esac + +exit 0 diff --git a/NONE-CKUBU2/mailname.NONE-CKUBU b/NONE-CKUBU2/mailname.NONE-CKUBU new file mode 100644 index 0000000..98cd899 --- /dev/null +++ b/NONE-CKUBU2/mailname.NONE-CKUBU @@ -0,0 +1 @@ +gw-replacement2.local.netz diff --git a/NONE-CKUBU2/main.cf.NONE-CKUBU b/NONE-CKUBU2/main.cf.NONE-CKUBU new file mode 100644 index 0000000..555bc76 --- /dev/null +++ b/NONE-CKUBU2/main.cf.NONE-CKUBU @@ -0,0 +1,70 @@ +# See /usr/share/postfix/main.cf.dist for a commented, more complete version + + +# Debian specific: Specifying a file name will cause the first +# line of that file to be used as the name. The Debian default +# is /etc/mailname. +#myorigin = /etc/mailname + +smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) +biff = no + +# appending .domain is the MUA's job. +append_dot_mydomain = no + +# Uncomment the next line to generate "delayed mail" warnings +#delay_warning_time = 4h + +readme_directory = no + +# TLS parameters +smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem +smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key +smtpd_use_tls=yes +smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache +smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache + +# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for +# information on enabling SSL in the smtp client. + +myhostname = gw-replacement.local.netz +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases + +myorigin = /etc/mailname +mydestination = gw-replacement2.local.netz, + localhost + +mynetworks = 127.0.0.0/8, + #[::ffff:127.0.0.0]/104 + #[::1]/128 + 192.168.63.252/32 +mailbox_command = procmail -a "$EXTENSION" +mailbox_size_limit = 0 +recipient_delimiter = + +#inet_interfaces = all + +inet_protocols = ipv4 +inet_interfaces = 127.0.0.1, + #[::ffff:127.0.0.0]/104, + #[::1]/128, + 192.168.63.252 + + +# Enable SASL authentication +smtp_sasl_auth_enable = yes + +# Forwarding to the ip-adress of host b.mx.oopen.de +relayhost = [b.mx.oopen.de] + +# File including login data +smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd + +# Force using a (TLS) security connection +# obsulete - use smtp_tls_security_level instead +#smtp_use_tls = yes +#smtp_tls_enforce_peername = no +smtp_tls_security_level = encrypt + +# Disallow methods that allow anonymous authentication. +smtp_sasl_security_options = noanonymous diff --git a/NONE-CKUBU2/openvpn/update-resolv-conf b/NONE-CKUBU2/openvpn/update-resolv-conf new file mode 100755 index 0000000..8306380 --- /dev/null +++ b/NONE-CKUBU2/openvpn/update-resolv-conf @@ -0,0 +1,54 @@ +#!/bin/bash +# +# Parses DHCP options from openvpn to update resolv.conf +# To use set as 'up' and 'down' script in your openvpn *.conf: +# up /etc/openvpn/update-resolv-conf +# down /etc/openvpn/update-resolv-conf +# +# Used snippets of resolvconf script by Thomas Hood +# and Chris Hanson +# Licensed under the GNU GPL. See /usr/share/common-licenses/GPL. +# +# 05/2006 chlauber@bnc.ch +# +# Example envs set from openvpn: +# foreign_option_1='dhcp-option DNS 193.43.27.132' +# foreign_option_2='dhcp-option DNS 193.43.27.133' +# foreign_option_3='dhcp-option DOMAIN be.bnc.ch' + +[ -x /sbin/resolvconf ] || exit 0 + +case $script_type in + +up) + for optionname in ${!foreign_option_*} ; do + option="${!optionname}" + echo $option + part1=$(echo "$option" | cut -d " " -f 1) + if [ "$part1" == "dhcp-option" ] ; then + part2=$(echo "$option" | cut -d " " -f 2) + part3=$(echo "$option" | cut -d " " -f 3) + if [ "$part2" == "DNS" ] ; then + IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3" + fi + if [ "$part2" == "DOMAIN" ] ; then + IF_DNS_SEARCH="$part3" + fi + fi + done + R="" + if [ "$IF_DNS_SEARCH" ] ; then + R="${R}search $IF_DNS_SEARCH +" + fi + for NS in $IF_DNS_NAMESERVERS ; do + R="${R}nameserver $NS +" + done + echo -n "$R" | /sbin/resolvconf -a "${dev}.inet" + ;; +down) + /sbin/resolvconf -d "${dev}.inet" + ;; +esac + diff --git a/NONE-CKUBU2/pap-secrets.NONE-CKUBU b/NONE-CKUBU2/pap-secrets.NONE-CKUBU new file mode 100644 index 0000000..85a05a1 --- /dev/null +++ b/NONE-CKUBU2/pap-secrets.NONE-CKUBU @@ -0,0 +1,89 @@ +# +# /etc/ppp/pap-secrets +# +# This is a pap-secrets file to be used with the AUTO_PPP function of +# mgetty. mgetty-0.99 is preconfigured to startup pppd with the login option +# which will cause pppd to consult /etc/passwd (and /etc/shadow in turn) +# after a user has passed this file. Don't be disturbed therefore by the fact +# that this file defines logins with any password for users. /etc/passwd +# (again, /etc/shadow, too) will catch passwd mismatches. +# +# This file should block ALL users that should not be able to do AUTO_PPP. +# AUTO_PPP bypasses the usual login program so it's necessary to list all +# system userids with regular passwords here. +# +# ATTENTION: The definitions here can allow users to login without a +# password if you don't use the login option of pppd! The mgetty Debian +# package already provides this option; make sure you don't change that. + +# INBOUND connections + +# Every regular user can use PPP and has to use passwords from /etc/passwd +* hostname "" * + +# UserIDs that cannot use PPP at all. Check your /etc/passwd and add any +# other accounts that should not be able to use pppd! +guest hostname "*" - +master hostname "*" - +root hostname "*" - +support hostname "*" - +stats hostname "*" - + +# OUTBOUND connections + +# Here you should add your userid password to connect to your providers via +# PAP. The * means that the password is to be used for ANY host you connect +# to. Thus you do not have to worry about the foreign machine name. Just +# replace password with your password. +# If you have different providers with different passwords then you better +# remove the following line. + +# * password + +## - Aktionsbuendnis +"feste-ip9/1TBGC27CYX92@t-online-com.de" * "7FbmJz7L" + +## - Anwaltskanzlei - Karl-Marx_Strasse (anw-km) +"0017005041965502052728690001@t-online.de" * "62812971" + +## - Anwaltskanzlei - Urbanstrasse (anw-urb) +"0019673090265502751343110001@t-online.de" * "85593499" + +## - B3 Bornim +"t-online-com/8TB0LIXKXV82@t-online-com.de" * "38460707" + +## - Fluechlingsrat BRB +"0022044435885511150351780001@t-online.de" * "27475004" + +## - Jonas +"0023866648325511093506040001@t-online.de" * "13635448" + +## - Kanzlei Kiel +## - DSL +"ar0284280107" * "39457541" +## - VDSL +"ab3391185321" * "jhecfmvk" + +## - MBR Berlin +## - DSL +"0019507524965100021004430001@t-online.de" * "76695918" +## - VDSL +"0029741693695511193970180001@t-online.de" * "84616024" + +## - Opferperspektive +"feste-ip3/6TB9UZGGP1GK@t-online-com.de" * "53506202" + +## - Sprachenatelier Berlin +"0021920376975502683262730001@t-online.de" * "52167784" + +## - ReachOut Berlin +## - first (primary) line +"ar2667509237" * "93925410" +## - second line +"ar1435496252" * "93925410" + +## - Warenform +"feste-ip4/7TB02K2HZ4Q3@t-online-com.de" * "EadGl15E" + +## - ckubu +"0025591824365511139967620001@t-online.de" * "67982653" diff --git a/NONE-CKUBU2/peers/dsl-provider b/NONE-CKUBU2/peers/dsl-provider new file mode 100644 index 0000000..1cb87df --- /dev/null +++ b/NONE-CKUBU2/peers/dsl-provider @@ -0,0 +1,19 @@ +# Minimalistic default options file for DSL/PPPoE connections + +noipdefault +defaultroute +replacedefaultroute +hide-password +#lcp-echo-interval 30 +#lcp-echo-failure 4 +noauth +persist +#mtu 1492 +#persist +#maxfail 0 +#holdoff 20 +plugin rp-pppoe.so eth2.7 +#user "feste-ip7/9TB3EGVM46Z6@t-online-com.de" +## - second line kanzlei undine +#user "0012047971635502977079530001@t-online.de" +user "0025591824365511139967620001@t-online.de" diff --git a/NONE-CKUBU2/peers/provider b/NONE-CKUBU2/peers/provider new file mode 100644 index 0000000..e74d71a --- /dev/null +++ b/NONE-CKUBU2/peers/provider @@ -0,0 +1,35 @@ +# example configuration for a dialup connection authenticated with PAP or CHAP +# +# This is the default configuration used by pon(1) and poff(1). +# See the manual page pppd(8) for information on all the options. + +# MUST CHANGE: replace myusername@realm with the PPP login name given to +# your by your provider. +# There should be a matching entry with the password in /etc/ppp/pap-secrets +# and/or /etc/ppp/chap-secrets. +user "myusername@realm" + +# MUST CHANGE: replace ******** with the phone number of your provider. +# The /etc/chatscripts/pap chat script may be modified to change the +# modem initialization string. +connect "/usr/sbin/chat -v -f /etc/chatscripts/pap -T ********" + +# Serial device to which the modem is connected. +/dev/modem + +# Speed of the serial line. +115200 + +# Assumes that your IP address is allocated dynamically by the ISP. +noipdefault +# Try to get the name server addresses from the ISP. +usepeerdns +# Use this connection as the default route. +defaultroute + +# Makes pppd "dial again" when the connection is lost. +persist + +# Do not ask the remote to authenticate. +noauth + diff --git a/NONE-CKUBU2/radvd.conf.NONE-CKUBU b/NONE-CKUBU2/radvd.conf.NONE-CKUBU new file mode 100644 index 0000000..8eea1dd --- /dev/null +++ b/NONE-CKUBU2/radvd.conf.NONE-CKUBU @@ -0,0 +1,29 @@ +interface eth1 +{ + AdvManagedFlag on; + AdvSendAdvert on; + AdvLinkMTU 1280; + #AdvOtherConfigFlag on; + + #prefix 2001:6f8:107e:63::/64 + #{ + # AdvOnLink on; + # AdvAutonomous on; + # AdvRouterAddr on; + #}; +}; + +interface br0 +{ + AdvManagedFlag on; + AdvSendAdvert on; + AdvLinkMTU 1280; + #AdvOtherConfigFlag on; + + #prefix 2001:6f8:107e:64::/64 + #{ + # AdvOnLink on; + # AdvAutonomous on; + # AdvRouterAddr on; + #}; +}; diff --git a/NONE-CKUBU2/rc.local.NONE-CKUBU b/NONE-CKUBU2/rc.local.NONE-CKUBU new file mode 100755 index 0000000..88131ff --- /dev/null +++ b/NONE-CKUBU2/rc.local.NONE-CKUBU @@ -0,0 +1,18 @@ +#!/bin/sh -e +# +# rc.local +# +# This script is executed at the end of each multiuser runlevel. +# Make sure that the script will "exit 0" on success or any other +# value on error. +# +# In order to enable or disable this script just change the execution +# bits. +# +# By default this script does nothing. + +#if ! cat /proc/swaps | grep -q "/dev/sda2" ; then +# swapon -p 1 /dev/sda2 > /dev/null 2>&1 || /bin/true +#fi + +exit 0 diff --git a/NONE-CKUBU2/resolv.conf.NONE-CKUBU b/NONE-CKUBU2/resolv.conf.NONE-CKUBU new file mode 100644 index 0000000..2b703fd --- /dev/null +++ b/NONE-CKUBU2/resolv.conf.NONE-CKUBU @@ -0,0 +1,3 @@ +domain local.netz +search local.netz +nameserver 127.0.0.1 diff --git a/NONE-CKUBU2/sasl_passwd.NONE-CKUBU b/NONE-CKUBU2/sasl_passwd.NONE-CKUBU new file mode 100644 index 0000000..c93d772 --- /dev/null +++ b/NONE-CKUBU2/sasl_passwd.NONE-CKUBU @@ -0,0 +1 @@ +[b.mx.oopen.de] ckubu@b.mx.oopen.de:3q4b2SqCcbqNZwdp diff --git a/NONE-CKUBU2/sasl_passwd.db.NONE-CKUBU b/NONE-CKUBU2/sasl_passwd.db.NONE-CKUBU new file mode 100644 index 0000000000000000000000000000000000000000..23751fbd1bdcfedd152012727577a547bb5b03f1 GIT binary patch literal 3072 zcmZQzU|?VbVh~6aWnIWT K7>%MJmH_})=OJPM literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/sbin/disk-action b/NONE-CKUBU2/sbin/disk-action new file mode 100755 index 0000000..079f1e7 --- /dev/null +++ b/NONE-CKUBU2/sbin/disk-action @@ -0,0 +1,55 @@ +#!/bin/bash + +export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +BASENAME="${0##*/}" +ACTION="$1" +MOUNT_POINT="$2" + +transmission_try_start() { + . /etc/default/transmission-daemon + if [ $(expr "${BASE_DIR}/" : "${MOUNT_POINT}/") -gt 0 ]; then + sed -r 's/^ENABLE_DAEMON=.*$/ENABLE_DAEMON=1/' < /etc/default/transmission-daemon > /tmp/.transmission-daemon.$$ + cat /tmp/.transmission-daemon.$$ > /etc/default/transmission-daemon + rm /tmp/.transmission-daemon.$$ + if [ "$(pidof transmission-daemon)" != "" ]; then + killall -9 transmission-daemon 2>&1 >/dev/null + sleep 1 + fi + xMASK=$(umask); umask 0000 + [ ! -d "${BASE_DIR}" ] && mkdir -p "${BASE_DIR}" + [ ! -d "${CONFIG_DIR}" ] && mkdir -p "${CONFIG_DIR}" + [ ! -d "${DOWNLOAD_DIR}" ] && mkdir -p "${DOWNLOAD_DIR}" + [ ! -d "${WATCH_DIR}" ] && mkdir -p "${WATCH_DIR}" + [ ! -f "${CONFIG_DIR}/settings.json" ] && cp "/var/lib/transmission/settings.json.template" "${CONFIG_DIR}/settings.json" + umask ${xMASK} + /etc/init.d/transmission-daemon start 2>&1 >/dev/null + fi +} + +transmission_try_stop() { + . /etc/default/transmission-daemon + if [ $(expr "${BASE_DIR}/" : "${MOUNT_POINT}/") -gt 0 ]; then + sed -r 's/^ENABLE_DAEMON=.*$/ENABLE_DAEMON=0/' < /etc/default/transmission-daemon > /tmp/.transmission-daemon.$$ + cat /tmp/.transmission-daemon.$$ > /etc/default/transmission-daemon + rm /tmp/.transmission-daemon.$$ + if [ "$(pidof transmission-daemon)" != "" ]; then + killall -9 transmission-daemon 2>&1 >/dev/null + fi + fi +} + +logger -t $BASENAME "$@ --> BEGIN" + +case "$1" in + add) + transmission_try_start + ;; + remove) + transmission_try_stop + ;; + *) + echo "Use: $0 (add|remove) /mount/point" +esac + +logger -t $BASENAME "$@ --> END" diff --git a/NONE-CKUBU2/sbin/ipt-firewall-gateway b/NONE-CKUBU2/sbin/ipt-firewall-gateway new file mode 100755 index 0000000..223a537 --- /dev/null +++ b/NONE-CKUBU2/sbin/ipt-firewall-gateway @@ -0,0 +1,4132 @@ +#!/usr/bin/env bash + +### BEGIN INIT INFO +# Provides: ipt-firewall +# Required-Start: $local_fs $remote_fs $syslog $network $time +# Required-Stop: $local_fs $remote_fs $syslog $network +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: IPv4 Firewall +### END INIT INFO + + +# ------------- +# - Settings +# ------------- + +ipt_conf_dir="/etc/ipt-firewall" + +inc_functions_file="${ipt_conf_dir}/include_functions.conf" + +load_modules_file=${ipt_conf_dir}/load_modules_ipv4.conf + +conf_logging=${ipt_conf_dir}/logging_ipv4.conf +conf_interfaces=${ipt_conf_dir}/interfaces_ipv4.conf +conf_default_ports=${ipt_conf_dir}/default_ports.conf +conf_main=${ipt_conf_dir}/main_ipv4.conf +conf_post_declarations=${ipt_conf_dir}/post_decalrations.conf + +# ------------- +# - Some checks and preloads.. +# ------------- + +ipt=$(which iptables) + +if [[ -z "$ipt" ]] ; then + echo "" + echo -e "\tiptables was not found on this server!" + echo + echo -e "\tFirewall Script was stopped!" + echo + exit 1 +fi + +if [[ ! -f "$inc_functions_file" ]] ; then + echo "" + echo -e "\tMissing include file '$inc_functions_file'" + echo + echo -e "\tFirewall Script was stopped!" + echo + exit 1 +else + source $inc_functions_file +fi + +if [[ ! -f "$load_modules_file" ]]; then + warn "No modules for loading configured. Missing file '$load_modules_file'!" +else + + while read -r module ; do + if ! lsmod | grep -q -E "^$module\s+" ; then + /sbin/modprobe $module > /dev/null 2>&1 + if [[ "$?" != "0" ]]; then + warn "Loading module '$module' failed!" + fi + fi + done < <(sed -ne 's/^[[:space:]]*\([^#].*\)[[:space:]]*/\1/p' $load_modules_file) + +fi + +if [[ ! -f "$conf_logging" ]]; then + fatal "Missing configuration for logging - file '$conf_logging'" +else + source $conf_logging +fi + +if [[ ! -f "$conf_default_ports" ]]; then + fatal "Missing configuration for default_ports - file '$conf_default_ports'" +else + source $conf_default_ports +fi + +if [[ ! -f "$conf_interfaces" ]]; then + fatal "Missing interface configurations - file '$conf_interfaces'" +else + source $conf_interfaces +fi + +if [[ ! -f "$conf_main" ]]; then + fatal "Missing main configurations - file '$conf_main'" +else + source $conf_main +fi + +if [[ ! -f "$conf_post_declarations" ]]; then + fatal "Missing post declarations - file '$conf_post_declarations'" +else + source $conf_post_declarations +fi + + +echo +if $terminal ; then + echo -e "\033[37m\033[1m\tStarting firewall iptables (IpV4)..\033[m" +else + echo "Starting firewall iptables (IpV4).." +fi +echo + + +# ------------- +# --- Activate IP Forwarding +# ------------- + +## - IP Forwarding aktivieren/deaktivieren. +## - +## - Dieses benötigen wir lediglich bei einem Rechner in mehreren Netzen. +## - Es ist anzuraten, diese Einstellung vor allen anderen vorzunehmen, +## - weil hiermit auch andere (de)aktiviert werden. +## - +if $kernel_activate_forwarding ; then + echo 1 > /proc/sys/net/ipv4/ip_forward + echononl "\tActivate Forwarding.." + echo_done +else + echo 0 > /proc/sys/net/ipv4/ip_forward + echononl "\t\033[33m\033[1mDisable Forwarding.." + echo_done +fi + +if $kernel_support_dynaddr ; then + echononl "\tActivate kernel support for dynamic addresses.." + if [[ -n $dynaddr_flag ]] && [[ $dynaddr_flag =~ ^-?[0-9]+$ ]]; then + echo $dynaddr_flag > /proc/sys/net/ipv4/ip_dynaddr + echo_done + else + echo_failed + fi +else + echo 0 > /proc/sys/net/ipv4/ip_dynaddr + echononl "\t\033[33m\033[1mDisable Forwarding..\033[m" + echo_done +fi + +# ------------- +# --- Adjust Kernel Parameters (Security/Tuning) +# ------------- + +echononl "\tAdjust Kernel Parameters (Security/Tuning).." + +if $adjust_kernel_parameters ; then + ## - Reduce DoS'ing ability by reducing timeouts + ## - + if $kernel_reduce_timeouts ; then + echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout + echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time + echo 1 > /proc/sys/net/ipv4/tcp_window_scaling + echo 0 > /proc/sys/net/ipv4/tcp_sack + fi + + ## - SYN COOKIES + ## - + if $kernel_tcp_syncookies ; then + echo 1 > /proc/sys/net/ipv4/tcp_syncookies + echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog + echo 3 > /proc/sys/net/ipv4/tcp_synack_retries + fi + + ## - Protection against ICMP bogus error responses + ## - + if $kernel_protect_against_icmp_bogus_messages ; then + echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses + fi + + ## - Ignore Broadcast Pings + ## - + if $kernel_ignore_broadcast_ping ; then + echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts + fi + + ## - Deactivate Source Routed Packets + ## - + if $kernel_deactivate_source_route ; then + for asr in /proc/sys/net/ipv4/conf/*/accept_source_route ; do + echo 0 > $asr + done + fi + + ## - Deactivate sending ICMP redirects + ## - + if ! $telekom_internet_tv ; then + if $kernel_dont_accept_redirects ; then + for rp_filter in /proc/sys/net/ipv4/conf/*/rp_filter ; do + echo 1 > $rp_filter + done + else + for rp_filter in /proc/sys/net/ipv4/conf/*/rp_filter ; do + echo 0 > $rp_filter + done + fi + fi + + ## - Logging of spoofed (source routed" and "redirect") packets + ## - + if $kernel_log_martians ; then + echo "0" > /proc/sys/net/ipv4/conf/all/log_martians + fi + + echo_done # Adjust Kernel Parameters (Security/Tuning) +else + echo_skipped +fi + + +# ------------- +# --- Set default policies / Flush Rules +# ------------- + +echo +echononl "\tFlushing firewall iptable (IPv4).." + +# - default policies +# - +$ipt -P INPUT ACCEPT +$ipt -P OUTPUT ACCEPT +$ipt -P FORWARD ACCEPT + +## - flush chains +## - +$ipt -F +$ipt -F INPUT +$ipt -F OUTPUT +$ipt -F FORWARD +$ipt -F -t mangle +$ipt -F -t nat +$ipt -F -t raw +$ipt -X +$ipt -Z + +$ipt -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu + +unset natted_interface_arr +declare -a natted_interface_arr + +for _dev in ${nat_device_arr[@]} ; do + $ipt -t nat -A POSTROUTING -o $_dev -j MASQUERADE + natted_interface_arr+=("$_dev") +done + +if [[ ${#nat_network_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${nat_network_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + + # - Prevent natting on an interface already natted + # - + if containsElement "${_val_arr[1]}" "${nat_device_arr[@]}" ; then + continue + fi + + # - ?? - Don't know which rule is the right one + # - + #$ipt -t nat -A POSTROUTING -o ${_val_arr[1]} -d ${_val_arr[0]} -j MASQUERADE + $ipt -t nat -A POSTROUTING -o ${_val_arr[1]} -s ${_val_arr[0]} -j MASQUERADE + done +fi + +if $telekom_internet_tv ; then + $ipt -t nat -A POSTROUTING -o $tv_extern_if -j MASQUERADE +fi + +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr +if [[ ${#masquerade_tcp_con_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${masquerade_tcp_con_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + + + # - Skip if no interface is given + # - + if [[ -z "${_val_arr[3]}" ]] ; then + no_if_for_ip_arr+=("${_val_arr[1]}") + continue + fi + $ipt -t nat -A POSTROUTING -o ${_val_arr[3]} -p tcp -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -j MASQUERADE + done +fi + +#echo_done # Flushing firewall iptable (IPv4).. +if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "Masquerading for ip '$_ip' was omitted - No idestination interface present!" + done +else + echo_done +fi +echo + + +# ------------- +# - Log given IP Addresses +# ------------- + +echononl "\tLog given IP Addresses" +if [[ ${#log_ip_arr[@]} -gt 0 ]]; then + for _ip in ${log_ip_arr[@]} ; do + $ipt -A INPUT -s $_ip -j LOG --log-prefix "IPv4: $_ip IN: " --log-level $log_level + $ipt -A OUTPUT -d $_ip -j LOG --log-prefix "IPv4: $_ip OUT: " --log-level $log_level + $ipt -A FORWARD -s $_ip -j LOG --log-prefix "IPv4: $_ip FORWARD FROM: " --log-level $log_level + $ipt -A FORWARD -d $_ip -j LOG --log-prefix "IPv4: $_ip FORWARD TO: " --log-level $log_level + done + + echo_done +else + echo_skipped +fi + + +# ------------- +# --- Stopping firewall if only flushing was requested (parameter flush) +# ------------- + +case $1 in + flush) + warn No firewall rules are active! + exit 0;; +esac + + +# --- +# - Stop here, if no extern interface is configured +# --- + +if [[ ${#ext_if_arr[@]} -lt 1 ]] ; then + fatal "No extern Interface is configured!" +fi + + + +# ------------- +# --- Traffic Shaping +# ------------- + +echo "" +if $terminal ; then + echononl "\033[37m\033[1m\tStarting outbound shaping...\033[m" +else + echo -n "Starting outbound shaping" +fi + +if $TRAFFIC_SHAPING && [[ -n "$TC_DEV" ]] ; then + + tc=$(which tc) + + if [[ -z "$tc" ]]; then + echo_skipped + warn "'tc'-programm not found. Outbound shaping was ommitted!" + else + + ## - Löschen aller Klassen für $TC_DEV und der Filterregeln + ## - + $tc qdisc del dev $TC_DEV root 2> /dev/null > /dev/null + $ipt -t mangle -D POSTROUTING -o $TC_DEV -j MYSHAPER-OUT 2> /dev/null > /dev/null + $ipt -t mangle -F MYSHAPER-OUT + $ipt -t mangle -X MYSHAPER-OUT + + + # add HTB root qdisc + $tc qdisc add dev $TC_DEV root handle 1:0 htb default 26 + + # add main rate limit class(es) + $tc class add dev $TC_DEV parent 1: classid 1:1 htb rate ${LIMIT_UP}kbit + + # create fair-share-classes, descending priority + $tc class add dev $TC_DEV parent 1:1 classid 1:20 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 0 + $tc class add dev $TC_DEV parent 1:1 classid 1:21 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 1 + $tc class add dev $TC_DEV parent 1:1 classid 1:22 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 2 + $tc class add dev $TC_DEV parent 1:1 classid 1:23 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 3 + $tc class add dev $TC_DEV parent 1:1 classid 1:24 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 4 + $tc class add dev $TC_DEV parent 1:1 classid 1:25 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 5 + $tc class add dev $TC_DEV parent 1:1 classid 1:26 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 6 + + + # attach qdisc to leaf classes + # + # here we at SFQ to each priority class. SFQ insures that + # within each class connections will be treated (almost) fairly. + $tc qdisc add dev $TC_DEV parent 1:20 handle 20: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:21 handle 21: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:22 handle 22: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:23 handle 23: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:24 handle 24: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:25 handle 25: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:26 handle 26: sfq perturb 10 + + + # filter traffic into classes by fwmark + # + # here we direct traffic into priority class according to + # the fwmark set on the packet (we set fwmark with iptables + # later). Note that above we've set the default priority + # class to 1:26 so unmarked packets (or packets marked with + # unfamiliar IDs) will be defaulted to the lowest priority + # class. + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26 + + + # add MYSHAPER-OUT chain to the mangle table in iptables + # + # this sets up the table we'll use + # to filter and mark packets. + $ipt -t mangle -N MYSHAPER-OUT + $ipt -t mangle -I POSTROUTING -o $TC_DEV -j MYSHAPER-OUT + + + # add fwmark entries to classify different types of traffic + # + # Set fwmark from 20-26 according to + # desired class. 20 is highest prio. + + # mark 20 - high prio 0 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 20 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 20 + $ipt -t mangle -A MYSHAPER-OUT -p icmp -j RETURN + + # mark 21 - high prio 1 + # - DNS Service + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j MARK --set-mark 21 + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j RETURN + + # mark 22 - high prio 2 + # - VoIP SIP (sip ports, rtp ports, stun ports(3478)) + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${RTP_PORTS_START}:${RTP_PORTS_END} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${RTP_PORTS_START}:${RTP_PORTS_END} -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport ${SIP_PORT_REMOTE} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport ${SIP_PORT_REMOTE} -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${SIP_PORT_LOCAL} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${SIP_PORT_LOCAL} -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p udp -m multiport --dport ${STUN_PORTS} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp -m multiport --dport ${STUN_PORTS} -j RETURN + + # mark 23 - prio 3 + # - OpenVPN + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sport 1094,1095 -j MARK --set-mark 23 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sport 1094,1095 -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p tcp --dport 22 -j MARK --set-mark 23 + $ipt -t mangle -A MYSHAPER-OUT -p tcp --dport 22 -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p tcp --sport 22 -j MARK --set-mark 23 + $ipt -t mangle -A MYSHAPER-OUT -p tcp --sport 22 -j RETURN + + # mark 24 - prio 4 + # - WWW + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 80,443 -j MARK --set-mark 24 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 80,443 -j RETURN + + + # mark 25 - prio 5 + # - Mailtraffic + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 587,110,995,143,993 -j MARK --set-mark 25 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 587,110,995,143,993 -j RETURN + + + # Remaining packets are marked according to TOS + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Delay -m mark --mark 0 -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0 -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Cost -m mark --mark 0 -j MARK --set-mark 25 + # redundant- mark any unmarked packets as 26 (low prio) + $ipt -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 26 + + echo_done + fi +else + echo_skipped +fi + + + +# --- +# - Provide (Telekom) IP TV +# --- + +echo +echononl "\tProvide (Telekom) Internet TV" + +if $telekom_internet_tv && [[ -n "$tv_local_if" ]] ; then + + # - Telekom VDSL - Rules for IPTV + # - + $ipt -A INPUT -i $tv_local_if -p igmp -s $tv_ip -j ACCEPT + #$ipt -A INPUT -i $tv_local_if -p igmp -j DROP + + $ipt -A FORWARD -s $tv_ip -j ACCEPT + $ipt -A FORWARD -d $tv_ip -j ACCEPT + + $ipt -A FORWARD -i $tv_ip -j ACCEPT + $ipt -A FORWARD -o $tv_ip -j ACCEPT + + + # - Forward all networks defined defind by igmpproxy + # - (see: phyint eth2.8 upstream ratelimit 0 threshold 1) + # + #$ipt -A FORWARD -s 217.0.119.0/24 -d 224.0.0.0/4 -j ACCEPT + #$ipt -A FORWARD -s 193.158.35.0/24 -d 224.0.0.0/4 -j ACCEPT + #$ipt -A FORWARD -s 239.35.100.6/24 -d 224.0.0.0/4 -j ACCEPT + #$ipt -A FORWARD -s 93.230.64.0/19 -d 224.0.0.0/4 -j ACCEPT + $ipt -A FORWARD -d 224.0.0.0/4 -j ACCEPT + $ipt -A FORWARD -s 224.0.0.0/4 -j ACCEPT + + $ipt -A OUTPUT -d 224.0.0.0/4 -j ACCEPT + $ipt -A INPUT -d 224.0.0.0/4 -j ACCEPT + + $ipt -A INPUT -i $tv_extern_if -d 224.0.0.0/4 -j ACCEPT + $ipt -A INPUT -i $tv_local_if -d 224.0.0.0/4 -j ACCEPT + $ipt -A OUTPUT -o $tv_extern_if -d 224.0.0.0/4 -j ACCEPT + $ipt -A OUTPUT -o $tv_local_if -d 224.0.0.0/4 -j ACCEPT + + #$ipt -A FORWARD -d 224.0.0.0/4 -j ACCEPT + $ipt -A FORWARD -i $tv_local_if -o $tv_extern_if -j ACCEPT + $ipt -A FORWARD -i $tv_extern_if -d 224.0.0.0/4 -j ACCEPT + + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- Pass through Devices Interfaces (not firewalled) +# ------------- + +if [[ ${#unprotected_if_arr[@]} -gt 0 ]]; then + echononl "\tPass through Devices (not firewalled)" + for _dev in ${unprotected_if_arr[@]} ; do + if $log_unprotected || $log_all ; then + $ipt -A INPUT -i $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + $ipt -A FORWARD -o $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -j ACCEPT + $ipt -A OUTPUT -o $_dev -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -j ACCEPT + $ipt -A FORWARD -o $_dev -j ACCEPT + fi + done + echo_done +fi + + + +# ------------- +# --- Block IPs / Networks / Interfaces +# ------------- +echononl "\tBlock IPs / Networks / Interfaces.." + + +# --- +# - Block IPs +# --- + +for _ip in $blocked_ips ; do + for _dev in ${ext_if_arr[@]} ; do + if $log_blocked_ip || $log_all ; then + $ipt -A INPUT -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -s $_ip -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $_ip -j DROP + fi + done +done + + +# --- +# - Block Interfaces +# --- + +for _if in ${blocked_if_arr[@]} ; do + if $log_blocked_if || $log_all ; then + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + $ipt -A FORWARD -o $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + fi + $ipt -A INPUT -i $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + $ipt -A OUTPUT -o $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + fi + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_if -j DROP + $ipt -A FORWARD -o $_if -j DROP + fi + $ipt -A INPUT -i $_if -j DROP + $ipt -A OUTPUT -o $_if -j DROP +done + +echo_done # Block IPs / Networks / Interfaces.. + + + +# --- +# - Block IPs/Netwoks reading from file 'ban_ipv4.list'" +# --- + +echononl "\tBlock IPs/Netwoks reading from file 'ban_ipv4.list' .." + +if [[ -f "${ipt_conf_dir}/ban_ipv4.list" ]] ; then + + declare -a octets + declare -i index + + while IFS='' read -r _line || [[ -n $_line ]] ; do + + is_valid_ipv4=true + is_valid_mask=true + ipv4="" + mask="" + + # Ignore comment lines + # + [[ $_line =~ ^[[:space:]]{0,}# ]] && continue + + # Ignore blank lines + # + [[ $_line =~ ^[[:space:]]*$ ]] && continue + + # Remove leading whitespace characters + # + _line="${_line#"${_line%%[![:space:]]*}"}" + + + # Catch IPv4 Address + # + given_ipv4="$(echo $_line | cut -d ' ' -f1)" + + + # Splitt Ipv4 address from possible given CIDR number + # + IFS='/' read -ra _addr <<< "$given_ipv4" + _ipv4="${_addr[0]}" + + if [[ -n "${_addr[1]}" ]] ; then + _mask="${_addr[1]}" + test_netmask=false + + # Is 'mask' a valid CIDR number? If not, test agains a valid netmask + # + if $(test -z "${_mask##*[!0-9]*}" > /dev/null 2>&1) ; then + + # Its not a vaild mask number, but naybe a valit netmask. + # + test_netmask=true + else + if [[ $_mask -gt 32 ]]; then + + # Its not a vaild cidr number, but naybe a valit netmask. + # + test_netmask=true + else + + # OK, we have a vaild cidr number between '0' and '32' + # + mask=$_mask + fi + fi + + # Test if given '_mask' is a valid netmask. + # + if $test_netmask ; then + octets=( ${_mask//\./ } ) + + # Complete netmask if necessary + # + while [[ ${#octets[@]} -lt 4 ]]; do + octets+=(0) + done + + [[ ${#octets[@]} -gt 4 ]] && is_valid_mask=false + + index=0 + for octet in ${octets[@]} ; do + if [[ ${octet} =~ ^[0-9]{1,3}$ ]] ; then + if [[ $octet -gt 255 ]] ; then + is_valid_mask=false + fi + if [[ $index -gt 0 ]] ; then + mask="${mask}.${octet}" + else + mask="${octet}" + fi + + else + is_valid_mask=false + fi + + ((index++)) + done + fi + + adjust_mask=false + else + mask=32 + adjust_mask=true + fi + + # Splitt given address into their octets + # + octets=( ${_ipv4//\./ } ) + + # Complete IPv4 address if necessary + # + while [[ ${#octets[@]} -lt 4 ]]; do + octets+=(0) + + # Only adjust CIDR number if not given + # + if $adjust_mask ; then + mask="$(expr $mask - 8)" + fi + done + + # Pre-check if given IPv4 Address seems to be a valid address + # + [[ ${#octets[@]} -gt 4 ]] && is_valid_ipv4=false + + # Check if given IPv4 Address is a valid address + # + if $is_valid_ipv4 ; then + index=0 + for octet in ${octets[@]} ; do + if [[ ${octet} =~ ^[0-9]{1,3}$ ]] ; then + if [[ $octet -gt 255 ]] ; then + is_valid_ipv4=false + fi + if [[ $index -gt 0 ]] ; then + ipv4="${ipv4}.${octet}" + else + ipv4="${octet}" + fi + + else + is_valid_ipv4=false + fi + + ((index++)) + done + fi + + if $is_valid_ipv4 && $is_valid_mask; then + + _ip="${ipv4}/${mask}" + + for _dev in ${ext_if_arr[@]} ; do + if $log_blocked_ip || $log_all ; then + $ipt -A INPUT -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -s $_ip -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $_ip -j DROP + fi + done + + + else + msg="$msg '${given_ipv4}'" + fi + + done < "${ipt_conf_dir}/ban_ipv4.list" + echo_done + + if [[ -n "$msg" ]]; then + warn "Ignored:$msg" + fi +else + echo_skipped +fi + + +# --- +# - Allow Forwarding certain private Addresses +# --- + +echononl "\tAllow forwarding (private) IPs / IP-Ranges.." +if [[ ${#forward_private_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${forward_private_ip_arr[@]}; do + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -d $_ip -j ACCEPT + $ipt -A FORWARD -s $_ip -j ACCEPT + echo_done + else + echo_skipped + fi + done +else + echo_skipped +fi + + +# ------------- +# --- Protections against several attacks / unwanted packages +# ------------- +echo +echononl "\tProtections against several attacks / unwanted packages.." + +if $protect_against_several_attacks ; then + + # --- + # - Protection against syn-flooding + # --- + + $ipt -N syn-flood + $ipt -A syn-flood -m limit --limit 1/second --limit-burst 3 -j RETURN + if $log_syn_flood || $log_all ; then + $ipt -A syn-flood -j LOG --log-prefix "$log_prefix SYN flood: " --log-level $log_level + fi + $ipt -A syn-flood -j DROP + + + # --- + # - Drop Fragments + # --- + + # I have to say that fragments scare me more than anything. + # Sending lots of non-first fragments was what allowed Jolt2 to effectively "drown" + # Firewall-1. Fragments can be overlapped, and the subsequent interpretation of such + # fragments is very OS-dependent (see this paper for details). + # I am not going to trust any fragments. + # Log fragments just to see if we get any, and deny them too + + for _dev in ${ext_if_arr[@]} ; do + if $log_fragments || $log_all ; then + $ipt -A INPUT -i $_dev -f -j LOG --log-prefix "$log_prefix IPTABLES FRAGMENTS: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -f -j LOG --log-prefix "$log_prefix IPTABLES FRAGMENTS: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -f -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -f -j DROP + fi + done + + + # --- + # - drop new packages without syn flag + # --- + + #if $log_new_not_sync || $log_all ; then + # $ipt -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + # $ipt -A OUTPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + # if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + # fi + #fi + #$ipt -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP + #$ipt -A OUTPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP + #if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -p tcp ! --syn -m conntrack --ctstate NEW -j DROP + #fi + + + # --- + # - drop invalid packages + # --- + + #if $log_invalid_state || $log_all ; then + # $ipt -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "$log_prefix Invalid state: " --log-level $log_level + # if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "$log_prefix Invalid state: " --log-level $log_level + # fi + #fi + #$ipt -A INPUT -m conntrack --ctstate INVALID -j DROP + #if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -m conntrack --ctstate INVALID -j DROP + #fi + + + # --- + # - ungewöhnliche Flags verwerfen + # --- + + for _dev in ${ext_if_arr[@]} ; do + if $log_invalid_flags || $log_all ; then + $ipt -A INPUT -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j DROP + fi + done + + + # --- + # - Refuse private addresses on extern interfaces + # --- + + # Refuse packets claiming to be from a + # Class A private network + # Class B private network + # Class C private network + # loopback interface + # Class D multicast address + # Class E reserved IP address + # broadcast address + for _dev in ${dsl_device_arr[@]} ; do + if $log_spoofed || $log_all ; then + $ipt -A INPUT -i $_dev -s $priv_class_a -j LOG --log-prefix "$log_prefix Class A private net: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $priv_class_b -j LOG --log-prefix "$log_prefix Class B private net: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $priv_class_c -j LOG --log-prefix "$log_prefix Class C private net: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $loopback -j LOG --log-prefix "$log_prefix From Loopback: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $class_d_multicast -j LOG --log-prefix "$log_prefix Class D Multicast: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $class_e_reserved -j LOG --log-prefix "$log_prefix Class E reserved: " --log-level $log_level + #$ipt -A INPUT -i $_dev -d $broadcast_addr -j LOG --log-prefix "$log_prefix Broadcast Address: " --log-level $log_level + # + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $priv_class_a -j LOG --log-prefix "$log_prefix Class A private net: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $priv_class_b -j LOG --log-prefix "$log_prefix Class B private net: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $priv_class_c -j LOG --log-prefix "$log_prefix Class C private net: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $loopback -j LOG --log-prefix "$log_prefix From Loopback: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $class_d_multicast -j LOG --log-prefix "$log_prefix Class D Multicast: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $class_e_reserved -j LOG --log-prefix "$log_prefix Class E reserved: " --log-level $log_level + #$ipt -A FORWARD -i $_dev -d $broadcast_addr -j LOG --log-prefix "$log_prefix Broadcast Address: " --log-level $log_level + fi + fi + # Refuse packets claiming to be from a Class A private network. + $ipt -A INPUT -i $_dev -s $priv_class_a -j DROP + # Refuse packets claiming to be from a Class B private network. + $ipt -A INPUT -i $_dev -s $priv_class_b -j DROP + # Retfuse packets claiming to be from a Class C private network. + $ipt -A INPUT -i $_dev -s $priv_class_c -j DROP + # Refuse packets claiming to be from loopback interface. + $ipt -A INPUT -i $_dev -s $loopback -j DROP + # Refuse Class D multicast addresses. Multicast is illegal as a source address. + $ipt -A INPUT -i $_dev -s $class_d_multicast -j DROP + # Refuse Class E reserved IP addresses. + $ipt -A INPUT -i $_dev -s $class_e_reserved -j DROP + # Refuse broadcast address packets. + #$ipt -A INPUT -i $_dev -d $broadcast_addr -j DROP + if $kernel_activate_forwarding ; then + # Refuse packets claiming to be from a Class A private network. + $ipt -A FORWARD -i $_dev -s $priv_class_a -j DROP + # Refuse packets claiming to be from a Class B private network. + $ipt -A FORWARD -i $_dev -s $priv_class_b -j DROP + # Refuse packets claiming to be from a Class C private network. + $ipt -A FORWARD -i $_dev -s $priv_class_c -j DROP + # Refuse packets claiming to be from loopback interface. + $ipt -A FORWARD -i $_dev -s $loopback -j DROP + # Refuse Class D multicast addresses. Multicast is illegal as a source address. + $ipt -A FORWARD -i $_dev -s $class_d_multicast -j DROP + # Refuse Class E reserved IP addresses. + $ipt -A FORWARD -i $_dev -s $class_e_reserved -j DROP + # Refuse broadcast address packets. + #$ipt -A FORWARD -i $_dev -d $broadcast_addr -j DROP + fi + done + + + # --- + # - Refuse packets claiming to be to the loopback interface. + # --- + + # Refusing packets claiming to be to the loopback interface protects against + # source quench, whereby a machine can be told to slow itself down by an icmp source + # quench to the loopback. + for _dev in ${ext_if_arr[@]} ; do + if $log_to_lo || $log_all ; then + $ipt -A INPUT -i $_dev -d $loopback -j LOG --log-prefix "$log_prefix To Loopback: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -d $loopback -j LOG --log-prefix "$log_prefix To Loopback: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -d $loopback -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -d $loopback -j DROP + fi + done + + + # --- + # - Don't allow spoofing from that server + # --- + + for _dev in ${dsl_device_arr[@]} ; do + if $log_spoofed_out || $log_all ; then + $ipt -A OUTPUT -o $_dev -s $priv_class_a -j LOG --log-prefix "$log_prefix out Class A: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -s $priv_class_b -j LOG --log-prefix "$log_prefix out Class B: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -s $priv_class_c -j LOG --log-prefix "$log_prefix out Class C: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -s $loopback -j LOG --log-prefix "$log_prefix out Loopback: " --log-level $log_level + fi + $ipt -A OUTPUT -o $_dev -s $priv_class_a -j DROP + $ipt -A OUTPUT -o $_dev -s $priv_class_b -j DROP + $ipt -A OUTPUT -o $_dev -s $priv_class_c -j DROP + $ipt -A OUTPUT -o $_dev -s $loopback -j DROP + done + + echo_done +else + echo_skipped +fi + + +# ------------- +# --- Log VoIP Traffic (local telephone systems ( ${tel_sys_ip_arr[@]}) +# ------------- + +if $log_voip || $log_all ; then + for _ip in ${tel_sys_ip_arr[@]} ; do + $ipt -A FORWARD -d $_ip -j LOG --log-prefix "$log_prefix [VoIP] " --log-level $log_level + done +fi +#for _PORT in ${VOIP_PORTS} ; do +# $ipt -A FORWARD -p udp --sport $_PORT -j LOG --log-prefix "$log_prefix [VoIP] " --log-level $log_level +#done + + +# ------------- +# ------------- Stopping firewall here if requested (parameter stop) +# ------------- + + +case $1 in + sto*) + echo + if $terminal ; then + echo -e "\t\033[37m\033[1mStop was requested. No more firewall rules..\033[m" + else + echo "Stop was requested. No more firewall rules.." + fi + echo + exit 0;; +esac + + +echo + + +# ------------- +# --- iPerf +# ------------- + +# iPerf is a tool for active measurements of the maximum achievable bandwidth on IP networks. +# It supports tuning of various parameters related to timing, buffers and protocols (TCP, UDP, +# SCTP with IPv4 and IPv6). For each test it reports the bandwidth, loss, and other parameters. + +echononl "\tCreate \"iPerf\" rules.." +if $create_iperf_rules ; then + $ipt -A INPUT -p tcp --dport 5001 -j ACCEPT + $ipt -A INPUT -p tcp --sport 5001 -j ACCEPT + # + $ipt -A OUTPUT -p tcp --dport 5001 -j ACCEPT + $ipt -A OUTPUT -p tcp --sport 5001 -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -p tcp --dport 5001 -j ACCEPT + $ipt -A FORWARD -p tcp --sport 5001 -j ACCEPT + fi + echo_done +else + echo_skipped +fi + + +# --- +# - Drop packets not wanted on gateway +# --- + +echononl "\tDrop packets not wanted on gateway" + +for _dev in ${local_if_arr[@]} ; do + if $log_not_wanted || $log_all ; then + if $not_wanted_ident ; then + $ipt -A INPUT -i $_dev -p tcp --dport $standard_ident_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + fi + for _port in ${not_wanted_on_gw_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + done + for _port in ${not_wanted_on_gw_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + done + fi + if $not_wanted_ident ; then + $ipt -A INPUT -i $_dev -p tcp --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${not_wanted_on_gw_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -j DROP + done + for _port in ${not_wanted_on_gw_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -j DROP + done +done + +echo_done + + +# ------------- +# --- Generally prohibited from WAN +# ------------- + +echononl "\tGenerally prohibited from WAN" + +for _dev in ${ext_if_arr[@]} ; do + if $log_prohibited || $log_all ; then + if $block_ident ; then + $ipt -A INPUT -p tcp -i $_dev --dport $standard_ident_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A INPUT -p tcp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A INPUT -p udp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + if $kernel_activate_forwarding ; then + if $block_ident ; then + $ipt -A FORWARD -p tcp -i $_dev --dport $standard_ident_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + fi + fi + if $block_ident ; then + $ipt -A INPUT -p tcp -i $_dev --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A INPUT -p tcp -i $_dev --dport $_port -j DROP + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A INPUT -p udp -i $_dev --dport $_port -j DROP + done + if $kernel_activate_forwarding ; then + if $block_ident ; then + $ipt -A FORWARD -p tcp -i $_dev --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -i $_dev --dport $_port -j DROP + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -i $_dev --dport $_port -j DROP + done + fi +done + +echo_done +echo + + +# ------------- +# --- Traffic generally allowed +# ------------- + +echononl "\tLoopback device generally allowed.." + +# --- +# - Loopback device +# --- + +$ipt -A INPUT -i lo -j ACCEPT +$ipt -A OUTPUT -o lo -j ACCEPT + +echo_done + + +# --- +# - Allow all Traffic from source mac-address +# --- + +echononl "\tAllow all Traffic from MAC Source-Address" + +if [[ ${#allow_all_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_all_mac_src_address_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -m mac --mac-source $_mac -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Allow local Traffic from source mac-address +# --- + +echononl "\tAllow local Traffic from MAC Source-Address" + + +if [[ ${#allow_local_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_local_mac_src_address_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -m mac --mac-source $_mac -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Allow remote Traffic from source mac-address +# --- + +echononl "\tAllow remote Traffic from MAC Source-Address" + + +if [[ ${#allow_remote_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_remote_mac_src_address_arr[@]} ; do + for _dev in ${ext_if_arr[@]} ; do + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Already established connections +# --- + +echononl "\tAccept already established connections.." + +$ipt -A INPUT -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +$ipt -A OUTPUT -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +if $kernel_activate_forwarding ; then + $ipt -A FORWARD -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +fi + +echo_done + + +# --- +# - Permit all traffic through VPN lines +# --- +echononl "\tPermit all traffic through VPN lines.." +for _vpn_if in ${vpn_if_arr[@]} ; do + $ipt -A INPUT -i $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + for _local_dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_vpn_if -o $_local_dev -m conntrack --ctstate NEW -j ACCEPT + done + fi +done +echo_done + + + +# --- +# - Telefon Systems +# --- + +echononl "\tAllow all Traffic between Telefon Systems" +if [[ ${#tele_sys_ip_arr[@]} -gt 1 ]] && $allow_between_tele_systems && ! $permit_between_local_networks ; then + for _ip_1 in ${tele_sys_ip_arr[@]} ; do + for _ip_2 in ${tele_sys_ip_arr[@]} ; do + #[[ "$_ip_1" = "$_ip_2" ]] && continue + $ipt -A FORWARD -s $_ip_1 -d $_ip_2 -p ALL -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Telefon Systems to remote SIP-Server +# --- + +echononl "\tTelefon System to remote SIP-Server" +if [[ ${#tele_sys_ip_arr[@]} -gt 0 ]] ; then + if [ -z "$tele_sys_remote_sip_server_port" -o -z "$tele_sys_local_sip_server_port" ] ; then + echo_failed + warn "Local or remote SIP Port not given"! + else + for _ip in ${tele_sys_ip_arr[@]} ; do + $ipt -A FORWARD -p udp -s $_ip --sport $tele_sys_local_sip_server_port \ + --dport $tele_sys_remote_sip_server_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + echo_done +else + echo_skipped +fi + + + +# --- +# - All request from local networks to the internet +# --- + +echononl "\tPermit all traffic from local networks to the internet.." +if $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p ALL -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p ALL -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - Networks not firewalled through extern interfaces +# --- + +echononl "\tAllow these local networks any access to the internet" +if [[ ${#any_access_to_inet_network_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding \ + && ! $permit_local_net_to_inet ; then + + for _net in ${any_access_to_inet_network_arr[@]}; do + for _dev in ${ext_if_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p ALL -s $_net -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +echononl "\tAllow these local networks any access from the internet" +if [[ ${#any_access_from_inet_network_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + _found=false + for _net in ${any_access_from_inet_network_arr[@]}; do + for _dev in ${ext_if_arr[@]} ; do + + # - Traffic recieved on natted interfaces will be ommitted! + # - + if containsElement "$_dev" "${nat_device_arr[@]}" ; then + continue + else + _found=true + fi + + $ipt -A FORWARD -i $_dev -p ALL -d $_net -m conntrack --ctstate NEW -j ACCEPT + done + done + if $_found ; then + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + + +# --- +# - Allow local services from given extern networks +# --- + +echononl "\tAllow local services from given extern networks" +if [[ ${#allow_ext_net_to_local_service_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + _found=false + for _val in "${allow_ext_net_to_local_service_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + for _dev in ${ext_if_arr[@]} ; do + + if containsElement "${_val_arr[1]}" "${gateway_ipv4_address_arr[@]}" ; then + $ipt -A INPUT -i $_dev -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + fi + + # - Traffic recieved on natted interfaces will be ommitted! + # - + if containsElement "$_dev" "${nat_device_arr[@]}" ; then + continue + else + _found=true + fi + + $ipt -A FORWARD -i $_dev -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + done + + done + + if $_found ; then + echo_done + else + echo_skipped + fi + +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from extern address/network to local address/network +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow all traffic from extern to local network/address" + +if [[ ${#allow_ext_net_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + _found=false + for _val in ${allow_ext_net_to_local_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + for _dev in ${ext_if_arr[@]} ; do + + # - Traffic recieved on natted interfaces will be ommitted! + # - + if containsElement "$_dev" "${nat_device_arr[@]}" ; then + continue + else + _found=true + fi + + $ipt -A FORWARD -p ALL -i $_dev -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + done + done + + if $_found ; then + echo_done + else + echo_skipped + fi + +else + echo_skipped +fi + + + +# --- +# - Block all extern traffic to (given) local network +# --- + +echononl "\tBlock all extern traffic to (given) local network" +if [[ ${#block_all_ext_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + _found=false + for _net in ${block_all_ext_to_local_net_arr[@]} ; do + for _dev in ${ext_if_arr[@]} ; do + + # - Traffic recieved on natted interfaces will be ommitted! + # - + if containsElement "$_dev" "${nat_device_arr[@]}" ; then + continue + else + _found=true + fi + + $ipt -A FORWARD -p ALL -i $_dev -d $_net -m conntrack --ctstate NEW -j DROP + + done + done + + if $_found ; then + echo_done + else + echo_skipped + fi + +else + echo_skipped +fi + + + +# --- +# - Allow local services from given local networks +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow local services from given local networks" +if [[ ${#allow_local_net_to_local_service_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in "${allow_local_net_to_local_service_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --dport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --sport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from local network to local ip-address +# --- + +echononl "\tAllow all traffic from local network to local ip-address" + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +if [[ ${#allow_local_net_to_local_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_net_to_local_ip_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from local ip-address to local network +# --- + +echononl "\tAllow all traffic from local ip-address to local network" + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +if [[ ${#allow_local_ip_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_ip_to_local_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from (one) local network to (another) local network +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow all traffic from local network to (another) local network" + +if [[ ${#allow_local_net_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_net_to_local_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow local ip address from given local interface +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow local ip address from given local interface" + +if [[ ${#allow_local_if_to_local_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_if_to_local_ip_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -i ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Separate local networks +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tSeparate local networks.." + +if [[ ${#separate_local_network_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _net in ${separate_local_network_arr[@]}; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p all -s $_net -j DROP + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Separate local interfaces +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tSeparate local interfaces.." + +if [[ ${#separate_local_if_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _dev_1 in ${separate_local_if_arr[@]}; do + for _dev_2 in ${local_if_arr[@]} ; do + [[ "$_dev_1" = "$_dev_2" ]] && continue + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p all -j DROP + $ipt -A FORWARD -i $_dev_2 -o $_dev_1 -p all -j DROP + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Permit all traffic between local networks +# --- + +echononl "\tPermit all traffic between local networks.." +if $kernel_activate_forwarding ; then + if $permit_between_local_networks ; then + for _dev_1 in ${local_if_arr[@]} ; do + for _dev_2 in ${local_if_arr[@]} ; do + + # - Notice: + # - In case of routing multiple netwoks on the same interface or + # - using alias interfaces like eth0:0, you need a rule with + # - incomming- and outgoing interface are equal! + # - + # - So DON'T add statement like this: + # - [[ "$_dev_2" = "$_dev_1" ]] && continue + # - + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p ALL -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if [[ "$_dev_2" = "$_dev_1" ]] && $local_alias_interfaces ; then + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --tcp-flag ACK ACK -j ACCEPT + fi + + done + done + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + + +# ------------- +# --- Services +# ------------- + +echo +if $terminal ; then + echo -e "\t\033[37m\033[1mAdd Rules for Services..\033[m" +else + echo "Add Rules for Services.." +fi + + +# --- +# - IPv6 over IPv4 (Tunnel Provider SixXS) +# --- + +echononl "\t\tIPv6 Tunnel SixXS" +if $local_sixxs_service ; then + if [ -n "$tic_server" -a -n "$six_pop_server" ]; then + # TIC (tunnel information & control) packages, from/to tic.sixxs.net + $ipt -A OUTPUT -p tcp -d $tic_server --dport 3874 -m conntrack --ctstate NEW -j ACCEPT + + # heartbeat packets (outgoing only) + $ipt -A OUTPUT -p udp -d $six_pop_server --dport 3740 -m conntrack --ctstate NEW -j ACCEPT + + # 6over4 tunnel packets + $ipt -A OUTPUT -p 41 -d $six_pop_server -j ACCEPT + $ipt -A INPUT -p 41 -d $six_pop_server -j ACCEPT + + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + +# --- +# - DHCP +# --- + +echononl "\t\tLocal DHCP Client" + +if [[ ${#dhcp_client_interfaces_arr[@]} -gt 0 ]] ; then + for _dev in ${dhcp_client_interfaces_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -m udp -d 255.255.255.255 --dport 67 -j ACCEPT + $ipt -A INPUT -i $_dev -p udp -m udp --dport 68 -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +echononl "\t\tDHCP" + +if $local_dhcp_service ; then + # - Allow requests from intern networks + for _dev in ${local_if_arr[@]} ; do + # - in + $ipt -A INPUT -p udp -i $_dev -s 0/0 --sport 68 -d 255.255.255.255 --dport 67 -j ACCEPT + # - out + $ipt -A OUTPUT -p udp -o $_dev --sport 67 -d 0/0 --dport 68 -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - DHCP Failover +# --- + +echononl "\t\tDHCP Failover Server" +if $local_dhcp_service && [[ ${#dhcp_failover_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${dhcp_failover_server_ip_arr[@]} ; do + $ipt -A INPUT -p tcp --dport $dhcp_failover_port -s $_ip -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -p tcp -d $_ip --dport $dhcp_failover_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - DNS out only +# --- + +echononl "\t\tDNS out only" + +# - Nameservers on the INET must be reachable for the local recursiv nameserver +# - but also for all others +# - +for _dev in ${ext_if_arr[@]} ; do + # - out from local and virtual mashine(s) + $ipt -A OUTPUT -o $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -o $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + + # - Only useful (needed) if kernel forwarding is activated (kernel_activate_forwarding=true) + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + # - forward from virtual mashine(s) + $ipt -A FORWARD -o $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + fi +done + +echo_done + + +# --- +# - DNS Service Gateway +# --- + +echononl "\t\tDNS Service Gateway" + +# - Local Nameservice +# - +if $local_dns_service ; then + + # dns requests + # + # Note: + # If the total size of the DNS record is larger than 512 bytes, + # it will be sent over TCP, not UDP. + # + + # - Allow requests from local networks + # - + for _dev in ${local_if_arr[@]} ; do + # - in + $ipt -A INPUT -i $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A INPUT -i $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + + # - Zonetransfere (uses tcp/53) + # + for _ip in ${dns_server_ips[@]} ; do + # - out + # - + # - local master (here) gets request for a zone from slave ($_ip) + $ipt -A INPUT -p tcp -s $_ip --sport $unprivports --dport 53 -m conntrack --ctstate NEW -j ACCEPT + + # - in + # - + # - local slave (here) requests zone from master ($_ip) + $ipt -A OUTPUT -p tcp --sport $unprivports -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - DNS Services at local Network +# --- + +echononl "\t\tDNS Service local Network" + +# - Make nameservers at the local network area rechable for all +# - +if [[ ${#dns_server_ip_arr[@]} -gt 0 ]] ; then + + # dns requests + # + # Note: + # If the total size of the DNS record is larger than 512 bytes, + # it will be sent over TCP, not UDP. + # + + for _ip in ${dns_server_ip_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -p tcp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - SSH out only +# --- + +echononl "\t\tSSH out only" + +if $allow_ssh_request_out && ! $permit_local_net_to_inet ; then + # - Provide SSH to everywhere (also LAN) + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + for _dev in ${local_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Service Gateway +# --- + +echononl "\t\tSSH Service Gateway (also from WAN)" + +if $local_ssh_service ; then + # - Provides SSH in from everywhere + for _port in ${ssh_port_arr[@]} ; do + $ipt -A INPUT -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Services only local Network +# --- + +echononl "\t\tSSH Services only local Network" + +if [[ ${#ssh_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${ssh_server_only_local_ip_arr[@]} ; do + for _port in ${ssh_port_arr[@]} ; do + + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Services DMZ +# --- + +echononl "\t\tSSH Services DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#ssh_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!ssh_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${ssh_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${ssh_port_arr[@]} ; do + + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding ; then + + # - Nat if interface is on a dsl line + # - + if containsElement "${ssh_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${ssh_server_dmz_arr[$_ip]} -p tcp --dport $_port -j DNAT --to $_ip:$_port + fi + $ipt -A FORWARD -i ${ssh_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + fi + + # - From intern + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + for _port in ${ssh_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + + done + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - SSH Service between local Netwotks +# --- + +echononl "\t\tSSH Service between local Netwotks" +if $allow_ssh_between_local_nets ; then + if $kernel_activate_forwarding ; then + for _dev_1 in ${local_if_arr[@]} ; do + + for _port in ${ssh_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev_1 -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + for _dev_2 in ${local_if_arr[@]} ; do + + if ! $permit_between_local_networks ; then + # - Notice: + # - In case of routing multiple netwoks on the same interface or + # - using alias interfaces like eth0:0, you need a rule with + # - incomming- and outgoing interface are equal! + # - + # - So DON'T add statement like this: + # - [[ "$_dev_2" = "$_dev_1" ]] && continue + # - + for _port in ${ssh_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if [[ "$_dev_2" = "$_dev_1" ]] && $local_alias_interfaces ; then + for _port in ${ssh_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --sport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --dport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + done + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - Cisco kompartibles VPN (FRITZ!Box) +# --- + +echononl "\t\tCisco VPN Service (FRITZ\!Box) only out" + +if $allow_cisco_vpn_out && [[ ${#cisco_vpn_out_port_arr[@]} -gt 0 ]]; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${cisco_vpn_out_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + done + + for _vpn_if in ${vpn_if_arr[@]} ; do + $ipt -A OUTPUT -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_vpn_if -p $cisco_vpn_out_protocol -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - VPN Service only out +# --- + +echononl "\t\tVPN Service only out" + +if $allow_vpn_out && [[ ${#vpn_out_port_arr[@]} -gt 0 ]]; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${vpn_out_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + done + + for _vpn_if in ${vpn_if_arr[@]} ; do + $ipt -A OUTPUT -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - VPN Service Gateway +# --- + +echononl "\t\tVPN Service Gateway" + +if $local_vpn_service ; then + + # - Cconnection establishment + # - + for _port in ${vpn_gw_port_arr[@]} ; do + $ipt -A INPUT -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done + +else + echo_skipped +fi + + +# --- +# - VPN Service DMZ +# --- + +echononl "\t\tVPN Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#vpn_server_dmz_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _ip in ${!vpn_server_dmz_arr[@]} ; do + + # - Skip if no interface is given + # - + if [[ -z "${vpn_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${vpn_local_net_port_arr[@]} ; do + $ipt -A FORWARD -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${vpn_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${vpn_server_dmz_arr[$_ip]} -p udp --dport $_port -j DNAT --to $_ip:$_port + fi + done + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - HTTP(S) OUT +# --- + +echononl "\t\tHTTP(S) out only" + +if $allow_http_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp -m multiport --dports $standard_http_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp -m multiport --dports $standard_http_ports -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - HTTP(S) (local) Webserver +# --- + +echononl "\t\tHTTP(S) Services Gateway" +# - Access to the local Webservice +if $local_http_service ; then + $ipt -A INPUT -p tcp -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - HTTP(S) Services only local Network +# --- + +echononl "\t\tHTTP(S) Services only local Network" +# - Access to the Webservices (LAN) +if [[ ${#http_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${http_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $http_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $http_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - HTTP(S) Services DMZ +# --- + +echononl "\t\tHTTP(S) Services DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#http_server_dmz_arr[@]} -gt 0 ]] ; then + http_port_arr=(${http_ports//,/ }) + for _ip in "${!http_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${http_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${http_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + + # - Nat if interface is on a dsl line + # - + if containsElement "${http_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${http_server_dmz_arr[$_ip]} -p tcp --dport $_port -j DNAT --to $_ip:$_port + fi + $ipt -A FORWARD -i ${http_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + fi + done + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $http_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $http_ports --tcp-flag ACK ACK -j ACCEPT + fi + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - HTTPS Services DMZ (only port 443) +# --- + +echononl "\t\tHTTPS Services DMZ (only port $standard_https_port)" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#http_ssl_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!http_ssl_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${http_ssl_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + $ipt -A OUTPUT -p tcp -d $_ip --dport $standard_https_port -m conntrack --ctstate NEW -j ACCEPT + + # - From extern + if $kernel_activate_forwarding ; then + + # - Nat if interface is on a dsl line + # - + if containsElement "${http_ssl_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${http_ssl_server_dmz_arr[$_ip]} -p tcp --syn --dport $standard_https_port -j DNAT --to $_ip:$standard_https_port + fi + $ipt -A FORWARD -i ${http_ssl_server_dmz_arr[$_ip]} -p tcp --dport $standard_https_port -d $_ip -j ACCEPT + fi + + # - From intern + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_https_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $standard_https_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $standard_https_port --tcp-flag ACK ACK -j ACCEPT + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - Mail Service SMTP only out +# --- + +echononl "\t\tMail Services SMTP only out" + +if $allow_smtp_request_out && ! $permit_local_net_to_inet ; then + # - Provide SMTP out for all to WAN + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -p tcp -o $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -p tcp -o $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SMTP (Relay) Service Gateway +# --- + +echononl "\t\tSMTP (Relay) Service Gateway (only on local network)" +if $local_smtp_service ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -p tcp -i $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Mail User Services smtps/pop(s)/imap(s) only out +# --- + +echononl "\t\tMail Services smtps/pop(s)/imap(s) only out" + +if $allow_mail_request_out && ! $permit_local_net_to_inet ; then + # - Provide using Mailservices (WAN) from whole LAN + # - + # - Not needed from local machine. But for testing pupose (i.e. telnet ) + # - + # - + for _dev in ${ext_if_arr[@]} ; do + if $provide_mailservice_from_local ; then + # - Note! + # - this provides access both to LAN and WAN + $ipt -A OUTPUT -p tcp -m multiport --dports $standard_mailuser_ports -m conntrack --ctstate NEW -j ACCEPT + fi + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p tcp -m multiport --dports $standard_mailuser_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail Service SMTP only local Networks +# --- + +echononl "\t\tMail Service SMTP only local Networks" +if [[ ${#mail_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${mail_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $standard_smtp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $standard_smtp_port --tcp-flag ACK ACK -j ACCEPT + fi + + echo_done + done +else + echo_skipped +fi + + +# --- +# - Mail Services smtps/pop(s)/imap(s) only local Networks +# --- + +echononl "\t\tMail Services smtps/pop(s)/imap(s) only local Networks" + +if [[ ${#mail_server_only_local_ip_arr[@]} -gt 0 ]]; then + for _ip in ${mail_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip -m multiport --dports $mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $mail_user_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $mail_user_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail Server DMZ +# --- + +echononl "\t\tMail Server DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#mail_server_dmz_arr[@]} -gt 0 ]] ; then + mail_port_arr=(${mail_user_ports//,/ }) + mail_port_arr+=("$mail_smtp_port") + for _ip in "${!mail_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${mail_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${mail_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${mail_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${mail_server_dmz_arr[$_ip]} -p tcp --dport $_port -m conntrack --ctstate NEW -j DNAT --to $_ip:$_port + fi + $ipt -A FORWARD -i ${mail_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $mail_smtp_port,$mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $mail_smtp_port,$mail_user_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $mail_smtp_port,$mail_user_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - FTP out only +# --- + +echononl "\t\tFTP out only" + +if $allow_ftp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_done +fi + + +# --- +# - FTP Service Gateway +# --- + +echononl "\t\tFTP Service Gateway" + +if $local_ftp_service ; then + $ipt -A INPUT -p tcp --dport $standard_ftp_port --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - FTP Services only local Network +# --- + +echononl "\t\tFTP Service local Networks" +if [[ ${#ftp_server_only_local_ip_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _ip in ${ftp_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + + if ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + fi + + if $local_alias_interfaces ; then + # - Control Port + $ipt -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT + # - Data Port activ + $ipt -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT + # - Data Port passiv + $ipt -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $unprivports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - FTP Services DMZ +# --- + +echononl "\t\tFTP Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#ftp_server_dmz_arr[@]} -gt 0 ]] && [[ -n $ftp_passive_port_range ]]; then + IFS=':' read -a ftp_passive_port_arr <<< "${ftp_passive_port_range}" + for _ip in "${!ftp_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${ftp_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + $ipt -A OUTPUT -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + + # - From extern + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i ${ftp_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${ftp_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${ftp_server_dmz_arr[$_ip]} -p tcp --dport 21 -j DNAT --to $_ip:21 + $ipt -t nat -A PREROUTING -i ${ftp_server_dmz_arr[$_ip]} -p tcp --dport 20 -j DNAT --to $_ip:20 + $ipt -t nat -A PREROUTING -i ${ftp_server_dmz_arr[$_ip]} -p tcp --dport $ftp_passive_port_range -j DNAT --to $_ip:${ftp_passive_port_arr[0]}-${ftp_passive_port_arr[1]} + fi + fi + + # - From intern + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + + # - Control Port + $ipt -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT + # - Data Port activ + $ipt -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT + # - Data Port passiv + $ipt -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $ftp_passive_port_range --tcp-flag ACK ACK -j ACCEPT + + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - TFTF Service out only +# --- + +echononl "\t\tTFTF Service out only" + +if $allow_tftp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $standard_tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + fi + echo_done +else + echo_skipped +fi + + +# --- +# - TFTP Service Gateway +# --- + +echononl "\t\tTFTF Service Gateway" + +if $local_tftp_service ; then + $ipt -A INPUT -p udp --dport $tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + + +# --- +# - Samba Service Gateway (only for local Networks) +# --- + +echononl "\t\tSamba Service Gateway (only for local Networks)" + +if $local_samba_service ; then + for _dev in ${local_if_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service only between local Networks +# --- + +echononl "\t\tSamba Service only local Networks" + +if [[ ${#samba_server_local_ip_arr[@]} -gt 0 ]] ; then + for _dev in ${local_if_arr[@]} ; do + for _ip in ${samba_server_local_ip_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_activate_forwarding && $allow_samba_between_local_nets && ! $permit_between_local_networks ; then + + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service DMZ +# --- + +echononl "\t\tSamba Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#samba_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!samba_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${samba_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + # - From extern + if $kernel_activate_forwarding ; then + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A FORWARD -i ${samba_server_dmz_arr[$_ip]} -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${samba_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + IFS=':' read -a _udp_port_arr <<< ${_port} + if [[ -n "${_udp_port_arr[1]}" ]] ; then + $ipt -t nat -A PREROUTING -i ${samba_server_dmz_arr[$_ip]} -p udp --dport $_port -j DNAT --to $_ip:${_udp_port_arr[0]}-${_udp_port_arr[1]} + else + $ipt -t nat -A PREROUTING -i ${samba_server_dmz_arr[$_ip]} -p udp --dport $_port -j DNAT --to $_ip:$_port + fi + fi + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -i ${samba_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${samba_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${samba_server_dmz_arr[$_ip]} -p tcp --dport $_port -j DNAT --to $_ip:$_port + fi + done + fi + + # - From intern + for _dev in ${local_if_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + done + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - LDAP and LDAP SSL Service Gateway (only for local Networks) +# --- + +echononl "\t\tLDAP(S) Service Gateway (only for local Networks)" + +if $local_ldap_service ; then + for _dev in ${local_if_arr[@]} ; do + for _port in ${ldap_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - LDAP and LDAP SSL Service only between local Networks +# --- + +echononl "\t\tLDAP(S) Service only local Networks" + +if [[ ${#ldap_server_local_ip_arr[@]} -gt 0 ]] ; then + for _dev in ${local_if_arr[@]} ; do + for _ip in ${ldap_server_local_ip_arr[@]} ; do + for _port in ${ldap_udp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_activate_forwarding && $allow_ldap_between_local_nets && ! $permit_between_local_networks ; then + + for _port in ${ldap_udp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - NTP out only +# --- + +echononl "\t\tNTP Service out only" + +if $allow_ntp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - NTP Service Gateway +# --- + +echononl "\t\tNTP Service Gateway" +if $local_ntp_service ; then + if ! $allow_ntp_request_out ; then + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + fi + $ipt -A INPUT -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - Timeserver (Port 37 NOT NTP!)" +# --- + +echononl "\t\tTimeserver (Port 37 NOT NTP!) out only" + +if $allow_timeserver_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_timeserver_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_timeserver_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - PGP Keyserver out only +# --- + +echononl "\t\tPGP Keyserver out only" + +if $allow_pgpserver_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_pgp_keyserver_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_pgp_keyserver_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Telnet +# --- + +echononl "\t\tTelnet (only OUT)" + +if $allow_telnet_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_telnet_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_telnet_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Whois out only +# --- + +echononl "\t\tWhois out only" + +if $allow_whois_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_whois_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_whois_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - CPAN Wait only out +# --- + +# - CPAN::WAIT adds some comands to the CPAN shell() to perform searches on +# - a WAIT server. It connects to a WAIT server using a simple protocoll +# - resembling NNTP as described in RFC977. + +echononl "\t\tCPAN Wait only out" + +if $allow_cpan_wait_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_cpan_wait_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_cpan_wait_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - HBCI only out (only forward) +# --- + +echononl "\t\tHBCI only out (only forward)" + +if $allow_hbci_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_hbci_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Jabber only out +# --- + +echononl "\t\tJabber only out" + +if $allow_jabber_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -o $_dev -p udp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Silc only out +# --- + +echononl "\t\tSilc only out" + +if $allow_silc_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -p tcp -o $_dev --dport $standard_silc_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_silc_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IRC (Internet Relay Chat) only out +# --- + +echononl "\t\tIRC only out" + +if $allow_irc_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -p tcp -o $_dev --dport $standard_irc_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_irc_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - MySQL +# --- + +echononl "\t\tMySQL (only OUT)" + +if $allow_mysql_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_mysql_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_mysql_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - CUPS only between local Networks (IPP Port 631) +# --- + +echononl "\t\tCUPS/IPP (Port 631) only between local Networks" + +if $kernel_activate_forwarding && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ipt -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_cups_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_cups_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_cups_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Druck Port 9100 (RAW) only out between local Networks +# --- + +echononl "\t\tRAW Druck Port 9100 only between local Networks" + +if $kernel_activate_forwarding && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ipt -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_print_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Druck LPD (Port 515) only out between local Networks +# --- + +echononl "\t\tDruck LPD (Port 515) only between local Networks" + +if $kernel_activate_forwarding && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ipt -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_print_raw_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Printer +# --- + +echononl "\t\tKnown Printers (Ports: 515/631/9100) only local Networks" +if [[ ${#printer_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding \ + && ! $permit_between_local_networks \ + && ! $allow_printing_between_local_nets ; then + for _ip in ${printer_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_print_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_ipp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_print_raw_port -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + + $ipt -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_ipp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_ipp_port --tcp-flag ACK ACK -j ACCEPT + + $ipt -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Scanner +# --- + +echononl "\t\tBrother Scanner (Port $brscan_port) only between local Networks" + +if [[ ${#brother_scanner_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding \ + && ! $permit_between_local_networks \ + && $allow_scanning_between_local_nets ; then + for _ip in ${brother_scanner_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + # - UDP + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $brscan_port -m conntrack --ctstate NEW -j ACCEPT + # - TCP + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $brscan_port -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $brscan_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $brscan_port --tcp-flag ACK ACK -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Other local Services +# --- + +echononl "\t\tOther local Services" + +if [[ ${#other_service_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in ${other_service_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p ${_val_arr[2]} -d ${_val_arr[0]} --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces && [[ "${_val_arr[2]}" = "tcp" ]] ; then + $ipt -A FORWARD -i $_dev -p tcp -d ${_val_arr[0]} --dport ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s ${_val_arr[0]} --sport ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + done + echo_ok +else + echo_skipped +fi + + +# --- +# - Rsync only Out Gateway +# --- + +echononl "\t\tRsync (only OUT) Gateway" + +if $local_rsync_out ; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${rsync_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Rsync only Out from given local machines +# --- + +echononl "\t\tRsync Out from given local machines" + +if [[ ${#rsync_out_ip_arr[@]} -gt 0 ]] && $kernel_activate_forwarding && ! $permit_local_net_to_inet; then + for _port in ${rsync_port_arr[@]} ; do + for _ip in ${rsync_out_ip_arr[@]} ; do + $ipt -A FORWARD -p tcp -s $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - SNMP Services local Networks +# --- + +echononl "\t\tSNMP Services local Networks" + +if [[ ${#snmp_server_ip_arr[@]} -gt 0 ]] && ! $permit_between_local_networks; then + for _ip in ${snmp_server_ip_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport $snmp_trap_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -s $_ip --dport $snmp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $snmp_trap_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - WakeOnLan only out into local Networks +# --- + +echononl "\t\tWakeOnLan only out into local Networks" +$ipt -A OUTPUT -p udp --dport 9 -j ACCEPT +echo_done + + +# --- +# - NFS Service (portmapper, mountd, nfs) +# --- + +if $terminal; then + echononl "\t\tNFS Service\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tVoIP\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tSip\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tSkype\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" +else + echo "NFS Service - Not yet implemented" + echo "VoIP - Not yet implemented" + echo "Sip - Not yet implemented" + echo "Skype - Not yet implemented" +fi + + +# --- +# - PowerChute Network Shutdown local Network +# --- + +echononl "\t\tPowerChute Network Shutdown local Network" + +if [[ ${#pcns_server_ip_arr[@]} -gt 0 ]] && [[ -n "$usv_ip" ]] ; then + + for _ip in ${pcns_server_ip_arr[@]} ; do + if containsElement "$_ip" "${gateway_ipv4_address_arr[@]}" ; then + $ipt -A INPUT -p tcp -s $usv_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A INPUT -p udp -s $usv_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A INPUT -p tcp --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT + fi + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -s $usv_ip -d $_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -p udp -s $usv_ip -d $_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT + fi + + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_tcp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $pcns_tcp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_web_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $pcns_web_port --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - Ubiquiti Unifi Controler (Accesspoints) Gateway +# --- + + +echononl "\t\tUbiquiti Unifi Controler (Accesspoints) Gateway" +if $local_unifi_controller_service ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -p udp -i $_dev -m multiport --dports $unify_broadcast_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + $ipt -A INPUT -p tcp -i $_dev -m multiport --dports $unify_tcp_ports -m conntrack --ctstate NEW -j ACCEPT + $ipt -A INPUT -p udp -i $_dev -m multiport --dports $unify_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Ubiquiti Unifi Controler (Accesspoints) local Network +# --- + +echononl "\t\tUbiquiti Unifi Controler (Accesspoints) local Network" +if [[ ${#unify_controller_local_net_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding \ + && ! $permit_between_local_networks ; then + + for _ip_ctl in ${unify_controller_local_net_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip_ctl -m multiport --dports $unify_broadcast_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + $ipt -A FORWARD -i $_dev -p tcp -d $_ip_ctl -m multiport --dports $unify_tcp_ports -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p udp -d $_ip_ctl -m multiport --dports $unify_udp_ports -m conntrack --ctstate NEW -j ACCEPT + done + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip_ctl -m multiport --dports $unify_tcp_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip_ctl -m multiport --sports $unify_tcp_ports --tcp-flag ACK ACK -j ACCEPT + fi + + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IPMI Tools (e.g. IPMIView) only out +# --- + +echononl "\t\tIPMI Tools (e.g. IPMIView) only out" + +if $allow_ipmi_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding ; then + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IPMI Tools (e.g. IPMIView) local Networks +# --- + +echononl "\t\tIPMI Tools (e.g. IPMIView) local Networks" + +if [[ ${#ipmi_server_ip_arr[@]} -gt 0 ]]; then + for _ip in ${ipmi_server_ip_arr[@]} ; do + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -s $_ip --sport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) only out +# --- + +echononl "\t\tRemote Console (VNC) only out" + +if $allow_remote_console_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_remote_console_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) local Networks +# --- + +echononl "\t\tRemote Console (VNC) local Networks" + + +if [[ ${#rm_server_ip_arr[@]} -gt 0 ]]; then + for _ip in ${rm_server_ip_arr[@]} ; do + + $ipt -A OUTPUT -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) DMZ +# --- + +echononl "\t\tRemote Console (VNC) DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#rm_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in ${!rm_server_dmz_arr[@]} ; do + + # - Skip if no interface is given + # - + if [[ -z "${rm_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + # - From Gateway + $ipt -A OUTPUT -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding ; then + + # - From extern + + # - Nat if interface is on a dsl line + # - + if containsElement "${rm_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${rm_server_dmz_arr[$_ip]} -p tcp --syn --dport $remote_console_port -j DNAT --to $_ip:$remote_console_port + fi + $ipt -A FORWARD -i ${rm_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + # - From intern + if ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - Munin Service Gateway +# --- + +echononl "\t\tMunin Service Gateway" + +if $local_munin_server ; then + + if $provide_munin_service_to_inet ; then + # - Provide Service for local and extern networks + # - + $ipt -A OUTPUT -p tcp --dport $munin_remote_port -m conntrack --ctstate NEW -j ACCEPT + else + # - Provide Service only for for local network + # - + for _dev in ${local_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $munin_remote_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - Munin Service local Networks +# --- + +echononl "\t\tMunin Service local Networks" +if [[ ${#munin_local_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${munin_local_server_ip_arr[@]} ; do + $ipt -A INPUT -s $_ip -p tcp --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + if ! $permit_between_local_networks ; then + $ipt -A FORWARD -i $_dev -s $_ip -p tcp --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --sport $munin_local_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --dport $munin_local_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Munin remote Server +# --- + +echononl "\t\tMunin remote Server" + +if [[ -n $munin_remote_server ]] && [[ ${#munin_local_client_ip_arr[@]} -gt 0 ]]; then + + for _ip in ${!munin_local_client_ip_arr[@]} ; do + if containsElement "$_ip" "${gateway_ipv4_address_arr[@]}" ; then + $ipt -A INPUT -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + elif $kernel_activate_forwarding ; then + $ipt -t nat -A PREROUTING -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server --dport $munin_local_port -j DNAT --to $_ip:$munin_local_port + $ipt -A FORWARD -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server -d $_ip --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - XyMon local service +# --- + +echononl "\t\tXyMon Service Gateway" + +if $local_xymon_server ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - XyMon Service Intranet +# --- + +echononl "\t\tXyMon Service Intranet" + +if [[ ${#xymon_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${xymon_server_ip_arr[@]} ; do + if $local_xymon_client ; then + $ipt -A OUTPUT -p tcp -d $_ip --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + fi + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $xymon_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $xymon_port --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- Portforwarding +# ------------- + +# --- +# - Portforwarding TCP +# --- + +echo +echononl "\tPortforwarding TCP" + +if [[ ${#portforward_tcp_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${portforward_tcp_arr[@]}" ; do + + # - Split value + # - + IFS=':' read -a _val_arr <<< "${_val}" + + # - DNAT + # - + $ipt -t nat -A PREROUTING -i ${_val_arr[0]} -p tcp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to ${_val_arr[2]}:${_val_arr[3]} + + # - Allow Packets + # - + $ipt -t filter -A FORWARD -i ${_val_arr[0]} -p tcp -d ${_val_arr[2]} --dport ${_val_arr[3]} -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Portforwarding UDP +# --- + +echononl "\tPortforwarding UDP" + +if [[ ${#portforward_udp_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${portforward_udp_arr[@]}" ; do + + # - Split value + # - + IFS=':' read -a _val_arr <<< "${_val}" + + # - DNAT + # - + $ipt -t nat -A PREROUTING -i ${_val_arr[0]} -p udp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to ${_val_arr[2]}:${_val_arr[3]} + + # - Allow Packets + # - + $ipt -t filter -A FORWARD -i ${_val_arr[0]} -p udp -d ${_val_arr[2]} --dport ${_val_arr[3]} -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - UNIX Traceroute +# --- + +echo +echononl "\tUNIX Traceroute" + +# versendet udp packete im gegensatz zu tracert von windows +# der icmp-echo-request pakete versendet +# einige implementierungen von traceroute (linux) erm�lichens +# die option -I und versenden dann ebenfalls icmp-echo-request pakete + +for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + $ipt -A INPUT -i $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + $ipt -A FORWARD -i $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + fi +done + +echo_done + + +# ------------- +# --- ICMP Traffic (i.e. ping requests) +# ------------- + +echononl "\tPermit all ICMP traffic.." +if $permit_all_icmp_traffic ; then + $ipt -A INPUT -p icmp -j ACCEPT + $ipt -A OUTPUT -p icmp -j ACCEPT + $ipt -A FORWARD -p icmp -j ACCEPT + echo_done +else + echo_skipped +fi + + + +# --- +# - Deny between local networks +# --- + +echo +echononl "\tDeny all traffic between local networks.." +if $kernel_activate_forwarding ; then + if ! $permit_between_local_networks ; then + for _dev_1 in ${local_if_arr[@]} ; do + for _dev_2 in ${local_if_arr[@]} ; do + if $log_rejected || $log_all ; then + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -j LOG --log-prefix "$log_prefix Rejected local NET: " --log-level $log_level + fi + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p ALL -m conntrack --ctstate NEW -j DROP + done + done + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + +# ------------- +# --- Log traffic not matched so far +# ------------- +echo + +echononl "\tLog traffic not matched so far.." +if $log_rejected || $log_all ; then + $ipt -A OUTPUT -j LOG --log-prefix "$log_prefix OUT Rejected: " --log-level $log_level + $ipt -A INPUT -j LOG --log-prefix "$log_prefix IN Rejected: " --log-level $log_level + $ipt -A FORWARD -j LOG --log-prefix "$log_prefix FORWARD Rejected: " --log-level $log_level + #$ipt -A OUTPUT -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix OUT Rejected: " --log-level $log_level + #$ipt -A INPUT -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix IN Rejected: " --log-level $log_level + #$ipt -A FORWARD -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix FORWARD Rejected: " --log-level $log_level + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- DROP traffic not matched so far +# ------------- +echononl "\tDROP traffic not matched so far.." + +# - drop all other for all interfaces.. +# +$ipt -A INPUT -j DROP +$ipt -A OUTPUT -j DROP +$ipt -A FORWARD -j DROP +# +# ---------- Ende: DROP ---------- + +echo_done + + +# --- +# - Warning, if no intern (local) interface is configured +# --- + +if [[ ${#local_if_arr[@]} -lt 1 ]] ; then + echo "" + echo "" + if $terminal ; then + echo -e "\t\033[33m\033[1m----------\033[m" + else + echo "----------" + fi + warn "No local Interface is configured!" + if $terminal ; then + echo -e "\t\033[33m\033[1m----------\033[m" + else + echo "----------" + fi +fi + +echo +exit 0 + diff --git a/NONE-CKUBU2/sbin/ipt-firewall-gateway.ALT b/NONE-CKUBU2/sbin/ipt-firewall-gateway.ALT new file mode 100755 index 0000000..429d815 --- /dev/null +++ b/NONE-CKUBU2/sbin/ipt-firewall-gateway.ALT @@ -0,0 +1,3713 @@ +#!/usr/bin/env bash + +### BEGIN INIT INFO +# Provides: ipt-firewall +# Required-Start: $local_fs $remote_fs $syslog $network $time +# Required-Stop: $local_fs $remote_fs $syslog $network +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: IPv4 Firewall +### END INIT INFO + + +# ------------- +# - Settings +# ------------- + +ipt_conf_dir="/etc/ipt-firewall" + +inc_functions_file="${ipt_conf_dir}/include_functions.conf" + +load_modules_file=${ipt_conf_dir}/load_modules_ipv4.conf + +conf_logging=${ipt_conf_dir}/logging_ipv4.conf +conf_interfaces=${ipt_conf_dir}/interfaces_ipv4.conf +conf_default_ports=${ipt_conf_dir}/default_ports.conf +conf_main=${ipt_conf_dir}/main_ipv4.conf +conf_post_declarations=${ipt_conf_dir}/post_decalrations.conf + +# ------------- +# - Some checks and preloads.. +# ------------- + +ipt=$(which iptables) + +if [[ -z "$ipt" ]] ; then + echo "" + echo -e "\tiptables was not found on this server!" + echo + echo -e "\tFirewall Script was stopped!" + echo + exit 1 +fi + +if [[ ! -f "$inc_functions_file" ]] ; then + echo "" + echo -e "\tMissing include file '$inc_functions_file'" + echo + echo -e "\tFirewall Script was stopped!" + echo + exit 1 +else + source $inc_functions_file +fi + +if [[ ! -f "$load_modules_file" ]]; then + warn "No modules for loading configured. Missing file '$load_modules_file'!" +else + + while read -r module ; do + if ! lsmod | grep -q -E "^$module\s+" ; then + /sbin/modprobe $module > /dev/null 2>&1 + if [[ "$?" != "0" ]]; then + warn "Loading module '$module' failed!" + fi + fi + done < <(sed -ne 's/^[[:space:]]*\([^#].*\)[[:space:]]*/\1/p' $load_modules_file) + +fi + +if [[ ! -f "$conf_logging" ]]; then + fatal "Missing configuration for logging - file '$conf_logging'" +else + source $conf_logging +fi + +if [[ ! -f "$conf_default_ports" ]]; then + fatal "Missing configuration for default_ports - file '$conf_default_ports'" +else + source $conf_default_ports +fi + +if [[ ! -f "$conf_interfaces" ]]; then + fatal "Missing interface configurations - file '$conf_interfaces'" +else + source $conf_interfaces +fi + +if [[ ! -f "$conf_main" ]]; then + fatal "Missing main configurations - file '$conf_main'" +else + source $conf_main +fi + +if [[ ! -f "$conf_post_declarations" ]]; then + fatal "Missing post declarations - file '$conf_post_declarations'" +else + source $conf_post_declarations +fi + + +echo +if $terminal ; then + echo -e "\033[37m\033[1m\tStarting firewall iptables (IpV4)..\033[m" +else + echo "Starting firewall iptables (IpV4).." +fi +echo + + +# ------------- +# --- Activate IP Forwarding +# ------------- + +## - IP Forwarding aktivieren/deaktivieren. +## - +## - Dieses benötigen wir lediglich bei einem Rechner in mehreren Netzen. +## - Es ist anzuraten, diese Einstellung vor allen anderen vorzunehmen, +## - weil hiermit auch andere (de)aktiviert werden. +## - +if $kernel_activate_forwarding ; then + echo 1 > /proc/sys/net/ipv4/ip_forward + echononl "\tActivate Forwarding.." + echo_done +else + echo 0 > /proc/sys/net/ipv4/ip_forward + echononl "\t\033[33m\033[1mDisable Forwarding.." + echo_done +fi + +if $kernel_support_dynaddr ; then + echononl "\tActivate kernel support for dynamic addresses.." + if [[ -n $dynaddr_flag ]] && [[ $dynaddr_flag =~ ^-?[0-9]+$ ]]; then + echo $dynaddr_flag > /proc/sys/net/ipv4/ip_dynaddr + echo_done + else + echo_failed + fi +else + echo 0 > /proc/sys/net/ipv4/ip_dynaddr + echononl "\t\033[33m\033[1mDisable Forwarding..\033[m" + echo_done +fi + +# ------------- +# --- Adjust Kernel Parameters (Security/Tuning) +# ------------- + +echononl "\tAdjust Kernel Parameters (Security/Tuning).." + +if $adjust_kernel_parameters ; then + ## - Reduce DoS'ing ability by reducing timeouts + ## - + if $kernel_reduce_timeouts ; then + echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout + echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time + echo 1 > /proc/sys/net/ipv4/tcp_window_scaling + echo 0 > /proc/sys/net/ipv4/tcp_sack + fi + + ## - SYN COOKIES + ## - + if $kernel_tcp_syncookies ; then + echo 1 > /proc/sys/net/ipv4/tcp_syncookies + echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog + echo 3 > /proc/sys/net/ipv4/tcp_synack_retries + fi + + ## - Protection against ICMP bogus error responses + ## - + if $kernel_protect_against_icmp_bogus_messages ; then + echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses + fi + + ## - Ignore Broadcast Pings + ## - + if $kernel_ignore_broadcast_ping ; then + echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts + fi + + ## - Deactivate Source Routed Packets + ## - + if $kernel_deactivate_source_route ; then + for asr in /proc/sys/net/ipv4/conf/*/accept_source_route ; do + echo 0 > $asr + done + fi + + ## - Deactivate sending ICMP redirects + ## - + if ! $telekom_internet_tv ; then + if $kernel_dont_accept_redirects ; then + for rp_filter in /proc/sys/net/ipv4/conf/*/rp_filter ; do + echo 1 > $rp_filter + done + else + for rp_filter in /proc/sys/net/ipv4/conf/*/rp_filter ; do + echo 0 > $rp_filter + done + fi + fi + + ## - Logging of spoofed (source routed" and "redirect") packets + ## - + if $kernel_log_martians ; then + echo "0" > /proc/sys/net/ipv4/conf/all/log_martians + fi + + echo_done # Adjust Kernel Parameters (Security/Tuning) +else + echo_skipped +fi + + +# ------------- +# --- Set default policies / Flush Rules +# ------------- + +echo +echononl "\tFlushing firewall iptable (IPv4).." + +# - default policies +# - +$ipt -P INPUT ACCEPT +$ipt -P OUTPUT ACCEPT +$ipt -P FORWARD ACCEPT + +## - flush chains +## - +$ipt -F +$ipt -F INPUT +$ipt -F OUTPUT +$ipt -F FORWARD +$ipt -F -t mangle +$ipt -F -t nat +$ipt -F -t raw +$ipt -X +$ipt -Z + +$ipt -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu + +unset natted_interface_arr +declare -a natted_interface_arr + +for _dev in ${nat_device_arr[@]} ; do + $ipt -t nat -A POSTROUTING -o $_dev -j MASQUERADE + natted_interface_arr+=("$_dev") +done + +if [[ ${#nat_network_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${nat_network_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + + # - Prevent natting on an interface already natted + # - + if containsElement "${_val_arr[1]}" "${nat_device_arr[@]}" ; then + continue + fi + + $ipt -t nat -A POSTROUTING -o ${_val_arr[1]} -d ${_val_arr[0]} -j MASQUERADE + done +fi + +if $telekom_internet_tv ; then + $ipt -t nat -A POSTROUTING -o $tv_extern_if -j MASQUERADE +fi + +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr +if [[ ${#masquerade_tcp_con_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${masquerade_tcp_con_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + + + # - Skip if no interface is given + # - + if [[ -z "${_val_arr[3]}" ]] ; then + no_if_for_ip_arr+=("${_val_arr[1]}") + continue + fi + $ipt -t nat -A POSTROUTING -o ${_val_arr[3]} -p tcp -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -j MASQUERADE + done +fi + +#echo_done # Flushing firewall iptable (IPv4).. +if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "Masquerading for ip '$_ip' was omitted - No idestination interface present!" + done +else + echo_done +fi +echo + + +# ------------- +# - Log given IP Addresses +# ------------- + +echononl "\tLog given IP Addresses" +if [[ ${#log_ip_arr[@]} -gt 0 ]]; then + for _ip in ${log_ip_arr[@]} ; do + $ipt -A INPUT -s $_ip -j LOG --log-prefix "IPv4: $_ip IN: " --log-level $log_level + $ipt -A OUTPUT -d $_ip -j LOG --log-prefix "IPv4: $_ip OUT: " --log-level $log_level + $ipt -A FORWARD -s $_ip -j LOG --log-prefix "IPv4: $_ip FORWARD FROM: " --log-level $log_level + $ipt -A FORWARD -d $_ip -j LOG --log-prefix "IPv4: $_ip FORWARD TO: " --log-level $log_level + done + + echo_done +else + echo_skipped +fi + + +# ------------- +# --- Stopping firewall if only flushing was requested (parameter flush) +# ------------- + +case $1 in + flush) + warn No firewall rules are active! + exit 0;; +esac + + +# --- +# - Stop here, if no extern interface is configured +# --- + +if [[ ${#ext_if_arr[@]} -lt 1 ]] ; then + fatal "No extern Interface is configured!" +fi + + + +# ------------- +# --- Traffic Shaping +# ------------- + +echo "" +if $terminal ; then + echononl "\033[37m\033[1m\tStarting outbound shaping...\033[m" +else + echo -n "Starting outbound shaping" +fi + +if $TRAFFIC_SHAPING && [[ -n "$TC_DEV" ]] ; then + + tc=$(which tc) + + if [[ -z "$tc" ]]; then + echo_skipped + warn "'tc'-programm not found. Outbound shaping was ommitted!" + else + + ## - Löschen aller Klassen für $TC_DEV und der Filterregeln + ## - + $tc qdisc del dev $TC_DEV root 2> /dev/null > /dev/null + $ipt -t mangle -D POSTROUTING -o $TC_DEV -j MYSHAPER-OUT 2> /dev/null > /dev/null + $ipt -t mangle -F MYSHAPER-OUT + $ipt -t mangle -X MYSHAPER-OUT + + + # add HTB root qdisc + $tc qdisc add dev $TC_DEV root handle 1:0 htb default 26 + + # add main rate limit class(es) + $tc class add dev $TC_DEV parent 1: classid 1:1 htb rate ${LIMIT_UP}kbit + + # create fair-share-classes, descending priority + $tc class add dev $TC_DEV parent 1:1 classid 1:20 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 0 + $tc class add dev $TC_DEV parent 1:1 classid 1:21 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 1 + $tc class add dev $TC_DEV parent 1:1 classid 1:22 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 2 + $tc class add dev $TC_DEV parent 1:1 classid 1:23 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 3 + $tc class add dev $TC_DEV parent 1:1 classid 1:24 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 4 + $tc class add dev $TC_DEV parent 1:1 classid 1:25 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 5 + $tc class add dev $TC_DEV parent 1:1 classid 1:26 htb rate ${LIMIT_CLASS}kbit ceil ${LIMIT_UP}kbit prio 6 + + + # attach qdisc to leaf classes + # + # here we at SFQ to each priority class. SFQ insures that + # within each class connections will be treated (almost) fairly. + $tc qdisc add dev $TC_DEV parent 1:20 handle 20: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:21 handle 21: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:22 handle 22: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:23 handle 23: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:24 handle 24: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:25 handle 25: sfq perturb 10 + $tc qdisc add dev $TC_DEV parent 1:26 handle 26: sfq perturb 10 + + + # filter traffic into classes by fwmark + # + # here we direct traffic into priority class according to + # the fwmark set on the packet (we set fwmark with iptables + # later). Note that above we've set the default priority + # class to 1:26 so unmarked packets (or packets marked with + # unfamiliar IDs) will be defaulted to the lowest priority + # class. + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25 + $tc filter add dev $TC_DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26 + + + # add MYSHAPER-OUT chain to the mangle table in iptables + # + # this sets up the table we'll use + # to filter and mark packets. + $ipt -t mangle -N MYSHAPER-OUT + $ipt -t mangle -I POSTROUTING -o $TC_DEV -j MYSHAPER-OUT + + + # add fwmark entries to classify different types of traffic + # + # Set fwmark from 20-26 according to + # desired class. 20 is highest prio. + + # mark 20 - high prio 0 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 20 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 20 + $ipt -t mangle -A MYSHAPER-OUT -p icmp -j RETURN + + # mark 21 - high prio 1 + # - DNS Service + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j MARK --set-mark 21 + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j RETURN + + # mark 22 - high prio 2 + # - VoIP SIP (sip ports, rtp ports, stun ports(3478)) + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${RTP_PORTS_START}:${RTP_PORTS_END} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${RTP_PORTS_START}:${RTP_PORTS_END} -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport ${SIP_PORT_REMOTE} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp --dport ${SIP_PORT_REMOTE} -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${SIP_PORT_LOCAL} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp --sport ${SIP_PORT_LOCAL} -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p udp -m multiport --dport ${STUN_PORTS} -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p udp -m multiport --dport ${STUN_PORTS} -j RETURN + + # mark 23 - prio 3 + # - OpenVPN + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sport 1094,1095 -j MARK --set-mark 23 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sport 1094,1095 -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p tcp --dport 22 -j MARK --set-mark 23 + $ipt -t mangle -A MYSHAPER-OUT -p tcp --dport 22 -j RETURN + $ipt -t mangle -A MYSHAPER-OUT -p tcp --sport 22 -j MARK --set-mark 23 + $ipt -t mangle -A MYSHAPER-OUT -p tcp --sport 22 -j RETURN + + # mark 24 - prio 4 + # - WWW + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 80,443 -j MARK --set-mark 24 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 80,443 -j RETURN + + + # mark 25 - prio 5 + # - Mailtraffic + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 587,110,995,143,993 -j MARK --set-mark 25 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dport 587,110,995,143,993 -j RETURN + + + # Remaining packets are marked according to TOS + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Delay -m mark --mark 0 -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0 -j MARK --set-mark 22 + $ipt -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Cost -m mark --mark 0 -j MARK --set-mark 25 + # redundant- mark any unmarked packets as 26 (low prio) + $ipt -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 26 + + echo_done + fi +else + echo_skipped +fi + + + +# --- +# - Provide (Telekom) IP TV +# --- + +echo +echononl "\tProvide (Telekom) Internet TV" + +if $telekom_internet_tv && [[ -n "$tv_local_if" ]] ; then + + # - Telekom VDSL - Rules for IPTV + # - + $ipt -A INPUT -i $tv_local_if -p igmp -s $tv_ip -j ACCEPT + #$ipt -A INPUT -i $tv_local_if -p igmp -j DROP + + $ipt -A FORWARD -s $tv_ip -j ACCEPT + $ipt -A FORWARD -d $tv_ip -j ACCEPT + + $ipt -A FORWARD -i $tv_ip -j ACCEPT + $ipt -A FORWARD -o $tv_ip -j ACCEPT + + + # - Forward all networks defined defind by igmpproxy + # - (see: phyint eth2.8 upstream ratelimit 0 threshold 1) + # + #$ipt -A FORWARD -s 217.0.119.0/24 -d 224.0.0.0/4 -j ACCEPT + #$ipt -A FORWARD -s 193.158.35.0/24 -d 224.0.0.0/4 -j ACCEPT + #$ipt -A FORWARD -s 239.35.100.6/24 -d 224.0.0.0/4 -j ACCEPT + #$ipt -A FORWARD -s 93.230.64.0/19 -d 224.0.0.0/4 -j ACCEPT + $ipt -A FORWARD -d 224.0.0.0/4 -j ACCEPT + $ipt -A FORWARD -s 224.0.0.0/4 -j ACCEPT + + $ipt -A OUTPUT -d 224.0.0.0/4 -j ACCEPT + $ipt -A INPUT -d 224.0.0.0/4 -j ACCEPT + + $ipt -A INPUT -i $tv_extern_if -d 224.0.0.0/4 -j ACCEPT + $ipt -A INPUT -i $tv_local_if -d 224.0.0.0/4 -j ACCEPT + $ipt -A OUTPUT -o $tv_extern_if -d 224.0.0.0/4 -j ACCEPT + $ipt -A OUTPUT -o $tv_local_if -d 224.0.0.0/4 -j ACCEPT + + #$ipt -A FORWARD -d 224.0.0.0/4 -j ACCEPT + $ipt -A FORWARD -i $tv_local_if -o $tv_extern_if -j ACCEPT + $ipt -A FORWARD -i $tv_extern_if -d 224.0.0.0/4 -j ACCEPT + + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- Pass through Devices Interfaces (not firewalled) +# ------------- + +if [[ ${#unprotected_if_arr[@]} -gt 0 ]]; then + echononl "\tPass through Devices (not firewalled)" + for _dev in ${unprotected_if_arr[@]} ; do + if $log_unprotected || $log_all ; then + $ipt -A INPUT -i $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + $ipt -A FORWARD -o $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -j ACCEPT + $ipt -A OUTPUT -o $_dev -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -j ACCEPT + $ipt -A FORWARD -o $_dev -j ACCEPT + fi + done + echo_done +fi + + + +# ------------- +# --- Block IPs / Networks / Interfaces +# ------------- +echononl "\tBlock IPs / Networks / Interfaces.." + + +# --- +# - Block IPs +# --- + +for _ip in $blocked_ips ; do + for _dev in ${ext_if_arr[@]} ; do + if $log_blocked_ip || $log_all ; then + $ipt -A INPUT -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -s $_ip -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $_ip -j DROP + fi + done +done + + +# --- +# - Block Interfaces +# --- + +for _if in ${blocked_if_arr[@]} ; do + if $log_blocked_if || $log_all ; then + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + $ipt -A FORWARD -o $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + fi + $ipt -A INPUT -i $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + $ipt -A OUTPUT -o $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + fi + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_if -j DROP + $ipt -A FORWARD -o $_if -j DROP + fi + $ipt -A INPUT -i $_if -j DROP + $ipt -A OUTPUT -o $_if -j DROP +done + +echo_done # Block IPs / Networks / Interfaces.. + + +# --- +# - Allow Forwarding certain private Addresses +# --- + +echononl "\tAllow forwarding (private) IPs / IP-Ranges.." +if [[ ${#forward_private_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${forward_private_ip_arr[@]}; do + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -d $_ip -j ACCEPT + $ipt -A FORWARD -s $_ip -j ACCEPT + echo_done + else + echo_skipped + fi + done +else + echo_skipped +fi + + +# ------------- +# --- Protections against several attacks / unwanted packages +# ------------- +echo +echononl "\tProtections against several attacks / unwanted packages.." + +if $protect_against_several_attacks ; then + + # --- + # - Protection against syn-flooding + # --- + + $ipt -N syn-flood + $ipt -A syn-flood -m limit --limit 1/second --limit-burst 3 -j RETURN + if $log_syn_flood || $log_all ; then + $ipt -A syn-flood -j LOG --log-prefix "$log_prefix SYN flood: " --log-level $log_level + fi + $ipt -A syn-flood -j DROP + + + # --- + # - Drop Fragments + # --- + + # I have to say that fragments scare me more than anything. + # Sending lots of non-first fragments was what allowed Jolt2 to effectively "drown" + # Firewall-1. Fragments can be overlapped, and the subsequent interpretation of such + # fragments is very OS-dependent (see this paper for details). + # I am not going to trust any fragments. + # Log fragments just to see if we get any, and deny them too + + for _dev in ${ext_if_arr[@]} ; do + if $log_fragments || $log_all ; then + $ipt -A INPUT -i $_dev -f -j LOG --log-prefix "$log_prefix IPTABLES FRAGMENTS: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -f -j LOG --log-prefix "$log_prefix IPTABLES FRAGMENTS: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -f -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -f -j DROP + fi + done + + + # --- + # - drop new packages without syn flag + # --- + + #if $log_new_not_sync || $log_all ; then + # $ipt -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + # $ipt -A OUTPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + # if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + # fi + #fi + #$ipt -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP + #$ipt -A OUTPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP + #if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -p tcp ! --syn -m conntrack --ctstate NEW -j DROP + #fi + + + # --- + # - drop invalid packages + # --- + + #if $log_invalid_state || $log_all ; then + # $ipt -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "$log_prefix Invalid state: " --log-level $log_level + # if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "$log_prefix Invalid state: " --log-level $log_level + # fi + #fi + #$ipt -A INPUT -m conntrack --ctstate INVALID -j DROP + #if $kernel_activate_forwarding ; then + # $ipt -A FORWARD -m conntrack --ctstate INVALID -j DROP + #fi + + + # --- + # - ungewöhnliche Flags verwerfen + # --- + + for _dev in ${ext_if_arr[@]} ; do + if $log_invalid_flags || $log_all ; then + $ipt -A INPUT -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP + $ipt -A INPUT -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP + $ipt -A FORWARD -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j DROP + fi + done + + + # --- + # - Refuse private addresses on extern interfaces + # --- + + # Refuse packets claiming to be from a + # Class A private network + # Class B private network + # Class C private network + # loopback interface + # Class D multicast address + # Class E reserved IP address + # broadcast address + for _dev in ${dsl_device_arr[@]} ; do + if $log_spoofed || $log_all ; then + $ipt -A INPUT -i $_dev -s $priv_class_a -j LOG --log-prefix "$log_prefix Class A private net: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $priv_class_b -j LOG --log-prefix "$log_prefix Class B private net: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $priv_class_c -j LOG --log-prefix "$log_prefix Class C private net: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $loopback -j LOG --log-prefix "$log_prefix From Loopback: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $class_d_multicast -j LOG --log-prefix "$log_prefix Class D Multicast: " --log-level $log_level + $ipt -A INPUT -i $_dev -s $class_e_reserved -j LOG --log-prefix "$log_prefix Class E reserved: " --log-level $log_level + #$ipt -A INPUT -i $_dev -d $broadcast_addr -j LOG --log-prefix "$log_prefix Broadcast Address: " --log-level $log_level + # + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -s $priv_class_a -j LOG --log-prefix "$log_prefix Class A private net: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $priv_class_b -j LOG --log-prefix "$log_prefix Class B private net: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $priv_class_c -j LOG --log-prefix "$log_prefix Class C private net: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $loopback -j LOG --log-prefix "$log_prefix From Loopback: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $class_d_multicast -j LOG --log-prefix "$log_prefix Class D Multicast: " --log-level $log_level + $ipt -A FORWARD -i $_dev -s $class_e_reserved -j LOG --log-prefix "$log_prefix Class E reserved: " --log-level $log_level + #$ipt -A FORWARD -i $_dev -d $broadcast_addr -j LOG --log-prefix "$log_prefix Broadcast Address: " --log-level $log_level + fi + fi + # Refuse packets claiming to be from a Class A private network. + $ipt -A INPUT -i $_dev -s $priv_class_a -j DROP + # Refuse packets claiming to be from a Class B private network. + $ipt -A INPUT -i $_dev -s $priv_class_b -j DROP + # Retfuse packets claiming to be from a Class C private network. + $ipt -A INPUT -i $_dev -s $priv_class_c -j DROP + # Refuse packets claiming to be from loopback interface. + $ipt -A INPUT -i $_dev -s $loopback -j DROP + # Refuse Class D multicast addresses. Multicast is illegal as a source address. + $ipt -A INPUT -i $_dev -s $class_d_multicast -j DROP + # Refuse Class E reserved IP addresses. + $ipt -A INPUT -i $_dev -s $class_e_reserved -j DROP + # Refuse broadcast address packets. + #$ipt -A INPUT -i $_dev -d $broadcast_addr -j DROP + if $kernel_activate_forwarding ; then + # Refuse packets claiming to be from a Class A private network. + $ipt -A FORWARD -i $_dev -s $priv_class_a -j DROP + # Refuse packets claiming to be from a Class B private network. + $ipt -A FORWARD -i $_dev -s $priv_class_b -j DROP + # Refuse packets claiming to be from a Class C private network. + $ipt -A FORWARD -i $_dev -s $priv_class_c -j DROP + # Refuse packets claiming to be from loopback interface. + $ipt -A FORWARD -i $_dev -s $loopback -j DROP + # Refuse Class D multicast addresses. Multicast is illegal as a source address. + $ipt -A FORWARD -i $_dev -s $class_d_multicast -j DROP + # Refuse Class E reserved IP addresses. + $ipt -A FORWARD -i $_dev -s $class_e_reserved -j DROP + # Refuse broadcast address packets. + #$ipt -A FORWARD -i $_dev -d $broadcast_addr -j DROP + fi + done + + + # --- + # - Refuse packets claiming to be to the loopback interface. + # --- + + # Refusing packets claiming to be to the loopback interface protects against + # source quench, whereby a machine can be told to slow itself down by an icmp source + # quench to the loopback. + for _dev in ${ext_if_arr[@]} ; do + if $log_to_lo || $log_all ; then + $ipt -A INPUT -i $_dev -d $loopback -j LOG --log-prefix "$log_prefix To Loopback: " --log-level $log_level + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -d $loopback -j LOG --log-prefix "$log_prefix To Loopback: " --log-level $log_level + fi + fi + $ipt -A INPUT -i $_dev -d $loopback -j DROP + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -d $loopback -j DROP + fi + done + + + # --- + # - Don't allow spoofing from that server + # --- + + for _dev in ${dsl_device_arr[@]} ; do + if $log_spoofed_out || $log_all ; then + $ipt -A OUTPUT -o $_dev -s $priv_class_a -j LOG --log-prefix "$log_prefix out Class A: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -s $priv_class_b -j LOG --log-prefix "$log_prefix out Class B: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -s $priv_class_c -j LOG --log-prefix "$log_prefix out Class C: " --log-level $log_level + $ipt -A OUTPUT -o $_dev -s $loopback -j LOG --log-prefix "$log_prefix out Loopback: " --log-level $log_level + fi + $ipt -A OUTPUT -o $_dev -s $priv_class_a -j DROP + $ipt -A OUTPUT -o $_dev -s $priv_class_b -j DROP + $ipt -A OUTPUT -o $_dev -s $priv_class_c -j DROP + $ipt -A OUTPUT -o $_dev -s $loopback -j DROP + done + + echo_done +else + echo_skipped +fi + + +# ------------- +# --- Log VoIP Traffic (local telephone systems ( ${tel_sys_ip_arr[@]}) +# ------------- + +if $log_voip || $log_all ; then + for _ip in ${tel_sys_ip_arr[@]} ; do + $ipt -A FORWARD -d $_ip -j LOG --log-prefix "$log_prefix [VoIP] " --log-level $log_level + done +fi +#for _PORT in ${VOIP_PORTS} ; do +# $ipt -A FORWARD -p udp --sport $_PORT -j LOG --log-prefix "$log_prefix [VoIP] " --log-level $log_level +#done + + +# ------------- +# ------------- Stopping firewall here if requested (parameter stop) +# ------------- + + +case $1 in + sto*) + echo + if $terminal ; then + echo -e "\t\033[37m\033[1mStop was requested. No more firewall rules..\033[m" + else + echo "Stop was requested. No more firewall rules.." + fi + echo + exit 0;; +esac + + +echo + + +# ------------- +# --- iPerf +# ------------- + +# iPerf is a tool for active measurements of the maximum achievable bandwidth on IP networks. +# It supports tuning of various parameters related to timing, buffers and protocols (TCP, UDP, +# SCTP with IPv4 and IPv6). For each test it reports the bandwidth, loss, and other parameters. + +echononl "\tCreate \"iPerf\" rules.." +if $create_iperf_rules ; then + $ipt -A INPUT -p tcp --dport 5001 -j ACCEPT + $ipt -A INPUT -p tcp --sport 5001 -j ACCEPT + # + $ipt -A OUTPUT -p tcp --dport 5001 -j ACCEPT + $ipt -A OUTPUT -p tcp --sport 5001 -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -p tcp --dport 5001 -j ACCEPT + $ipt -A FORWARD -p tcp --sport 5001 -j ACCEPT + fi + echo_done +else + echo_skipped +fi + + +# --- +# - Drop packets not wanted on gateway +# --- + +echononl "\tDrop packets not wanted on gateway" + +for _dev in ${local_if_arr[@]} ; do + if $log_not_wanted || $log_all ; then + if $not_wanted_ident ; then + $ipt -A INPUT -i $_dev -p tcp --dport $standard_ident_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + fi + for _port in ${not_wanted_on_gw_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + done + for _port in ${not_wanted_on_gw_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + done + fi + if $not_wanted_ident ; then + $ipt -A INPUT -i $_dev -p tcp --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${not_wanted_on_gw_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -j DROP + done + for _port in ${not_wanted_on_gw_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -j DROP + done +done + +echo_done + + +# ------------- +# --- Generally prohibited from WAN +# ------------- + +echononl "\tGenerally prohibited from WAN" + +for _dev in ${ext_if_arr[@]} ; do + if $log_prohibited || $log_all ; then + if $block_ident ; then + $ipt -A INPUT -p tcp -i $_dev --dport $standard_ident_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A INPUT -p tcp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A INPUT -p udp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + if $kernel_activate_forwarding ; then + if $block_ident ; then + $ipt -A FORWARD -p tcp -i $_dev --dport $standard_ident_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + fi + fi + if $block_ident ; then + $ipt -A INPUT -p tcp -i $_dev --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A INPUT -p tcp -i $_dev --dport $_port -j DROP + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A INPUT -p udp -i $_dev --dport $_port -j DROP + done + if $kernel_activate_forwarding ; then + if $block_ident ; then + $ipt -A FORWARD -p tcp -i $_dev --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -i $_dev --dport $_port -j DROP + done + for _port in ${block_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -i $_dev --dport $_port -j DROP + done + fi +done + +echo_done +echo + + +# ------------- +# --- Traffic generally allowed +# ------------- + +echononl "\tLoopback device generally allowed.." + +# --- +# - Loopback device +# --- + +$ipt -A INPUT -i lo -j ACCEPT +$ipt -A OUTPUT -o lo -j ACCEPT + +echo_done + + +# --- +# - Allow all Traffic from source mac-address +# --- + +echononl "\tAllow all Traffic from MAC Source-Address" + +if [[ ${#allow_all_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_all_mac_src_address_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -m mac --mac-source $_mac -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Allow local Traffic from source mac-address +# --- + +echononl "\tAllow local Traffic from MAC Source-Address" + + +if [[ ${#allow_local_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_local_mac_src_address_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -m mac --mac-source $_mac -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Allow remote Traffic from source mac-address +# --- + +echononl "\tAllow remote Traffic from MAC Source-Address" + + +if [[ ${#allow_remote_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_remote_mac_src_address_arr[@]} ; do + for _dev in ${ext_if_arr[@]} ; do + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Already established connections +# --- + +echononl "\tAccept already established connections.." + +$ipt -A INPUT -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +$ipt -A OUTPUT -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +if $kernel_activate_forwarding ; then + $ipt -A FORWARD -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +fi + +echo_done + + +# --- +# - Permit all traffic through VPN lines +# --- +echononl "\tPermit all traffic through VPN lines.." +for _vpn_if in ${vpn_if_arr[@]} ; do + $ipt -A INPUT -i $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + for _local_dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_vpn_if -o $_local_dev -m conntrack --ctstate NEW -j ACCEPT + done + fi +done +echo_done + + + +# --- +# - Telefon Systems +# --- + +echononl "\tAllow all Traffic between Telefon Systems" +if [[ ${#tele_sys_ip_arr[@]} -gt 1 ]] && $allow_between_tele_systems && ! $permit_between_local_networks ; then + for _ip_1 in ${tele_sys_ip_arr[@]} ; do + for _ip_2 in ${tele_sys_ip_arr[@]} ; do + #[[ "$_ip_1" = "$_ip_2" ]] && continue + $ipt -A FORWARD -s $_ip_1 -d $_ip_2 -p ALL -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Telefon Systems to remote SIP-Server +# --- + +echononl "\tTelefon System to remote SIP-Server" +if [[ ${#tele_sys_ip_arr[@]} -gt 0 ]] ; then + if [ -z "$tele_sys_remote_sip_server_port" -o -z "$tele_sys_local_sip_server_port" ] ; then + echo_failed + warn "Local or remote SIP Port not given"! + else + for _ip in ${tele_sys_ip_arr[@]} ; do + $ipt -A FORWARD -p udp -s $_ip --sport $tele_sys_local_sip_server_port \ + --dport $tele_sys_remote_sip_server_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + echo_done +else + echo_skipped +fi + + + +# --- +# - All request from local networks to the internet +# --- + +echononl "\tPermit all traffic from local networks to the internet.." +if $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p ALL -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p ALL -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - Networks not firewalled through extern interfaces +# --- + +echononl "\tAllow these local networks any access to the internet" +if [[ ${#any_access_to_inet_network_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _net in ${any_access_to_inet_network_arr[@]}; do + for _dev in ${ext_if_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p ALL -s $_net -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow local services from given local networks +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow local services from given local networks" +if [[ ${#allow_local_net_to_local_service_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in "${allow_local_net_to_local_service_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --dport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --sport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from local network to local ip-address +# --- + +echononl "\tAllow all traffic from local network to local ip-address" + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +if [[ ${#allow_local_net_to_local_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_net_to_local_ip_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from local ip-address to local network +# --- + +echononl "\tAllow all traffic from local ip-address to local network" + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +if [[ ${#allow_local_ip_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_ip_to_local_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from (one) local network to (another) local network +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow all traffic from local network to (another) local network" + +if [[ ${#allow_local_net_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_net_to_local_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow local ip address from given local interface +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tAllow local ip address from given local interface" + +if [[ ${#allow_local_if_to_local_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_if_to_local_ip_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -i ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Separate local networks +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tSeparate local networks.." + +if [[ ${#separate_local_network_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _net in ${separate_local_network_arr[@]}; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p all -s $_net -j DROP + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Separate local interfaces +# --- + +# - !! Note: +# - does NOT depend on settings 'permit_between_local_networks' !! +# - +echononl "\tSeparate local interfaces.." + +if [[ ${#separate_local_if_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _dev_1 in ${separate_local_if_arr[@]}; do + for _dev_2 in ${local_if_arr[@]} ; do + [[ "$_dev_1" = "$_dev_2" ]] && continue + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p all -j DROP + $ipt -A FORWARD -i $_dev_2 -o $_dev_1 -p all -j DROP + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Permit all traffic between local networks +# --- + +echononl "\tPermit all traffic between local networks.." +if $kernel_activate_forwarding ; then + if $permit_between_local_networks ; then + for _dev_1 in ${local_if_arr[@]} ; do + for _dev_2 in ${local_if_arr[@]} ; do + + # - Notice: + # - In case of routing multiple netwoks on the same interface or + # - using alias interfaces like eth0:0, you need a rule with + # - incomming- and outgoing interface are equal! + # - + # - So DON'T add statement like this: + # - [[ "$_dev_2" = "$_dev_1" ]] && continue + # - + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p ALL -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if [[ "$_dev_2" = "$_dev_1" ]] && $local_alias_interfaces ; then + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --tcp-flag ACK ACK -j ACCEPT + fi + + done + done + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + + +# ------------- +# --- Services +# ------------- + +echo +if $terminal ; then + echo -e "\t\033[37m\033[1mAdd Rules for Services..\033[m" +else + echo "Add Rules for Services.." +fi + + +# --- +# - IPv6 over IPv4 (Tunnel Provider SixXS) +# --- + +echononl "\t\tIPv6 Tunnel SixXS" +if $local_sixxs_service ; then + if [ -n "$tic_server" -a -n "$six_pop_server" ]; then + # TIC (tunnel information & control) packages, from/to tic.sixxs.net + $ipt -A OUTPUT -p tcp -d $tic_server --dport 3874 -m conntrack --ctstate NEW -j ACCEPT + + # heartbeat packets (outgoing only) + $ipt -A OUTPUT -p udp -d $six_pop_server --dport 3740 -m conntrack --ctstate NEW -j ACCEPT + + # 6over4 tunnel packets + $ipt -A OUTPUT -p 41 -d $six_pop_server -j ACCEPT + $ipt -A INPUT -p 41 -d $six_pop_server -j ACCEPT + + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + +# --- +# - DHCP +# --- + +echononl "\t\tDHCP" + +if $local_dhcp_service ; then + # - Allow requests from intern networks + for _dev in ${local_if_arr[@]} ; do + # - in + $ipt -A INPUT -p udp -i $_dev -s 0/0 --sport 68 -d 255.255.255.255 --dport 67 -j ACCEPT + # - out + $ipt -A OUTPUT -p udp -o $_dev --sport 67 -d 0/0 --dport 68 -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - DHCP Failover +# --- + +echononl "\t\tDHCP Failover Server" +if $local_dhcp_service && [[ ${#dhcp_failover_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${dhcp_failover_server_ip_arr[@]} ; do + $ipt -A INPUT -p tcp --dport $dhcp_failover_port -s $_ip -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -p tcp -d $_ip --dport $dhcp_failover_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - DNS out only +# --- + +echononl "\t\tDNS out only" + +# - Nameservers on the INET must be reachable for the local recursiv nameserver +# - but also for all others +# - +for _dev in ${ext_if_arr[@]} ; do + # - out from local and virtual mashine(s) + $ipt -A OUTPUT -o $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + #$ipt -A OUTPUT -o $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + + # - Only useful (needed) if kernel forwarding is activated (kernel_activate_forwarding=true) + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + # - forward from virtual mashine(s) + $ipt -A FORWARD -o $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + #$ipt -A FORWARD -o $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + fi +done + +echo_done + + +# --- +# - DNS Service Gateway +# --- + +echononl "\t\tDNS Service Gateway" + +# - Local Nameservice +# - +if $local_dns_service ; then + + # - Allow requests from local networks + # - + for _dev in ${local_if_arr[@]} ; do + # - in + $ipt -A INPUT -i $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + + # - Zonetransfere (uses tcp/53) + # + for _ip in ${dns_server_ips[@]} ; do + # - out + # - + # - local master (here) gets request for a zone from slave ($_ip) + $ipt -A INPUT -p tcp -s $_ip --sport $unprivports --dport 53 -m conntrack --ctstate NEW -j ACCEPT + + # - in + # - + # - local slave (here) requests zone from master ($_ip) + $ipt -A OUTPUT -p tcp --sport $unprivports -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - DNS Services at local Network +# --- + +echononl "\t\tDNS Service local Network" + +# - Make nameservers at the local network area rechable for all +# - +if [[ ${#dns_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${dns_server_ip_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - SSH out only +# --- + +echononl "\t\tSSH out only" + +if $allow_ssh_request_out && ! $permit_local_net_to_inet ; then + # - Provide SSH to everywhere (also LAN) + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + for _dev in ${local_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Service Gateway +# --- + +echononl "\t\tSSH Service Gateway (also from WAN)" + +if $local_ssh_service ; then + # - Provides SSH in from everywhere + for _port in ${ssh_port_arr[@]} ; do + $ipt -A INPUT -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Services only local Network +# --- + +echononl "\t\tSSH Services only local Network" + +if [[ ${#ssh_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${ssh_server_only_local_ip_arr[@]} ; do + for _port in ${ssh_port_arr[@]} ; do + + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Services DMZ +# --- + +echononl "\t\tSSH Services DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#ssh_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!ssh_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${ssh_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${ssh_port_arr[@]} ; do + + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding ; then + + # - Nat if interface is on a dsl line + # - + if containsElement "${ssh_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${ssh_server_dmz_arr[$_ip]} -p tcp --dport $_port -j DNAT --to $_ip:$_port + fi + $ipt -A FORWARD -i ${ssh_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + fi + + # - From intern + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + for _port in ${ssh_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + + done + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - SSH Service between local Netwotks +# --- + +echononl "\t\tSSH Service between local Netwotks" +if $allow_ssh_between_local_nets ; then + if $kernel_activate_forwarding ; then + for _dev_1 in ${local_if_arr[@]} ; do + + for _port in ${ssh_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev_1 -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + for _dev_2 in ${local_if_arr[@]} ; do + + if ! $permit_between_local_networks ; then + # - Notice: + # - In case of routing multiple netwoks on the same interface or + # - using alias interfaces like eth0:0, you need a rule with + # - incomming- and outgoing interface are equal! + # - + # - So DON'T add statement like this: + # - [[ "$_dev_2" = "$_dev_1" ]] && continue + # - + for _port in ${ssh_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if [[ "$_dev_2" = "$_dev_1" ]] && $local_alias_interfaces ; then + for _port in ${ssh_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --sport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --dport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + done + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - VPN Service only out +# --- + +echononl "\t\tVPN Service only out" + +if $allow_vpn_out && [[ ${#vpn_out_port_arr[@]} -gt 0 ]]; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${vpn_out_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + done + + for _vpn_if in ${vpn_if_arr[@]} ; do + $ipt -A OUTPUT -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - VPN Service Gateway +# --- + +echononl "\t\tVPN Service Gateway" + +if $local_vpn_service ; then + + # - Cconnection establishment + # - + for _port in ${vpn_gw_port_arr[@]} ; do + $ipt -A INPUT -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done + +else + echo_skipped +fi + + +# --- +# - VPN Service DMZ +# --- + +echononl "\t\tVPN Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#vpn_server_dmz_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _ip in ${!vpn_server_dmz_arr[@]} ; do + + # - Skip if no interface is given + # - + if [[ -z "${vpn_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${vpn_local_net_port_arr[@]} ; do + $ipt -A FORWARD -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${vpn_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${vpn_server_dmz_arr[$_ip]} -p udp --dport $_port -j DNAT --to $_ip:$_port + fi + done + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - HTTP(S) OUT +# --- + +echononl "\t\tHTTP(S) out only" + +if $allow_http_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp -m multiport --dports $standard_http_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp -m multiport --dports $standard_http_ports -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - HTTP(S) (local) Webserver +# --- + +echononl "\t\tHTTP(S) Services Gateway" +# - Access to the local Webservice +if $local_http_service ; then + $ipt -A INPUT -p tcp -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - HTTP(S) Services only local Network +# --- + +echononl "\t\tHTTP(S) Services only local Network" +# - Access to the Webservices (LAN) +if [[ ${#http_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${http_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $http_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $http_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - HTTP(S) Services DMZ +# --- + +echononl "\t\tHTTP(S) Services DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#http_server_dmz_arr[@]} -gt 0 ]] ; then + http_port_arr=(${http_ports//,/ }) + for _ip in "${!http_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${http_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${http_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + + # - Nat if interface is on a dsl line + # - + if containsElement "${http_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${http_server_dmz_arr[$_ip]} -p tcp --dport $_port -j DNAT --to $_ip:$_port + fi + $ipt -A FORWARD -i ${http_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + fi + done + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $http_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $http_ports --tcp-flag ACK ACK -j ACCEPT + fi + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - HTTPS Services DMZ (only port 443) +# --- + +echononl "\t\tHTTPS Services DMZ (only port $standard_https_port)" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#http_ssl_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!http_ssl_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${http_ssl_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + $ipt -A OUTPUT -p tcp -d $_ip --dport $standard_https_port -m conntrack --ctstate NEW -j ACCEPT + + # - From extern + if $kernel_activate_forwarding ; then + + # - Nat if interface is on a dsl line + # - + if containsElement "${http_ssl_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${http_ssl_server_dmz_arr[$_ip]} -p tcp --syn --dport $standard_https_port -j DNAT --to $_ip:$standard_https_port + fi + $ipt -A FORWARD -i ${http_ssl_server_dmz_arr[$_ip]} -p tcp --dport $standard_https_port -d $_ip -j ACCEPT + fi + + # - From intern + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_https_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $standard_https_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $standard_https_port --tcp-flag ACK ACK -j ACCEPT + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - Mail Service SMTP only out +# --- + +echononl "\t\tMail Services SMTP only out" + +if $allow_smtp_request_out && ! $permit_local_net_to_inet ; then + # - Provide SMTP out for all to WAN + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -p tcp -o $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -p tcp -o $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail User Services smtps/pop(s)/imap(s) only out +# --- + +echononl "\t\tMail Services smtps/pop(s)/imap(s) only out" + +if $allow_mail_request_out && ! $permit_local_net_to_inet ; then + # - Provide using Mailservices (WAN) from whole LAN + # - + # - Not needed from local machine. But for testing pupose (i.e. telnet ) + # - + # - + for _dev in ${ext_if_arr[@]} ; do + if $provide_mailservice_from_local ; then + # - Note! + # - this provides access both to LAN and WAN + $ipt -A OUTPUT -p tcp -m multiport --dports $standard_mailuser_ports -m conntrack --ctstate NEW -j ACCEPT + fi + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p tcp -m multiport --dports $standard_mailuser_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail Service SMTP only local Networks +# --- + +echononl "\t\tMail Service SMTP only local Networks" +if [[ ${#mail_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${mail_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $standard_smtp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $standard_smtp_port --tcp-flag ACK ACK -j ACCEPT + fi + + echo_done + done +else + echo_skipped +fi + + +# --- +# - Mail Services smtps/pop(s)/imap(s) only local Networks +# --- + +echononl "\t\tMail Services smtps/pop(s)/imap(s) only local Networks" + +if [[ ${#mail_server_only_local_ip_arr[@]} -gt 0 ]]; then + for _ip in ${mail_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip -m multiport --dports $mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $mail_user_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $mail_user_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail Server DMZ +# --- + +echononl "\t\tMail Server DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#mail_server_dmz_arr[@]} -gt 0 ]] ; then + mail_port_arr=(${mail_user_ports//,/ }) + mail_port_arr+=("$mail_smtp_port") + for _ip in "${!mail_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${mail_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${mail_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${mail_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${mail_server_dmz_arr[$_ip]} -p tcp --dport $_port -m conntrack --ctstate NEW -j DNAT --to $_ip:$_port + fi + $ipt -A FORWARD -i ${mail_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $mail_smtp_port,$mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip -m multiport --dports $mail_smtp_port,$mail_user_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip -m multiport --sports $mail_smtp_port,$mail_user_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - FTP out only +# --- + +echononl "\t\tFTP out only" + +if $allow_ftp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_done +fi + + +# --- +# - FTP Service Gateway +# --- + +echononl "\t\tFTP Service Gateway" + +if $local_ftp_service ; then + $ipt -A INPUT -p tcp --dport $standard_ftp_port --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - FTP Services only local Network +# --- + +echononl "\t\tFTP Service local Networks" +if [[ ${#ftp_server_only_local_ip_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _ip in ${ftp_server_only_local_ip_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + + if ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + fi + + if $local_alias_interfaces ; then + # - Control Port + $ipt -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT + # - Data Port activ + $ipt -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT + # - Data Port passiv + $ipt -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $unprivports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - FTP Services DMZ +# --- + +echononl "\t\tFTP Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#ftp_server_dmz_arr[@]} -gt 0 ]] && [[ -n $ftp_passive_port_range ]]; then + IFS=':' read -a ftp_passive_port_arr <<< "${ftp_passive_port_range}" + for _ip in "${!ftp_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${ftp_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + $ipt -A OUTPUT -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + + # - From extern + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -i ${ftp_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${ftp_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${ftp_server_dmz_arr[$_ip]} -p tcp --dport 21 -j DNAT --to $_ip:21 + $ipt -t nat -A PREROUTING -i ${ftp_server_dmz_arr[$_ip]} -p tcp --dport 20 -j DNAT --to $_ip:20 + $ipt -t nat -A PREROUTING -i ${ftp_server_dmz_arr[$_ip]} -p tcp --dport $ftp_passive_port_range -j DNAT --to $_ip:${ftp_passive_port_arr[0]}-${ftp_passive_port_arr[1]} + fi + fi + + # - From intern + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + + # - Control Port + $ipt -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT + # - Data Port activ + $ipt -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT + # - Data Port passiv + $ipt -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $ftp_passive_port_range --tcp-flag ACK ACK -j ACCEPT + + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - TFTF Service out only +# --- + +echononl "\t\tTFTF Service out only" + +if $allow_tftp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $standard_tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + fi + echo_done +else + echo_skipped +fi + + +# --- +# - TFTP Service Gateway +# --- + +echononl "\t\tTFTF Service Gateway" + +if $local_tftp_service ; then + $ipt -A INPUT -p udp --dport $tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + + +# --- +# - Samba Service Gateway (only for local Networks) +# --- + +echononl "\t\tSamba Service Gateway (only for local Networks)" + +if $local_samba_service ; then + for _dev in ${local_if_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service only between local Networks +# --- + +echononl "\t\tSamba Service only local Networks" + +if [[ ${#samba_server_local_ip_arr[@]} -gt 0 ]] ; then + for _dev in ${local_if_arr[@]} ; do + for _ip in ${samba_server_local_ip_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_activate_forwarding && $allow_samba_between_local_nets && ! $permit_between_local_networks ; then + + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service DMZ +# --- + +echononl "\t\tSamba Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#samba_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!samba_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${samba_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + # - From extern + if $kernel_activate_forwarding ; then + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A FORWARD -i ${samba_server_dmz_arr[$_ip]} -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${samba_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + IFS=':' read -a _udp_port_arr <<< ${_port} + if [[ -n "${_udp_port_arr[1]}" ]] ; then + $ipt -t nat -A PREROUTING -i ${samba_server_dmz_arr[$_ip]} -p udp --dport $_port -j DNAT --to $_ip:${_udp_port_arr[0]}-${_udp_port_arr[1]} + else + $ipt -t nat -A PREROUTING -i ${samba_server_dmz_arr[$_ip]} -p udp --dport $_port -j DNAT --to $_ip:$_port + fi + fi + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -i ${samba_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + # - Nat if interface is on a dsl line + # - + if containsElement "${samba_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${samba_server_dmz_arr[$_ip]} -p tcp --dport $_port -j DNAT --to $_ip:$_port + fi + done + fi + + # - From intern + for _dev in ${local_if_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + for _port in ${samba_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + done + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - LDAP and LDAP SSL Service Gateway (only for local Networks) +# --- + +echononl "\t\tLDAP(S) Service Gateway (only for local Networks)" + +if $local_ldap_service ; then + for _dev in ${local_if_arr[@]} ; do + for _port in ${ldap_udp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - LDAP and LDAP SSL Service only between local Networks +# --- + +echononl "\t\tLDAP(S) Service only local Networks" + +if [[ ${#ldap_server_local_ip_arr[@]} -gt 0 ]] ; then + for _dev in ${local_if_arr[@]} ; do + for _ip in ${ldap_server_local_ip_arr[@]} ; do + for _port in ${ldap_udp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_activate_forwarding && $allow_ldap_between_local_nets && ! $permit_between_local_networks ; then + + for _port in ${ldap_udp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${ldap_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - NTP out only +# --- + +echononl "\t\tNTP Service out only" + +if $allow_ntp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - NTP Service Gateway +# --- + +echononl "\t\tNTP Service Gateway" +if $local_ntp_service ; then + if ! $allow_ntp_request_out ; then + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + fi + $ipt -A INPUT -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - Timeserver (Port 37 NOT NTP!)" +# --- + +echononl "\t\tTimeserver (Port 37 NOT NTP!) out only" + +if $allow_timeserver_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_timeserver_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_timeserver_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - PGP Keyserver out only +# --- + +echononl "\t\tPGP Keyserver out only" + +if $allow_pgpserver_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_pgp_keyserver_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_pgp_keyserver_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Telnet +# --- + +echononl "\t\tTelnet (only OUT)" + +if $allow_telnet_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_telnet_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_telnet_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Whois out only +# --- + +echononl "\t\tWhois out only" + +if $allow_whois_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_whois_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_whois_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - CPAN Wait only out +# --- + +# - CPAN::WAIT adds some comands to the CPAN shell() to perform searches on +# - a WAIT server. It connects to a WAIT server using a simple protocoll +# - resembling NNTP as described in RFC977. + +echononl "\t\tCPAN Wait only out" + +if $allow_cpan_wait_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_cpan_wait_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_cpan_wait_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - HBCI only out (only forward) +# --- + +echononl "\t\tHBCI only out (only forward)" + +if $allow_hbci_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_hbci_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Jabber only out +# --- + +echononl "\t\tJabber only out" + +if $allow_jabber_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A OUTPUT -o $_dev -p udp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -o $_dev -p udp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Silc only out +# --- + +echononl "\t\tSilc only out" + +if $allow_silc_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -p tcp -o $_dev --dport $standard_silc_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_silc_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IRC (Internet Relay Chat) only out +# --- + +echononl "\t\tIRC only out" + +if $allow_irc_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -p tcp -o $_dev --dport $standard_irc_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_irc_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - MySQL +# --- + +echononl "\t\tMySQL (only OUT)" + +if $allow_mysql_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_mysql_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_mysql_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - CUPS only between local Networks (IPP Port 631) +# --- + +echononl "\t\tCUPS/IPP (Port 631) only between local Networks" + +if $kernel_activate_forwarding && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ipt -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_cups_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_cups_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_cups_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Druck Port 9100 (RAW) only out between local Networks +# --- + +echononl "\t\tRAW Druck Port 9100 only between local Networks" + +if $kernel_activate_forwarding && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ipt -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_print_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Druck LPD (Port 515) only out between local Networks +# --- + +echononl "\t\tDruck LPD (Port 515) only between local Networks" + +if $kernel_activate_forwarding && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ipt -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_print_raw_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Printer +# --- + +echononl "\t\tKnown Printers (Ports: 515/631/9100) only local Networks" +if [[ ${#printer_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding \ + && ! $permit_between_local_networks \ + && ! $allow_printing_between_local_nets ; then + for _ip in ${printer_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_print_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_ipp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_print_raw_port -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + + $ipt -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_ipp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_ipp_port --tcp-flag ACK ACK -j ACCEPT + + $ipt -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Scanner +# --- + +echononl "\t\tBrother Scanner (Port $brscan_port) only between local Networks" + +if [[ ${#brother_scanner_ip_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding \ + && ! $permit_between_local_networks \ + && $allow_scanning_between_local_nets ; then + for _ip in ${brother_scanner_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + # - UDP + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $brscan_port -m conntrack --ctstate NEW -j ACCEPT + # - TCP + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $brscan_port -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $brscan_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s $_ip --sport $brscan_port --tcp-flag ACK ACK -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Other local Services +# --- + +echononl "\t\tOther local Services" + +if [[ ${#other_service_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in ${other_service_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p ${_val_arr[2]} -d ${_val_arr[0]} --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces && [[ "${_val_arr[2]}" = "tcp" ]] ; then + $ipt -A FORWARD -i $_dev -p tcp -d ${_val_arr[0]} --dport ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -o $_dev -p tcp -s ${_val_arr[0]} --sport ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + done + echo_ok +else + echo_skipped +fi + + +# --- +# - Rsync only Out Gateway +# --- + +echononl "\t\tRsync (only OUT) Gateway" + +if $local_rsync_out ; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${rsync_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Rsync only Out from given local machines +# --- + +echononl "\t\tRsync Out from given local machines" + +if [[ ${#rsync_out_ip_arr[@]} -gt 0 ]] && $kernel_activate_forwarding && ! $permit_local_net_to_inet; then + for _port in ${rsync_port_arr[@]} ; do + for _ip in ${rsync_out_ip_arr[@]} ; do + $ipt -A FORWARD -p tcp -s $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - SNMP Services local Networks +# --- + +echononl "\t\tSNMP Services local Networks" + +if [[ ${#snmp_server_ip_arr[@]} -gt 0 ]] && ! $permit_between_local_networks; then + for _ip in ${snmp_server_ip_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport $snmp_trap_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p udp -s $_ip --dport $snmp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -i $_dev -p udp -d $_ip --dport $snmp_trap_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - WakeOnLan only out into local Networks +# --- + +echononl "\t\tWakeOnLan only out into local Networks" +$ipt -A OUTPUT -p udp --dport 9 -j ACCEPT +echo_done + + +# --- +# - NFS Service (portmapper, mountd, nfs) +# --- + +if $terminal; then + echononl "\t\tNFS Service\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tVoIP\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tSip\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tSkype\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" +else + echo "NFS Service - Not yet implemented" + echo "VoIP - Not yet implemented" + echo "Sip - Not yet implemented" + echo "Skype - Not yet implemented" +fi + + +# --- +# - PowerChute Network Shutdown local Network +# --- + +echononl "\t\tPowerChute Network Shutdown local Network" + +if [[ ${#pcns_server_ip_arr[@]} -gt 0 ]] && [[ -n "$usv_ip" ]] ; then + + for _ip in ${pcns_server_ip_arr[@]} ; do + if containsElement "$_ip" "${gateway_ipv4_address_arr[@]}" ; then + $ipt -A INPUT -p tcp -s $usv_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A INPUT -p udp -s $usv_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A INPUT -p tcp --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT + fi + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -s $usv_ip -d $_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -p udp -s $usv_ip -d $_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT + $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT + fi + + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_tcp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $pcns_tcp_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_web_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $pcns_web_port --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - Ubiquiti Unifi Accesspoints +# --- + +echononl "\t\tUbiquiti Unifi Accesspoints" +if [[ ${#unifi_controller_gateway_ip_arr[@]} -gt 0 ]] || [[ ${#unify_controller_local_net_ip_arr[@]} -gt 0 ]] ; then + if [[ ${#unifi_controller_gateway_ip_arr[@]} -gt 0 ]] ; then + + for _ip_ctl in ${unifi_controller_gateway_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp -d $_ip_ctl -m multiport --dports $unify_controller_ports -m conntrack --ctstate NEW -j ACCEPT + if $provide_hotspot ; then + $ipt -A INPUT -i $_dev -p tcp -d $_ip_ctl -m multiport --dports $hotspot_ports -m conntrack --ctstate NEW -j ACCEPT + fi + done + + done + fi + + if [[ ${#unify_controller_local_net_ip_arr[@]} -gt 0 ]] ; then + for _ip_ctl in ${unify_controller_local_net_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip_ctl -m multiport --dports $unify_controller_ports -m conntrack --ctstate NEW -j ACCEPT + if $provide_hotspot ; then + $ipt -A FORWARD -i $_dev -p tcp -d $_ip_ctl -m multiport --dports $hotspot_ports -m conntrack --ctstate NEW -j ACCEPT + fi + done + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip_ctl -m multiport --dports $unify_controller_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip_ctl -m multiport --sports $unify_controller_ports --tcp-flag ACK ACK -j ACCEPT + if $provide_hotspot ; then + $ipt -A FORWARD -p tcp -d $_ip_ctl -m multiport --dports $hotspot_ports --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip_ctl -m multiport --sports $hotspot_ports --tcp-flag ACK ACK -j ACCEPT + fi + fi + + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - IPMI Tools (e.g. IPMIView) only out +# --- + +echononl "\t\tIPMI Tools (e.g. IPMIView) only out" + +if $allow_ipmi_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding ; then + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A FORWARD -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IPMI Tools (e.g. IPMIView) local Networks +# --- + +echononl "\t\tIPMI Tools (e.g. IPMIView) local Networks" + +if [[ ${#ipmi_server_ip_arr[@]} -gt 0 ]]; then + for _ip in ${ipmi_server_ip_arr[@]} ; do + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A OUTPUT -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${ipmi_udp_port_arr[@]} ; do + $ipt -A FORWARD -p udp -s $_ip --sport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ipt -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) only out +# --- + +echononl "\t\tRemote Console (VNC) only out" + +if $allow_remote_console_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $standard_remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $standard_remote_console_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) local Networks +# --- + +echononl "\t\tRemote Console (VNC) local Networks" + + +if [[ ${#rm_server_ip_arr[@]} -gt 0 ]]; then + for _ip in ${rm_server_ip_arr[@]} ; do + + $ipt -A OUTPUT -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) DMZ +# --- + +echononl "\t\tRemote Console (VNC) DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#rm_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in ${!rm_server_dmz_arr[@]} ; do + + # - Skip if no interface is given + # - + if [[ -z "${rm_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + # - From Gateway + $ipt -A OUTPUT -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding ; then + + # - From extern + + # - Nat if interface is on a dsl line + # - + if containsElement "${rm_server_dmz_arr[$_ip]}" "${nat_device_arr[@]}" ; then + $ipt -t nat -A PREROUTING -i ${rm_server_dmz_arr[$_ip]} -p tcp --syn --dport $remote_console_port -j DNAT --to $_ip:$remote_console_port + fi + $ipt -A FORWARD -i ${rm_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + # - From intern + if ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - Munin Service Gateway +# --- + +echononl "\t\tMunin Service Gateway" + +if $local_munin_server ; then + + if $provide_munin_service_to_inet ; then + # - Provide Service for local and extern networks + # - + $ipt -A OUTPUT -p tcp --dport $munin_remote_port -m conntrack --ctstate NEW -j ACCEPT + else + # - Provide Service only for for local network + # - + for _dev in ${local_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $munin_remote_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - Munin Service local Networks +# --- + +echononl "\t\tMunin Service local Networks" +if [[ ${#munin_local_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${munin_local_server_ip_arr[@]} ; do + $ipt -A INPUT -s $_ip -p tcp --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + if ! $permit_between_local_networks ; then + $ipt -A FORWARD -i $_dev -s $_ip -p tcp --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --sport $munin_local_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --dport $munin_local_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Munin remote Server +# --- + +echononl "\t\tMunin remote Server" + +if [[ -n $munin_remote_server ]] && [[ ${#munin_local_client_ip_arr[@]} -gt 0 ]]; then + + for _ip in ${!munin_local_client_ip_arr[@]} ; do + if containsElement "$_ip" "${gateway_ipv4_address_arr[@]}" ; then + $ipt -A INPUT -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + elif $kernel_activate_forwarding ; then + $ipt -t nat -A PREROUTING -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server --dport $munin_local_port -j DNAT --to $_ip:$munin_local_port + $ipt -A FORWARD -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server -d $_ip --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - XyMon local service +# --- + +echononl "\t\tXyMon Service Gateway" + +if $local_xymon_server ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A INPUT -i $_dev -p tcp --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - XyMon Service Intranet +# --- + +echononl "\t\tXyMon Service Intranet" + +if [[ ${#xymon_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${xymon_server_ip_arr[@]} ; do + if $local_xymon_client ; then + $ipt -A OUTPUT -p tcp -d $_ip --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + fi + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ipt -A FORWARD -i $_dev -p tcp -d $_ip --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_activate_forwarding && $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d $_ip --dport $xymon_port --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s $_ip --sport $xymon_port --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- Portforwarding +# ------------- + +# --- +# - Portforwarding TCP +# --- + +echo +echononl "\tPortforwarding TCP" + +if [[ ${#portforward_tcp_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${portforward_tcp_arr[@]}" ; do + + # - Split value + # - + IFS=':' read -a _val_arr <<< "${_val}" + + # - DNAT + # - + $ipt -t nat -A PREROUTING -i ${_val_arr[0]} -p tcp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to ${_val_arr[2]}:${_val_arr[3]} + + # - Allow Packets + # - + $ipt -t filter -A FORWARD -i ${_val_arr[0]} -p tcp -d ${_val_arr[2]} --dport ${_val_arr[3]} -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Portforwarding UDP +# --- + +echononl "\tPortforwarding UDP" + +if [[ ${#portforward_udp_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + for _val in "${portforward_udp_arr[@]}" ; do + + # - Split value + # - + IFS=':' read -a _val_arr <<< "${_val}" + + # - DNAT + # - + $ipt -t nat -A PREROUTING -i ${_val_arr[0]} -p udp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to ${_val_arr[2]}:${_val_arr[3]} + + # - Allow Packets + # - + $ipt -t filter -A FORWARD -i ${_val_arr[0]} -p udp -d ${_val_arr[2]} --dport ${_val_arr[3]} -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - UNIX Traceroute +# --- + +echo +echononl "\tUNIX Traceroute" + +# versendet udp packete im gegensatz zu tracert von windows +# der icmp-echo-request pakete versendet +# einige implementierungen von traceroute (linux) erm�lichens +# die option -I und versenden dann ebenfalls icmp-echo-request pakete + +for _dev in ${ext_if_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + $ipt -A INPUT -i $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + $ipt -A FORWARD -i $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + fi +done + +echo_done + + +# ------------- +# --- ICMP Traffic (i.e. ping requests) +# ------------- + +echononl "\tPermit all ICMP traffic.." +if $permit_all_icmp_traffic ; then + $ipt -A INPUT -p icmp -j ACCEPT + $ipt -A OUTPUT -p icmp -j ACCEPT + $ipt -A FORWARD -p icmp -j ACCEPT + echo_done +else + echo_skipped +fi + + + +# --- +# - Deny between local networks +# --- + +echo +echononl "\tDeny all traffic between local networks.." +if $kernel_activate_forwarding ; then + if ! $permit_between_local_networks ; then + for _dev_1 in ${local_if_arr[@]} ; do + for _dev_2 in ${local_if_arr[@]} ; do + if $log_rejected || $log_all ; then + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -j LOG --log-prefix "$log_prefix Rejected local NET: " --log-level $log_level + fi + $ipt -A FORWARD -i $_dev_1 -o $_dev_2 -p ALL -m conntrack --ctstate NEW -j DROP + done + done + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + +# ------------- +# --- Log traffic not matched so far +# ------------- +echo + +echononl "\tLog traffic not matched so far.." +if $log_rejected || $log_all ; then + $ipt -A OUTPUT -j LOG --log-prefix "$log_prefix OUT Rejected: " --log-level $log_level + $ipt -A INPUT -j LOG --log-prefix "$log_prefix IN Rejected: " --log-level $log_level + $ipt -A FORWARD -j LOG --log-prefix "$log_prefix FORWARD Rejected: " --log-level $log_level + #$ipt -A OUTPUT -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix OUT Rejected: " --log-level $log_level + #$ipt -A INPUT -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix IN Rejected: " --log-level $log_level + #$ipt -A FORWARD -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix FORWARD Rejected: " --log-level $log_level + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- DROP traffic not matched so far +# ------------- +echononl "\tDROP traffic not matched so far.." + +# - drop all other for all interfaces.. +# +$ipt -A INPUT -j DROP +$ipt -A OUTPUT -j DROP +$ipt -A FORWARD -j DROP +# +# ---------- Ende: DROP ---------- + +echo_done + + +# --- +# - Warning, if no intern (local) interface is configured +# --- + +if [[ ${#local_if_arr[@]} -lt 1 ]] ; then + echo "" + echo "" + if $terminal ; then + echo -e "\t\033[33m\033[1m----------\033[m" + else + echo "----------" + fi + warn "No local Interface is configured!" + if $terminal ; then + echo -e "\t\033[33m\033[1m----------\033[m" + else + echo "----------" + fi +fi + +echo +exit 0 + diff --git a/NONE-CKUBU2/sbin/rebind b/NONE-CKUBU2/sbin/rebind new file mode 100755 index 0000000..0661cae --- /dev/null +++ b/NONE-CKUBU2/sbin/rebind @@ -0,0 +1,20 @@ +#!/bin/bash + +case "$1" in + on) + set -x + mount --bind /proc /ro/proc + mount --bind /sys /ro/sys + mount --bind /dev /ro/dev + mount --bind /dev/pts /ro/dev/pts + ;; + off) + set -x + umount /ro/dev/pts + umount /ro/dev + umount /ro/sys + umount /ro/proc + ;; + *) + echo "Use: $0 (on|off)" +esac diff --git a/NONE-CKUBU2/sbin/synctime b/NONE-CKUBU2/sbin/synctime new file mode 100755 index 0000000..b623feb --- /dev/null +++ b/NONE-CKUBU2/sbin/synctime @@ -0,0 +1,23 @@ +#!/bin/bash + +export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +NOW=$(date +%s) +INTERVAL=$[ 8 * 60 * 60 ] # 8 hs +CONTROL=/tmp/.lastSyncTime + +sync_time() { + ntpdate-debian -s || exit 1 + hwclock --systohc || exit 1 + touch ${CONTROL} +} + +[ ! -f ${CONTROL} ] && sync_time && exit 0 + +SYNCRONIZED=$(stat -c %Y ${CONTROL}) +SECONDS=$[ ${NOW} - ${SYNCRONIZED} ] + +[ ${SECONDS} -gt ${INTERVAL} ] && sync_time && exit 0 +[ ${SECONDS} -lt 0 ] && sync_time && exit 0 + +exit 0 diff --git a/NONE-CKUBU2/sbin/tmpsize b/NONE-CKUBU2/sbin/tmpsize new file mode 100755 index 0000000..40cfab3 --- /dev/null +++ b/NONE-CKUBU2/sbin/tmpsize @@ -0,0 +1,8 @@ +#!/bin/bash + +export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +mount -t tmpfs | cut -d' ' -f3 | \ +while read MOUNT_POINT; do + mount -o remount,size=30M ${MOUNT_POINT} +done diff --git a/NONE-CKUBU2/sbin/usb-leds-on-off b/NONE-CKUBU2/sbin/usb-leds-on-off new file mode 100755 index 0000000..0deba49 --- /dev/null +++ b/NONE-CKUBU2/sbin/usb-leds-on-off @@ -0,0 +1,5 @@ +#!/bin/bash + +[ -e "/sys/class/leds/alix:${2}/brightness" ] && { + /bin/echo ${1} > "/sys/class/leds/alix:${2}/brightness" +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1.tar.gz b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c429f2100861d572833abbae4e88044aa9fdd476 GIT binary patch literal 140159 zcmV(*K;FL}iwFS6ILb-_1MGckbK6F;cD{zc0_)@)SuBy_T~d6qyIMz1wCh_*a_vbu zJ_!g8Nkkxk03bzf<;TBIch6t|0+19tyKimP$}UdNOn1+{yXS%#f3b?=B--vey>9>b zvwzB84}T{oC*<}|#yz+IMkBcS-)H^)U@{mDN5dZQ`n^$q_?a{Q?BD3m6vVjyCV%Dj zfBxp}_m{7~{U=n-WHf4O|G}^~ruOfl2lU4Sg!lWyG1~vL|Fr+VuKk^kbNTJ7w~lzG zZmMR^Y8_<0=cbvHMC(i?PV0FT?-GBp%$%ps51m1;H+KFSEyHlNW#*3HsSiR~hBR}R2=qLh+>V?mX+3o_%5dUDF%ca)E{Yzw znWgJi3vA0ZbNrBbE~8ih05=ru&JO}-s+@JI=Ih|71x)Afmp9+Nd3WQSzy99&`}x(? z`RkkSp8+#lMu=4#C4Br<9Qa_1!X$2(?U3iztBb4W-vR&pFPASbZ@x#iofnrkuP?5z zofmJeoO9>x`PI$k^LH=Lubj8Y+j>XN zW$1N}obj1+qfjTxc^kMM+U$Bw)Wc!#$oWf@W`z0b+;Mt?e!t)8L)$pcyX*6oG+N#( zxz$v{CAo`|TlCpz#Tl4KK@i>f;UdTFIyVT9Fe?1e4O%IBho?~bnL?GMXjc_VCq_F7 zA3r-ta{?#L(0$N5nZ3J411Bw1TRt#R%jwGF0qFF)X9En>$|&qR&)p==kkYlcq~7#D zp7{Ulr5wIXHOSk$pOoSDOLJ9 zG(#t6(apA*Gxr14ZGHBizu!mydr>&|7u|F{{oU=q@wi_9_j^Mqd(!{o-WZ18XbAm3 z81{Sr(f|L7zc2pa98dl5I9;~BaGrDXuM-xj&c+S=nSkgJH2(b%irY*4IO_u2Da#=U zfwRF8{SNte#J^+yo$&7o|DN*i*%5OXpsJ2og7NQwe~0`#;@>gZV`x9*}aQHMU3k*KV&I0{! zu(YJipKNS_$0wLupsq2v`ap8S+rST@nSq|cFnHn5!T&`NMM=@@0t2$Uda%1N-pTHg za-F9rK^iO1M~>CjQ{42(!-EEjKc~(D7Pk5A5ab@}CK(S>Q&8y;&~vEQ5b4r5EJ;0) zZ_a{K%(!bi=j$vYtRqSd<8Aj^-UiAAB1Fs#CCI#`N~t#fM{?THL4RI^Yo20JuUb!6G_bj3YMXJD%;z-HrR=dv zf*mEjax;{QYxOy#&qBS77LE$DWJir*bwEY%XOYneirGT2M4|5?=pP8!tHo>=ldwd- z;y7T_mK&Ij;3_IN737qgEY>UJg(xrQRJneNs^(MoQ+8O>%0 zAV_;}%G-PGNJQIh#2m6kqGxwXrEgi`gbPUOOZrt6>%SfnRLE~4lzG0q|$hTyvP*|c$; zIRxoCp(sO-z?#Hlj^>)u1?Xe@LV~&iC%uT=KpNdP1tqX@V^gU}BJrbj%C3|~1k%EX zdI29%`}z3rBopYM5lKbLK{ZZKMHA{>pQF`&y!rm^Md#J|>vu2CpWnQ@y144Rd3$kn zeuKrlAFsc^zPWgXl%j-4(`ZHgK1C}tn^4`Ugr-U!dem(n9~~Y1)M~A1jDP*) zht@j+zH+|oIq%=Ry}5kz`UCaY&Z`$xTI8eU@Lv%DhSTNwb*uIKK4BGNpdc%6VkH4& z7^(CtuBtHdmkcBT zIK^d!lE>|neKO~eabOx`QLL?eGEh8~lCU#8(j{!jXU;TH?yVsP?dM-O?@~qD8IsH; z;~-vVT|-pHZdY=&QePQ!LZ^(%{E`atL}N;3`^1Ao+Cc=N(assc1ojg&Ozfs))xkDe zELqAio{{CEHoL{tkx(%Sn*cId&Am!puQiL%8CufhUvQK64vQsO`CMbU)g%RR{`lX6 zmMsaf>mM@Lc8NNRpr(-XoIGu!=gg2Tr=TB5j@^*~kQvRpz*L0Q6$|6%Z(hB{Y>Fk( zn`;_4T4TWT)Spvb9gol3w6HU!oPYb+6IBTI?_f>jDvhHwiO_*DHErBEGGwOVl; zq{sjF!_#j2hr`YfPv8Gv=R>g55@m+)JJwMWt9{{hV4+Y1F$od1=P|vV%3t9`6=F$NZhT zvXI;4#q`3UThCoDgDsjol!GIXV3aT$&t*Be@n;ID&Ry)yRSCcd+Y?>g&!vZd-bvSC zJ4(?|pF@7WO-RjUg`Es9a50kE?v({81fsll?xn>n$e%p}JCvD4{>qP222%CQ8Y~%B zp$A3BVC;>D13_5$;zr?)`!2Y+nGl=|dp!n*8UX(wb0vic9XtxegHpU73`ZXf1MDE6 zJvqvsiW_3;%gQL`&{R@&V=5{`K^CQk9<2!FwlEnFy+rf4OUcz)A5Kj6`WjgJ8TB8) z%;h~+t2s}?aBK3)A<2w+MJt%aQnm&CqU{owfGqP(c9w2};mtTv5TmzAT8m|X_6o?e zpeYWsovt{ijJ<*?LOsN$S~1~PT-L2{yA83YB$;t{(rjK5O#}BIiaG?w4t~p{7rKg@ z+St6EX|PtbB0^nAf<&Tt;jQTuslVbxd}M};eCv~Qr#yE2a0(mjp#;Ik!?gR*`0kQa zlXNy)8d~W+q>vNXaYFkV5);r|K0}nurjTMxWkc%79G%wEUvEu1?735eLJ=k=3h;O{ zfu~74+6m9`>7>(b({JpNbhF&X1#ZLcU^D(iexp5pqfg`q9^Ln&&e;cDBZfRmOY|C3 zyBqNM^mI3pu1L0TqVRy{uM1^oOuku1;*!E3kqK}26Vpbk{(nfdz1MPsPvN(o-GbjI zFu+hZ`2jfSeo}5=C2ec6gWwoSt^)%TvO00&Wg+!X%YLv6?HDFcl$xkG+x}MGMhV&k zNa)R?yEM%19~U_qK_v!pL7K70M66I9;KA!)ZfmxW#ZJp0)Q<=2s__RkV@K?tjoZV^&niNsuDv}nbAFOvg zvGC;miH(Xqcl>^G@}aU~*S3CXg`(FQp_MmJQdLQ1I@X1K{_`?%I@J}b~oQY$j z9p^Z zy;YRtq<`z|2Ncn=?eNU8U>+6rdjk|-Ak?1@j<&wiV5Z$PM*RvL`cMku40H&36*2&K zIM7`=$_IHoi~BuC+&;NK^G~2-BbXYo=j702RD=U%eFDecRB6&3HX;3)cv2oA0xli; zdEciAn1F-P2iHPss^Q@WB@hsGpmwGb5vT$y?HQ^dPY9V6Cl88QMv5!30!=NrG2rQB zYrsHdIp}9aW}8#TKxY=3T5w~K*A$k~o(2T31ZM6sQV!fD*5b+aA!x-tr8XgK!Q4Pj zI^yWm?^NEH+tZ1IUk|dE+|+Xel>>^@0Qq=yN>96;$?12``~Bnop!?W##MB5OxJ;6#NV2CzG&lO> zgZ2*pG|<3=L&h?0Hmn`)CS!*SdT1D>{Td@DE0>V$iN7n}X8$Sn4xGf5-6t$-I6rC3 z10dz*#nb*F#bTK#U)F?aLTmIvup_JFh?X*m;^}}e6|L~hoF|&s69=s_qs=6nT8T;1LpOu$kI>FlqQV!H@(TI{9A(?gu z|EP-C%DfEg_BOFC(f{G#E3*Oye>w3V4p8{Qg6z!cV?7u=Wi^;9`EjP+zMTi-tkbsU z8DMK$!BaNTiUH#Zd}TAOL_8V6o5K|bVw@HI6(-i;E76t15-%r6RsbCarV1cKK@O>@ zfi~@&W|IKah8m#UR09kkB~!-)+Z82m*yH&3-p|>GGl3yx3rSOb%-u*i)*3C6Nd zxDjwSOHkR?76c4nXn-JRpn`4c8_#^$BkK-cz$cthu@M1?m8gM@xLa;&Ycj$kMxzam zW8|Y`JBn9qMuDyUX#8jt!-2*WV6h?vI5PmFSzA&9e~~J-_N0LUdVm>7av)F=&+v&hMABdCu;7;`NY=lP#ACvGs?no9GbsnupbhuYhIMFT(~LHt z7VWHzR?WItrG#UBH3-QbN>W9V_OQMh1mR-+!li1^BCH%BXjP*Yq5DAw)mpRgTTdZ+ z0}=}VW>^r9%j?nlv??GpgzQxW@0tV`NKTBf@$(fKHd}MvnhP~20=JBfb0%WC)fqA z=GI5V-ed!KI=4ff*VBfgc4(6kAbvYKH1;%*x^t8T0Jaggu~)l(+7k{r_nO+1?qZS1 zw#CtvDk36)x0>lpuV=p9WBc5ly52gi5=r=8o4B)Rs$gN%XBh&M5$s06I?r2xHVQLs zqE*S+a1$g;lJUX>yTjh(v|*i@;|Zn;O_layQdQ03uTBh69A#EEAHgkDvikwC% zOpzMhp3(wQ>ByEC1(=X)r_*M@*NB8*Nos@!&&?5S6Oxly{a#z>092`DVuM&+uq+~5 za-YY*@EAOn$H4LkGSX8+F?P&3s?NS&@P06-dW4{3qTy$RJfNYbO>{Bw(>hIaT12+G zW@rd~uU2VHib{i#48hNfIIbZW7YSA=R4!v0s(3r#R)t&Jee@h}x()&}?4xvBpr&?V zmvQQAMaZj#RMS-y!WMeaL}Wxw#OrZY3J&h@Z$&=IK|C7$(z{o1n$)G>8p5=H%Dn`q z+GRI2N>vU>ctep@;(KWtnehsA&2zpTfM=Bot9Sb*C)A+dn9(pbSiDSDMdOK{L{^QN zMKl~dWRnn%MqlD$njRkt zjvG@P-;<&oKx`Pb5?Rxom+`RIEQ6PE5e=QQ5wFsJnPM5Qw-1pJj-|Oh;{!4L!>h&x ze^U$giupXd9qeW=1H1WoeS=5fs3(#uS~$ zF-NG$snQz^A;7nO2P^#{W}-g_d2&rMVeo`cXQlK-GJlXM$H=G3VUf`t{7H60f%)j; zb)}PgR{V&3)$B&?Ph>YLa{EMH1y*Skd{RN>lMho=QdGpFL4}b=2nDo6olVNtAUTg& zQe%8WFD5-XqgjLfn=VM3l)gD&gR%oE(VJkU!^De3IC7N7(V0Y(WD1K9X~Jy~popnf zIK_m~YPGH>YM$C#$|gPbNppMFpYjDjmAj2J*zO`+uVfc;*lVb8`l+b^l_1?F(`lWl z+X{`N|Lmq?mE6X4wmuTb%jJiQyN3-bjaDY|)MHj3a%4;F&#^6|8WpkqrbCmot4C$w zYrpbe-x&8J4$yv14RCQmtQ4Q1N^7d2yz`lQs(z4gUuhmC5Yx3|B#P@(v`NVr%cm`y z8Uh3gwoS{HZ`iII4h;W)yT1HB~{4fYe`Hk%QAE8amA(jGy}U<gf< zfedFd?hav8i7Fcs$yGzw6h-PD?=nA z9dN(1-)kAvK?$(|X;>$B!sW1`V)rMB-qtqo@;y$h*VCQeM~D8jJDb#y@nIi`4BN9ZDSQMsNgt=rxd-JB{FPbt(HpFqiN`^rBX3rp{Nr(1D)vAhX<1}&%K4>&Nu%KTIA3l=Ts0Qz( z22VCD#_Zf`X9CAm20&dMwbeiV`07W!N#aOO>P`TuwA$1rAD^1=1T$x1>qNYh6F|{HbjV|-M-#GchHbbwvk3$C~`VHBlCxxI&2OvV{bM3wh4b*B)|qCPO(4wY#At~HD+n))Nr{A@v-51 zDGvq9rr&Q3-IGjX$Z z+F&E=*qY^pbR7;FCjp2ophfBM0ZcF_2#6)J(PPO9nHn~wcH5Me5RDp$no}BqMMJYU zB_&j&Mylqt>~=#lncY>egtWItPSf&txvB2WndQlrv;aP!BywlTIt*3PG>k3vrbcQZ zu<=M$x?8POmh2ihHy;MfhN?>m^Y@itAIBx&C+2Vhl44LD;@6LSvv!A7=Z)hdg zxK7uo54Er9AoD|XP0iCxh!2r#iiFV4-K?gT?@qz1d9lvigjKg-x1C1Yx|wV9ZrV0Z z^AAy~loH-qB6GVt6$F}Sw~DK{2y7Hz{9Ou*geu)Xs)x?~RZiEthpyL1N3~g{pir*p zN}b#5B<*_&_Kv*beS1zcFWzvY@9A{(-Nk+gPWF0a<`RX$uEgR9XmY1<3J`RHw~FXi zP^<_;w|1o$JfaWSmEMO|cLfm(!H+?tX~~0=l~w&$1PGNY<20I_g={<{34T_*G|LM? zVc9I_cc=pS)*rcq)Ca^2xK7tbAEZbfwID;@fxKC2b;wg*}E4H}_e$OV70^YE8E zkGbsv(G1!z^z2uDfvTG<)J+wfM_)_vu;s;{cvsOlxI@3_-WruZwXC9Yu)TP&h}`du z8*k{UP#~Umwc-YPkoltuFW8$T`(B+8xb zI>mPjW~C3=x|-d;^*5<$hW4>qD1{>mN_Mudec>b>0#YXWTi58%vJGq_mfp`KE=J@e5LI633f-H;3`=_ zPjHtk-6LDN4%I1NnET#v~*4^hr9RQCHJdA`&H(Kzv>FN%nqxQK#ATYBe1Sc;mH)( z(go|~*zRC`XE0##AG7U$f8KJmU-OBA&7Wxv*P{xsU%FPRRNh~Tl8oMYFpW=Nlu`#F z7C_REPPjp)61ul;qnuaou5X-+*WWmoubp$JeN+$)dzb4oJr}aA^-%djIzN-t_4Z3o7>Q-~ZkzUG-ir@;2Ux6i_DhSeY?DyDcHh-KHkexG#hzb2(4pQO2(F|fY zSZPq-gD=U$qt<0wbIeW)GU#`WOjp?pVD7Xxop0u+dpy`WT)9FxGsOPWQHqT52tQ47GUW zg`M)baycPp@WfZR9@$eSN_;u{bPla=BgJ2gE=K8KKH;8++k>gH;$IixdVZRRL+0h- zFh3(3Bi_8?c0oY4r-{x341$;gHOYCI5%L+BS65tFwwVYk?ef@k;Ou`ZG_aAj=zt|y zUVBJYvXLdRvZUeXxX30Qli8}F`#S_9{YqK3eL*N|<_@+KWU*~8z=jZ}Zx)3m%AsxI zv_68&>}pyPF|4Q9HPPrd^j7OsYweq0cB~61Hp;wI&t5JuG$Hdfsm(VdE zCUgoPCRD#ZV4K)Pu*XE)x;6qH8}X0LDpEQ^Jo)JGJxfDAOQaWK?Tj6dma5E2{F!-c z^ry~&<7N!ndoK}(j?=C0NLUrH$4MTy&LWdMc){iIYb*3J%>7Hl)kOrvy3!SRUcP_b zQEJ}*MQ+#1zBy=LMB1ouMynL-BvD}&?0`eJNyEyPgd;>UXZZZ2@cJLZV}5TkLJV-+ z-BD#-*@;r~0?aJuVmR=dgs-DaNg3p2)B_ZK5&7~WA2vv>+3}?Gtltxv;yz80EZ96D z?eOG~a}W|AzJQ&1DE&YaStasx{R#zj)-htCQD-T|0*=i?k;P;%pAHYGkd>P6I>jeC zv{B%~FZZVYB6I`$@+UG1;zy+b7Lo?ve5(kwOaWg6k4%wxMp{08)$Ji$aLL~evb zmpwN1Le}Mxo94z?sTgIi{iaIOHbmA@@$q~KFSlfy4sGK>JZa0RX-U~DkXCd^+9>l_ zt$v#mlDS4p+A9OwH8qdzr99QCQ6p@9n_#iPb&PmS6zvh^mE~`3T_K8hnoOjz%5%ay z^ItpeJ|~E)BGy#xvze+wJPVR? z{4y@Y^TOY~2ur`hK*UiIsahBsheeFpVxP@yQHbZ!Uyf(#P(YD!TgC}XX<+yk79a1e zHZ$>W#)z}Mw6xGE;Kmcb@ z2vV3LedRoLXEU5Xif)~QyM#_T(;Mj=kU9tU?czfaSRef+*;me!{K?|451y1U2iBRI znR$`p(}p^XSOiUXtjq0Vv4QWwT2ftyAL5o}pw>QvM8&l37-p&7(04=6AcHDX$%=1{ zE0WqDcgd~s2 zTnl7tSxAU?geXt$OHs(2Tl1E^d13yipLG5Y4xFcC1^FQ_1hyd60>$s+`hNH=ypPGiDG>|g&tQJ2Rj;T4s4eALn zneJ=s$tefc9kBT9j~CJ6dZbqbU4Mmaf$4mm&~j1B7DuYsrJQ?=Y^u}N;;>MQD|g4e zqliKrI3it7O@`&9C$c9k#Lw}xczp`gzDoB}L239ocofOs$j09W^mW-e4+7zluf~LO z=1anN38pz*D9HnjtvK-&bmNZfZ>jTW9a2q}OJP?DF?{nT!HB)_GqU(2%O4&dz=k$a zvZ#>GVVUyaFj0>L&;Ad?qH`N zZ#l?we$Lo zb9M3d>f-w1_09Rs<(t>n&YLUe@8?%n=dW)rFRqWAi~pr)4!(T#_T}XT82x33B{0sG z+QMuK3RAqmU-@!V?$Lv3wTek0g%{4Ni>v3~!F&Ff%a@lo-&3M5E^l5_`Y!;}%c5`3 zuWl}%zk7Lp<-C1&^%hr10IPNL-T94k^WBB>j{GkOG+_597-@2@Vu{SL5mb9MgB#jEqHzj49efZdfNakdJj?etsh zkl?`#rRQC}xeRIc`hlNe^dZEA&in)tfewWW1OY%JSx;r?xzd@tav`c)+zS##ry6LoERh;WOiImVhO{IP42XnCSSXUXZy`sV z<_tqIOsgUJcm|NY)*GU<&^VE^||2LG}D|0RE4{J}Y%`r&c9#57qqzteHZ@dI@2ypt|e zXtwNthPgG&HP|jReo|<=j+)OQ*wR)j^%6hMv;zAYv%0fRZ`2u_b_e}uI7R*L<~c1H zJkKqVr_T@3>CeuN9N_l&cgVjZ{vGr0gnv)?_sn^L@eCf<#(;l8W{}oXm!XGYCc8kz z5yrNKG5MeIrl#kH5Xc3K!e@KyI7+m+0X7H%Z2auDY2;tu3i7(9CRoEu&cF zcK)3&G7u7Oz7A-=7r4-;H{ZQ^cSBm#=<)BLJH`Auv!%ak$8DKZe=rUV_ z^flNVDjqtWCTahVy)SQQ<4F2`{>^-fURk?Bjx+*%ghvD~7_iN*IbOhtca4JwX#lMy zjh2zHiOF|=e^u2r-J_8>d?nAWNen%GRA1Fq)z#J2Kb{VUgJz@g?%lf(=2sz}`EOW> zGi^NL#;jlw=;P$hfFC^Mnl{wzAw592DU-H< zvIAHd4HL>$quN+}@AR>YZpRsRTMSLXvs_yMPB5M;<+3B05Y7xyhT6u7+B_bQZLI4~ zpZzkE(hr8C+=y=c9*YYTx!r}7Yko}V&vLuf3dsr_l4p2y_9#1mpOZuPO2r;!vj(zM zo^67=6LsnVR%pN&FUT%r*3|2e*#?yiT~J(gNX6WZHHE=)Nb4=ZrNl5WcAsJRXOF{zUD&`ea=ghk zwt^ydmn%iKIV?p$2%tHcQfO^`XKiCw3W+G3U~c442_ul=GtPB3luiJ0p%aMXLQ)}R z9QFoT-u<{YfI{HRXMZq^z-v+%=A{{u;BP2&&&nZbU&$vn8g@X zpsS-3-uwTEKs~}T>fvhHvZVt+Rzi{tsmgy198R4xPLb`H!(PRsa*jooiV#%o-ofgk zRaXBMsBb5{WG*kgSf1YTNSVOWqT$O=W7Rj!Pl`ttIchrNSW}8uYE?iAEW3Pk?bvg~ zHE)D@*qX&2D1z*w`f%U8b~ z95i0vEnim39|YU#4DGi{<1d$s>E%IqF!Sn{5LaHR<;!sAV2&bp0H}=Luvh#o02a9# z^~0;wewUo7nh&!P?jOuG2u^U;!zBz9a4<>%3naam7hcMm2lFqCA+YSNRU=6fZ?73; zA!1MGV|4FWkvWHw+Ras zeSO?rf}8vdEpZmTqok3yfGG~atX>zm22y6A_n_5_YaTR2OZ81h`IZn#s5rTrc9fpJ z?4`ptNJ3VjvBFX(byLGRZAOs>A~!Kq|42GxjO3JdyhlS^OFR(VB3wclz-ahzv{bS| z*!&X4)Jv0F+e^<|Jy;%G-BRT0q@$?Y8Vtm8sgW3k&uZ|lusbRLH!3H_DAqs|oB>&I z2RTk#(I9TSn3$;?ZF0NJ;K`Ctp!msvo*rK~l%gD7S82(lwFCQ8Yt&9k{vdg+mq7xy z_@e-Rj~TrOIrol1z}#b5lTisWZIQzX=C+eK1+GBPK;i~sP@K^DU4%(9<{#0;p9ImH zLZgx%v%WOxXXJk_yw70z6&YthV0HL0uyGCl7)McyDD*LshAk1wL-28XGfPap_u z#rFlulcokLe+;69JRe3qe~F8H2jbAiDKE0Ig=(AEHy0OygV(e(lxrd*lM$?WB3yrd zva+`i()(u!-{@>>gc6_$%wW-bYBR0Rgt?f=afnj$$$G0w+{7IB(Iw3MatQ;u?`XXa zHw|x|w&DwLO2ioDVvETG8qYx7lLIN9;vAYgk~0@m*0#bz#xRV)Fzs4mCakNpOi`vD z|J%&U+B774k!dkQEAj!y&7~}jOb5Su=Y=l064Y)&e#ZTM^^Bm_$E2R+1qeGne<6sl zBU(TdCR{|xO3EwX6stjOafE80Ma+S4pAa(-QUVDmX*Vfr-K-@*eO@stOkpOJ=mSip z&Fcby@)8{7#s>j0Kx9$TfyqPsqsBz%*6YD%8)1*val-GaFBko*AK2CNWXV zt$2e@Z`Nqzhk%&@a~*Vs&axZLYNcd$Tn(kl7ep$r!*3!!3)wT5}PoHi4?eEVwx3+iw-|pW2i=Tde`Hz1_M=e<4o}706^|ssV zCxd^Vf!dzGdw=n(T_9Ngbl!>{piOktOoFtvXiLr7_8v??F1mK7L&#@OwAyEMxYCV> zLqZ-AEdj(jxop0^+cXW+sF(xU9%f0EGB>&Mx_Qv>^Zhuss2}AzddD(xHnqe-pU{84 zg=V7jq+^Zc-?U@2h>39oQqPU9(2g3&+6!%u_1ko0J1+a3$S)&LFI!HK%4!UEI0-Oa*D7>+UfM!=Fj`T*It}rHPOqB&$?xDW_ zb3wcdI8H#?qh3#i2)BFS3zL3tXmg(=5K-EM^va;|SGZ+IN{!NN{qZ*O%v9*Vpg1*` zC?^8Ce^Lq1a_@r7rdv5{_&3c8-AW(jn7(pk)TN#pM_>0&R->p*afnnNRW@__#8_gL}{9- zuR*DVU&wuy$&BLqE`3aol*Bbv9N>l*m#;S8Ed$w;_7l&fr=MqdHRR@fy_6T_sCG4n z2IMF}IH_EGOWoo7rtHhK4JFm-!%COs?Qo}?luQbuhOoB??{F=;{5&diCFzdn9;^0s zl_z2aNVz&mdn3#)E$kP#yoeU1fU1!0~vKWU15yk(Oxt*qlz1Ry5y?K9V#%4pQP31ArAmR=X0AQ z5JK@Li2RhaR8Vkw*Q+60vVyZgx2uiiG4IPL1_nbRE%cYaFs#7vY+nfz$lkcTRD1^B z1Jm7Cmp|X!jHfxQm|LPom8tS@G?q5MG&%krmk9wqZFo6!`_clV)Kzt>%8+(dg~h5i z$9d|fFx9zI?sGo>d2ce$wdxX=52$iGsH$a|$fX%Sjz|<#4aYSMT{+geE(Fub#8E2)-$5O0AKF{)RkbycUodYu=F^Oe2&&b+=` zt5s}Lxz?-|n9hGWx9E^Ai)A2sJ_$p;>L@ZFIH%-Z9)wv`eoti2OG=~U9m{TsoDbj! zpp51sEX0f;LJpJY+l5+E6!4@X+6k8Clu#WXmd0$Z1*72?TD3F2c|g{ zP#A{hKvNyqd^~*xs)^FcD*cXHs9O^=*$gIUe&QUui9hrBb5N;qB7NVJ==&TU2Dc=E zpGW}ZwpNXmRgUbL8_>Pap=~hcbEq5iKv#QV4rW3+U#%U?)fQF%u*j;1MbSDGl{th6 zpQeeJcj9d6bWk!xk$#PM-|uKLx7(fyV)f0ee*b-y<_W`ALC^3a3ITEY=$eoR78}`^ z7Dh2*=^5KG1yK$S)v5z&l7Wt`YTuP;%YBLOiFCIYF~)Lmn-+BNk<)Xw8BT>sUPW6& z_M%n`sp=?a)lrj!B;WHr0aSn(S1zZ3r;66@AbVGSIFrP(&{URdk_0r(=vfxU) zJw|7RH+m9a9|$vFD}PYuat1`o+-)?xZz#0xmc1C(9JtSc4gFTRftdL5(pP@SmDcgv ztOl9vxli8(yNfki%BpuMnD|C)mnJa8I1N)ImLAh3)WR^vYvDRj1A^%g zN+K4X-^HTaWtAxW!?%+esZEMtt14c+F8OuU^2h*BpnC8^u*NBK7if~fng;WMFg$0~3vWSI zUE7vBj+z&DG8KrYz9i-EAfm7ib!I<1@48BZDFWgljzKs?}vLXJWOkblaFcxFr|{en+;2(pihC^nsgbAJ8ti#$GMle0{O|ML|Ssn?P2jxUY#@3ydb)yd?-x_0QQROEJe-_!ouH#V_$bv~{_{S#X+aXw78PZoPpn8qrR!xS z6_&1-mOhL2>^Azd y$-G87l1Z7aKH&F)`U#0MBFMNSY2CHRCQum~Sud#Rx4J;| zt@Nq*B>P0i8s%<0Ti=mti-pU;vl+FjvL3%`fa?2fuBcbzeeMIo@d>^T{I%KN2tF##cy8e2)o=V#M<&^>HfZoWw#xMSN_n?VLif&di zS-Nu2G)*Xk^6P)Hst}5*E6Lt9c17mkztNP(x33>F>S1dhvFw>_H?9w^S#un64M*}E zL1DujV27i0$fuX<0M+^ZRjeIgoO(yyqOA_mYpJqYBx^ne!Fh{PGp26814ZNJyfm)K zflGx%N_(Uwx)Tu%@n`__ zbA$|Lv~~@?_BO60nc6^Y4p!9=c3eC`q9v8hyBj71*%^v=s1zDIuL8nX07gK$zjtCH zYmU}rVDxYV`!sppNAw-;u3RV`AktZNBj68Q{qAL+U1-9s`s)*aLybO6N5`-?nxZIB zOO{615S3{Hx?5PR^qlAT?D@yJBXo4y2o2$*YD+O}tXz70) z?aY6LN6}kLt8gdgcM<}>iF|)3kx%!#>;4f}-y-21!|oxi>&Oz_Of1pO#1eFcCT-#% zZ4P?q=D^vnYeCXz-?XqVaFvmQ*mAQdOWnr!|9a|CBp-!5vI^;d&@>wOW8|FhBV-r7 ziS}*PUAyY8UtEIupJ{oO>Q8&6%Tj}WBi!L|hr<8dpfG;J^J#wV;hO>JA6==1jMCI% z{^Bxpt8o5N11{zo{SoHkGSKyS?V92hbuh=P$&|A@lEgL$m+GTWUrp0jiV}?U&*sku z2j9!vnaE5-_$;T>qA7hmf+=$kL!FYEtzcYS4Tb6rxtn*ZO~dk^Qy|JTF$ z`}4Cu%-tjZU-Pr~zxn_A8b2FPH+Ojcc|RnEXXN|?jt*O-M`TxZa%j$U*V(yKNrR&B zEkx2uuqT32+%7(=1RY`BJf|0J5YVgf6x@o3Hna^gZi8$5F5?r_MG*lJW#_9G;j@@j zoN-$={m#kK&hyN7==pqT_G0xJMO#Joum?Ah;WyH8#rp4cQaW(|s{a45?(f|z`2V~2 zZT)|J|9`9WTzj8fTO5g4V~*o@#v%nRGWGM7%07dQY_Ls1YWUHP{~p%p_YbvkCxG)) zT>%0L{w{dV0H?bG%=;rdxvc5KZp!)2H8=Z=d|juWLt{3KYJZ&>Pv9YiqhtIfK-qay@{Q0z>vha-%3;eUQyK%vQkAYGc? zITCAn!NfB;R;M+IneX&Qy^L5Io@S>oh^1!F{4JsGqFoR_nS$u>APOsqPr;8;G=&H> z7e+Q7VakBh4$dQ&O4?5QN4i3@gi-O7evHl>;;AH8A<+@*ND{hTD<;FDLtuZGmv#9U z^RKS_9{8>b4+1QxSKB+}+5L4GhB-HvFE-(0onnLF8QXGV{Y^~gwJ5Wp>77*N3Fl>(5&g} z50OZUtT9y+DZeO0E>xj652=dGBg9cBO>`J7IApyDVNe#nYMs8WFh3h4z?36Y$_7-T z{v!n7EQHkXDQgN)5E))vgsp2}K-^ozfdEw>d0YiipgvvYcy*%BR9@4Ub@>t?mCCz^=6V$tx*W7ZWbeiMj~lVMbf(R!^; z_>SpQu5Ra7$7L|8c`NTQut}Lc!CYoa5b&iIn!ZK@j3xW@zc^fZBkxSVQ`Qbtu-Dy& z?59*IT->%!86+ddKr)knnpoEgx=B(xEcW%5<(ZjYVm)6nD2!k{#URL?i6K!Of-@T-@W9N}y(>6I!>}}C&zH4`=6Cx{FKscLRvIho> z@Qrcv2(Z4pyS>{44xn(wi5<*sWZv^rA9n#;Z<@@@J(H|4>J8XW6vWa76agN0ydI1< z|5s@~%V;wgFSmGb9OVwk<{$lKPAkanQ%uEeksi@h$D3a6Ub`iu%$lA_)L3iG-b*R1{u0H@ez4 zSdh?Lssf!jv&a@Ikjz*be}Q_5+q8KPr&EW$x=JrjMA0>oX#o088Y$AZg8-ZREofDn zLf&XR%Md|B<87)%ZQO?}EFzG0(9k|ZbR*CKuxMj|e9+hY#sAVD$0%brbTfx0PqOD+YD zc{>?Q=fxAnzVIkrKO|!#;Q+~yP-z_!>Ltc{`k?4oI3QC8C2N(ANlxzk^0=dt?5ASR zEr-d0;qjV|J0kiny%7rnaVrVU!OE-E&DV#k+gndIo*q8K@!R_D3@H_=q*TbX3TCW3 ze9_P&&J3H$v(!@3(eP&IP?DrAL@G$%ASFF}5Ly0|W+U!4?^bgFN@efMlvI{D27Tri zXr)-uv!=Vh*hIHrvY5S?e^mu&3pNg=EH6_)HCOS_&oAR)po)%P82{WRC+bydH>70> zY#cLhP0AFIhn6?MMnDQpo!;~YD%4q8^m<|Nay~y-%r}?S8$J@s4a`TQA_-u3*;^9F zghetNj1KhK_o#txE^js$Jm_&-ga)0O;)q!}OlN|bxU2!)BT)vs(Qw5FXLLr%Y9GFk zsqaZT9Rm%bU!Q3B*#)yS(J54Yig7clsr0~I0luq}IE#u-FXlL4n;(0n zP1%%}vu{xc;M3y*{RPWDC@R zQM*E`_D)j8T(wCiH9tm6uh{4C&VkViu36-2VI@2Nmi>FmDZXO8ADc0;ovnk+b2xj4 zHgBnPQ2tQ9^Bd+tn1hX%XZpj7s`xh8+g*LK@qArTQgeC6>KElk3uGVJ$5GOj&9KsG zF9u$!b_D4>@wce=^fT0Z>gr{DlULSlln?q(0Ip>evbesqk=GPz`^sN`QBl=B$WHHzp)&dCJa0s}y0&!kO`%-$5SP<$e4c`)-> z^`FVT!{{iRSInB~oZ8L}jGiCUECByi<5|ECRd0ULcF1bE1mpi2c0i0ly%f_0E+JM*R4OgTnUsB6F&z6qIt0{fc-0kw`hD$37vQu88e3 z@JU;9pw?d0*r#(fyk7R-*KR7BCua_jWFZ{odNhx2P{kDFN@R8}DfNbeAeBBdKqJHx zAjS=KcJlLktpEoh@7#vkgmDqWY)YXssqv;Sr}0p4EpsOnIVQJ+kNDmBzJYrue*Mc9 zlR~kqhl(&`I!JfwPF7TQU8fm| z(0iS*+^?jptki9qpdHo@A?lC(*eq#vlKZ_mgs;;tKhK|Fe(aZK9PkIx^R;#u2`lKif3sfX*8@P zgm^#4c&m`dNja12J-tP}ryo_Xj?ER^ZA0#-vU@V|nrP@qRu%Dbti!18SqbP1U!DR- zMV$gKAj%CGpbTR9H;CSkhEVl0-;VJ^+-%eVMFS9g$ z_~D1*`gcF}{@=a(_h$M2&)mb=|1l4~t^eO){O zAo0NubKmIy*Z2wHQXo9S=8?Aw;#Shk^b_8KvqI4%yg%mjYQXs)8{|KNWx0HA(B}!Z zC2V2!c664K96W<^&-OQ;+cNt*$V9GiA<+&_&0o!oScWj%8YJ*8+#|}tpP&cdo^%hZJfH4K( z<6Q^b%q&y`7(@*_d;zu{#kdp}Fx0j6z17_fHi}1?vGxRdkw(>mUQK$BQ%Lgqg_hFS{AK6qd-RoIM?nDK zT>~088l*#VsutAfi{6X2-#k*8v)>@3ySZ_$M4`E=k3;KD5>(@*=tC;(Zae8il#tor zz3ZrtfuRlstXqMih?D&h8>)}4G?X`!-J|qJ(noEUt27L#xofUV6UH~<>pJr@{rDb|86bMj(T=#M9Y;`-d^X9hw3nPGalAv8IR>?)P@m_^y8*R7tzkwTmuMIk# z&giO57a{uo^i1qpw=37S0o_#!sSY;YElh>lXd~k=IblOa;N-F79YE6C*r7KFF<~j7 zsejajU;kH6-EM+sqBt}FGTWRZt!A}G^}F-{=E_kj+C#(=EXD0y&rFnRr>K`JeR;`H z)po7olIFc@$KJ=IF}V{E8j@v#fQ!`AYiRx+UtpBlJRwY;dNJCko~`}skK(hs7fJo3 z(%YX{J>U4j&?76F_}0R2GUh?y(0U7D`y9(=ch3atecr5l@$A7P)VoFe#od&3E!Qp6 zm|gBZr~Evhs%8un+_pV&$2|9u}_}6Js z<{@JjsG+X7Vrz7nGER3$1AX3s$|vB14mZe(g;9&N+7X=_so6@@Ei7$YkE4NEpY#CwU}4?sNEQwSugxn|jTL&*u}t zYeL^(O<0v2Obh{B{P@R1T6`&=&F&vT+6baydk~l}n{B zS5b7vm>h~tw_LICk2IOb+riO7+Kk6MI$9fj6l)W}jyTzKwH)W0VaAj6y<%0zKQ)gd z?B3F-nlZ*YwIg1mbt>IV`ZE%_3@UpRXM&f3%SSzoS?N4$W*~(`Ky-AWpJ*QMws$n( zi`&vr9aEFFIqGIDb;xCLtAIKC`_Embt6IB5%7>w-k6OX^PGA$|tEogG%z(mnqhATl<9r9ic?*vM>uUxgVaRc!whEB-x^|G&p85=!Z$Rep zhKjhpSXe+rffw-;8N;kMHNGQ=uBdn`Ef85r#Sgc+(V&?-`Tn#9uOpx+w z;-||yFwGBrpjGPSVQ!9Vb=RKjg$BZgd+OQFdr?ZzlV)9@LfzJ1u59i+Unk$B!sdPM z?**~@qCA2&ikplqEIgSR?O+vIm5y$)B@NDIkrD*xA5&;+hQ=!=J#5a*J=BC&73ncj?no)B+;dL#AMc6U~^XipEomn;xfI4c`wZl|K9q#S$V#y|cHmm($jmSM}4^_|>Lg=k)J2q~Hz9C;3n{xLQjT8(QrP$iwpdk#wfGj}OhRh1f~?3I>K$*sh2iK}p$0$rGrxW`7?PwZs>?yJqI=yzKN^INTh2iQs%M1D0Vu9YxLkbyE%mZrv7@>`vF&%Y=veWQd zTF?fm;K9aPB6aA#0iB2S#1X_5RG}jg1{-}D*{FRUp^a_vDpQ-(FaI{H6p}{eHu84c z+>WU~(qIDFiU`AaLLH2Ee9;+cKyBzgF8J0zMr&1`-$xE=JP*(L92Y&G=WT@Z1lXUf z4G5vEnj*Y$^jiohvFNIFo6XCnr%p^&`BWpVf~!zUs4ID^d^{6-EfzZ1zE#js3#ke< zkV-?ligi~SZh&x|25Z)p2;Ux-$a8X%aFnDZFrJ)X_{itrP(Mr;iVb$)ys`CUTc0B& zG16MrQ2YHYM`$eA^I((Odwvt(AU2O*JhcsK2is(H$+9y5ejxfF~t*KR$IC#{l(?av%ecsrJ4;PsP-m!~9 zEKizA0ZoW2nkEPY`8-xb)XOwa$Q`{8k&&BDcJg}x7!4JoW9C+a&YL@f!`|6pD{9g9 zscw8NJyAGS!1}G22IRbRTmVry@0`*5B^3|7b!uH5(+PgQE=-86@BDs)SWDx_&M~P# z9yNf(t@x1W)1eM-P}d!Z?A*C!P+^#NK=9mJ@K%*>v_{I>Co9U=--k_8VUw_V^Jr@G zXpbi|MC2FeUu9I{tr+ zH{Ur=pU$J(TsSu;n-z~YkZ0Xx=h2|khv2z9(ZTQi8vTAy8+Z1*P;mJ>XC40n%4FBS z{2Qe`_rKHq{{o750OsAK-_N28-z$CU0s`zNNUZDYCIYtVWU4KfKiEyII{VFe07e@` zK2Ds^w%naWe(R2X$LgDRa-b=DxtO=i?Jw+@x27fycoPFsko0Y6k)RvB%N+Lt##OF+ zuXWsu@;)^9M;!{ zX420>J{XZ`9tjrH>87OS(a(IosCRhSY9qty8Z{QTWXd1@x%cewr}f=E>=?ffe=E;W z!r|UJdb_f}y<6q0C9QT~uNWMrr-y4R`zu_Di>sP?%hY=Yq|(o+UiXTb{am7Qnv`i{ z3wM#9Kex_hIEO}2BdT;7(og9$iPJ2K9cHnIwEd_CTid&vE6)#YQDkifJG<+-Z%pUD zAE9MlY>k)F7*}pA>S)yIw$TQ%IvEl^aKv(eTfIX+n!cBVbY$lh{3}@70JPQZ&CTsC z?vP+o)t74vu|gFNg6~{HUJdR_OtOy*R#u;HucD`$_qobpGC0)i&RG;=j{Q9B-9N;o z=d_UB_uk6|vIv)d0-P$M#fi`h46nTQx4yNyvA$Q8Zn+l1xb3Y)5!9F#QKlW_+!19> znT{`xV-MaB%nXb>jd(e`#Q33ZMljYX)g>(9$k=4SV--BO=~?Tn{ibg^}?g69~qn z$sMUKUSFs2>!s{ECuXc>bGcZmn1;a`Gn}Eud83SxEA1Fgbn3osDDVjSvL`b`~4qfHOZk6*s zVEipaFK~3gp(5agU~6~#$rD8P&ywTgKsL9?qdVOylNTjcfbIANQBj}v(D(lOOH$x+ zc>U%6?#dzMs4B@PCS-%l!OAAQeozbt@cm+cn+P67X;@-2(z@)vB!%Q4jTe~+Xh{+H zvmC6hQgC&ZLZI@S+iRRT`#}7Y=POV5C{jX*+1bhB5Z2g#JZ0+pGe_&ka6K-=x|iC=(ncoIjW|+ z7?%TRtswj;ABqaXn#YSmo}6GTS^SvgK=%TareVZBTNhm60KRFG_!|L?mRDz17rg6d zG7Ba6-;xThVbk0X?l%ZH&c3a5408Xn4u)v#;{Ds+^3{VyXmhOl)U?)M#3}lr z@rhR;$#P@c*iN`c|65XZjNRC}9p5qsHSR1)h8nM*oR;VuAS5y89gRVVVrVCKD6YyW z+WVAUh3+Qg%XQs-Ns4w{!xC$|EkVucI_-TTZP@GD#z_!y76ojyeo4x4qR|pu_V#@e ztzXMQw!>YP5XVqoHCDfn!W#&!Qa>~vAcvZki&!ScYZDNXn78{ z$i}{XY!eXT7&kdOFO&D8lw)!VN~8)jWtgc$bqY${DZP8|cTi)rhi*;lTE@W_ZD2H3 zzmP)yBVrF<{BNWx&G1lfJkHBy;pZt$p33+X=BCPfU`Ny7S3T;{sn?4qPc~kz?=^#o z+u){|vS~(iaYG8{8_OhpBFu98Us-0ymeabDtxPObL0-vZ48(B6-L2}kF*DGWjPE(2 zK|vHTgDOeto6HxO9al}%tJg7-WJ_o~Fow!}@ZD#Xm&JpLb@Q>v_Dy2*L^3wqpe<@~ zb+@p{F|wKCAZK(E}U=Q)+BZ zUcaAIS5B?eGzHbvr`IqUVl(i_UGr+ZHq%skXx7IgMleoeZ{G?n`RPp&{$HmZbJO4G zVo8^0@_O5<=N{1CV_#mPpxt{^r)GBxk7tMI06DC zH(w=Y4N^=S(H2#dQ-^W7YnH0@`itsQZLoOC;e(JJtidPx1AaH&wz&47w)no{m=6_( zwkq_ppd3&{<(=x{(?w+H*TP!G)mhnE+>&ThVCE6*I3_349ic4-*t2*;2 zHD!vmlorC=`ix-V){J1`CX8U=8b+}2$6y2t|ECziLJl7n{%aY*!Y49;~(WCnn_Y^pa0)c^Q_J_MaLppttV zWeAI`X34-K>te3S_3lTu+Svm9(lGkdsAvsd2i)6O&``4P)tY)p&FZc3h3WIyIEQrJxKCj8tt})n0|{N* z$zTEu*|XmUjxH^?-c(UVi&5UMlC?y^NfcDp`2IwoG;k~HwU>q(FRmW`D|@zEi=ieRs2HaD5gGoW1P;7 z1O5Q{6;2WC)OonXv~5gAh{B8#Wk{iDq>!{+yWyABkwpnb37cN>`H$Z@rA#@vB{vva z-mgF(?3$F%KH=4-2R{Zev4S6FXHA`7e2{mOM&F;kdv89#VnhZ}piOFq_FjR5RB{^n z4fsngeY|n40mgZ-TL9oUn5OBBSfZ}luh2Jb7wW!oi+mYYQD|c0BnygjH3Pqr>DgUv zMX5AkN8UK3(Zd>vXc~tl?UH({MoA zu0fhDNzgApmCkV`Rlg{8)XyLy=wNCwZ;U|Przn!g>nzlw(EdMrU)&6V+*MOwS`Kfl5DfPeV_e)5s^`uRapgiX21QTBiNC^C!0s5UiIaY7+&rq-9FZE3)r*WRZ}`8hTDVl@{) z|E{wHdBU&T%b2LLq^%%#);)Olg3Ho_7p~&czbjr5rClE1u>4)MNfDqdR(}(HSDt;f z>X{Tm*HGClh_YJyUIBE>3n!kXmJc}eAPvDcmx>}!$*6YV4>D-%Yp)^n@fGE9c5iP> zyXt(mc7fe-QIV4JrsEXYl62CG?>IG5{mj@fHWKI_fANB)Zf8kGc+>DdOrH7;&wM=EBXIBos z3@GP*C|LbnhC0o?!g;xDUMgBhhLC(WeXY59?rRE_$t47%)ZlZ3&4BvKzx90u0*{N1 zM==i6f7@^Eug~t8`TO)z`dNAV3_r_r(jgx0izHLx=qPaX=J4QW79>`fh@>s#tt^qs z>eDe}^(R<5#>#zKJaz%`g3(pOi$qrnL9jT5Xv(6g3N3$`Xmz(rN+PdO{t+sET}90& z|LWrK>7D8}t_7d^{qMHBj=nw059X#Mi@j>a#CZBnK(|!hd)CN1>nN3Ilgvg>FXW`=7qM z&lk-9@bt;L-v8YA-8$X>-gxrt;r{0r`Sed;L8sDu_P1)GC=37J9Tc4Z%Qd5Iz3p)Rl_rL9Qf6@FePo5zFTqXX)`m^0|5r*c>g+(R8#g&AZ*JJsMafvjo3WZpz%!6u*lU=hamdVa+68*!cMR zN-xuMM_H4d=bQpE2dcD_j>@PRK}~}Q(bV#NTD7E@76I&CF`kez5kPF|2kL+Nh3+J;00nzGvrh&FPZI@t}I(uUT z85(-UIFIop>k!raL?+dbY$8Y~+;=%dK}@d*Be+K5bV=d?>IB9_lW>~zz}I7z z2ejwUX)-6Oh^`VjYw@YWtsT2$0{l$N(#}lc%15-GIOZRRGq@no1}f`SJ1&~i3_bnzO1;^pZ3b@0J zVCDpwV}!Fwe_rRsh?LCAvf-#ZlaI0gu5r9}S~qLhOkLGoA2Kmqsik zAkHM6zn51T&B}}x?hNI$6vy(*E3NR6^f;L_@IgAGjgQN!fl!z8k?xqG|`G2)kx-!TvCw` zev#!Cxko`jSEmffd{p9K0urob9x@xwEk+yCC9GQ-2#EG;mZh_7xEL@RB1CdIqXqzC z&0~xg&?v!*tUThw{e=Xu%w;7>H>?Xt{g*wr{p^F&~Ez zyFCgc$^mfj^9TtqUdM(u*T=nAr}T;o;_7y9ueY;J4+!}+8v!>|m6%d=u(O%fV>oEP za0U%d86_G@i2X@49Hqy0DDXP!=E;rdMrtVXA`3+el|M3uswX$77dChP(vje|6ayRv zE{<4dQS@0XxIPH>%=bW(OZ0<15{J5s6k2qhLe6PYd+&|r{^xAz2}j#xD1yA}Fk%^P z%99%F4TB&%@i z4LBnh!3Bmm)(RTrR1gI@W~>tCR8O+aXow%nos2+KD{=b!-9?jos{tHiqCgy23&F-UoaujhF>K`Q`@zB$kl%CLgu z_J>Xps1BV;q$_ypw*ya$%q9@?OJk~ZmSm?R%B$ugp$tqpTOoz6Wijh^OdEm<$;+R#-6mj=EO_tc zve4^kJXB+hEe|aENXy%j9K*=xoN~}LF5@jcM<6H%f|)=G&z9;49_IlbC?W%(VEuKS z&2(kOmT62F%tr`ke#;8jY+i_UewK@;lj;r%`DZJZUANQBZnD zFn$gjg=^_Zhg0W&0 z$B-(&2%O=~Zib9_>BkCBWGGIt(J2VVjP@N=lPzfE$B=tP_#0lpup| ztptbyypZ; zxv(v}29h~fQDvxcX>zIpjn_`e{jv$5u_>2SBkF*!cStHdtUk~gH;`L>?;2zL!6s{; zl-8ikEG9vgXp9jjjQoCP5N(P+FQqC&q6X0WO4DR?Ud)RMKF8PGVQy4V8+A$k=@`0P zuf9-;Dncd9x+?5mU{o`qDHn>$BOnG~XAU8Grn@9nhI5H@s)|HJQ#-TGsFJxLX(6f( z9?0fXx&=pf9U2&3pWy7!*)ucoXv)aVZPJh}SP=*g^4?xjrzVvLIvaFklO_>GZHC6^R zs8tf?gd_p+&G@mbd0n->QQ;O%kY!D|J3PTUc>_SpuHgwosd>~eq~BJEnY*BLSz5Gi-m8e%-)G#RoNRTfqtvGlZL1s;LGA8810ZfCx)5QH;14pe_`rArMaC z_N=0x3U`(XVkrJORCAYEM}hTBGjIw&6E#MTZPh%0rYYeE=YpP*S8izTP%{E>l?A-8LZVT4@dyfcBJKEqgp z23=kko1Uylp{?bG55pf&PLxStM=HN08&RS&r5=HauQ<3Kp_gwk@sQ#%>voa)VW+Ch z#zB9)Ncuq3Iyk|8s3obwJO;ya{nC0r-JO7445G;60V z=^-$-$#Y`S35kujZ4aXiOoTVB>ISHJ+$#O&d`&S{J?Slsvui4{YI|Z=D0X|5+9c#J z0&T&A4$S=(Fv`_VCWH?BB0xvedOD>USLG<0s6ousR;$%ohSYViW?)$X5K04y;C$!f&E zIV=FGzh<)rT_O@nMQ6w>lnl9`H5K*B&Yh|vrkna3VJr_oW zuAe)^Xz6IG1>wbtz$_(qVUC@=03>F6BV^kXb?=!>9mt@%+ti%OJ~EnnSP!R}bga9@ zXzsJ2QjSfGF({R4RgQ9Hl1Lq|pBTIW+}x?|ZpS7&-b8n0Gd`rdfOUW{6iAOyrq#Dd?U;ybx%HnO*QhtCI&1Em_iW953Ie06XW`cB&Dvwa$Tf(JC59lQZHp3QPL{6E$jb+P6<}xtPI4l zUDk#jr*4a!7FRzk6R{?^CaPFdU>WfB*QTxeG5sJX6Kxzzs&)k`-0%xdE~dF_C_ z@)0F7OeU!u7RdnyWQdHZ&-Ek!*v5?}Slpb=?|wBA{lO%%>aB!XzxMRlKlDsWbao5x z8BTo&P{L*@8RHGM2{)_kQZP$HJ;AjC<|k@zmb0-)m#h_6Kn@S!q9JB`{YBeI)+*2s z=_0K|*;rVYPcvYwba>A(NMD46d*AfIdhOq@-67I4(A{G1O_R5MPvuk zqCpPb|-)v5OE1BG;iy3pU(B=jRWy$SG1pl~J+;+| z;b6oGkQfMQ7PjP8x$&zcw<_b<$52oC)RTrfeK`||^q}Hq=})m$`s2dB8flhXE8?f( zo}tt~Ws^J&m@#j89@7lvol8!{*PyVhxqI47u@(PFNBH3AmyCCa5^TCk?ZmotPr}}a zmY-)6F?i#}L@d*GJF3R?NGfevBkE!*jjK~HQq)ak0)~)2L-s7iOFYWSoFL9vEZ%)% zfx}htbIeHE6Ao3Fh?NZr2e*v)DjTs*$i{_`tep=i5am`tu;SqK(QXpYF%0PkSpes0 zD6K@Q=JS9(^Csf=B<2Fct$La)l-_-%-E*G+nvpt((#8mnQ}w1{T2bofUwX1t+NbAn zNgWA&iLi2I>y?-A2)6;u(P1?fy8{scru#Cb;#1Ia)fD5LUQpVe#YN1BU029sPbSK* z>R$&?bIyd7fa?q}w6?O2MQ$5Nha?gwMwW9T($(Qlc7O~kn2tztV(31KNe-%11EU^4 zo@c|GT66LboFBQ_75zGK-WTwt8$qGaDJQ39y-FC#+=rf7PL~udcAoLS=w2Uv^I^#1 zA;Qej88COk9bO^mh%Q3fczQXZ`FaFn2)*+n)O{gY{t zEYdZCW-{jS;H{;6Y7Xs3&e zKR>?3`AOi&IFgtu&TFkVC@-FHL-rw9Ag z+vDz!r|3@&B^Vk9q&?!n^yWSKsfWffL&4<7sKPJYa@@pT#lzXG*z}K()q%d?JxC98y)UD3 z&_|c?8!r`z*~WBI*Fc9lWmtnKkJ?HjXuG;DTdwU2{SjU4ANKnMjqY^=6#t99Q0ZgJ zP=GNY@H;!FNZ3S;aSdS8KgD9}9q^?z)Fg{cqgNfBcWR8jT#^;r(y-De`|mSwlJeSljp)^X%dN_m`i4KR?A6x&OcM zWc|rgn*XQIo;~~BvvoXQfAZwX#>4&pFY$T260NKl7rw)+n%?WTM@D|gIR;sKu_w>T zTDqWJ3sos!{O26)=3ld`3HB1*%XCc2%1M z=5sIdwcnbpok4^d+wY@L_EX*vGlb@Wwt)|3skI2?+Ic=|%CE?nT{-s^zvH{-kfHcT z?%rr}v}$aJZ`rPK{U9Pm{I|xQkZ!I1H-1V~q6@>h{fm#XJJxaL2rVlnCAHHrEZf_D9zjZbH0hHLs zNrvum^qBrJ#t)zbn1mWTC7`IgUgS8lZ#f4fhOn2O&ld135?;Jo;l|Wf^o?d7U2@G` zEkzOEd>ODcnxmbdn>l=F|4iwoqb2^n>B)#cuU`FvKSTQSf&TyH7xP>)R1v-}|1w#M zmhcC44Myk+e|F`11us<&AWn{5AVHLpLPPvHUQEP-c)nm?HPG=PU-c8evNR_|`1m=W zgED4X8A!lEU2e%`IcmM;5CR`DAAD|^ro;*ru)^smn$`Tb{0ynx9zQnwly?k=;1eynpVro^&)=LL z(esV!^V9zEI=y&W^J0Tu{GRY(5?xFowo-_&cfCEnz3@r;Eg!t@^Xqq`i!J<&l-Sh_ zC?tNJg0~E@&(G=TF?&z^O|CZh*WvZf57*BodVdIKJ;LprvD1HL;F8OMd~$oin5$1S zV5yf2y)yVFUJdC7=V{I@bg;-cVm|ec(Qfh3Z_h4wCb2A;75sQNz?x~B{}i`ZjM5RN zi>0N9m70>pXe^2Rp=pf<^qtIdm|&_eY2B%r!4}*B%?pZJfvPRrDz_J#r4PfarFNSF zbg!;&QR6!PIi%y@3RT@hP0Kl4-YkV+LbSDwJ})XXL)TWf{MR-|W(CFv4~C|_2b_J3 z-k8$f?;pNCqXgIOAlQ>D#f5geNLB4OC_%WJt2x;BK=Z1C<^>o^-eRT}TSn5ZH2w)o zb*+6XY%GlgdhuphasBp+zeVyl(jg;am{5Fmp(b$db(*iQ1kWYCPN?>MCMHedm=r#< z#Lc|!eC1HlHZ7G()jd=>O6HV6Sjbke_+_i0+#ST)wCA`Qc__=~1=b+N6t?OX)7_d! zU>AG`>!Ky7#Ga_x)Y||I3HSoLVBp-?K>wW}I$+BISc-Yxk9xcE2-p_t#6i(-F`dCKA75I|{3U#56lb`qrGHC)P>bVPqAO6paDXJ3 z+u>AsDZdi<26~y6`B9e=yGZWgCvT22{`7hlvu#@bF)emAG|)+G*Q78yFjN5>lwsj8 zb_MlmUDD&C3uNsC2fBBg5NNCt)CJ53N*R5Pm=DG;PO9xo9{1=XlxZP@+#J(1VR8{j z`Qv@#s_qh_WaD^A-bPDmg?M>6gm`{KF=Avfas^Y%3TY2^P!whQi{r_^l&DBxW~1iQ zG|o)o{KRYQo|5Xa31FADOmsQ?6V*%{12A{c2wuc{f_<%hs8H*ir70gymaPS*i4Sb- zlxW!@%RfH_k(8__C`tX7RXxZyACmPaJPHtcF?hbc9uM|`UJRC{hCvw0S;LpKxFks% z)a7Bd)>IW-Tqy|*K5`ji)>E+iH%z#Su8S3s+FLDXcLZ+j9v+3U!NYdcT-bU_yD|%_ zTe)gM(J6@pXl6h-$tj=`Wss}XmIjt#L_uVO-2YJdC$WTg%nboC$a^hXdig= zHrZl82U+w^+oZ=BH6G1;{-S!&OtA=X7fQUe?&A<^d}>M;+;2pdrbQQGw~4ZZf(Nm> zHYt*|gMlRB{WdYA*tt+nxM|TeSD*WULR1VPWWM7i{5BYU!p+aqW{vFFIUqczQ*;SC zc!rN|Ir#9N0xv8nA7r{@GCi{RZ!Plt?K8Z$xt^ja5?~rs;WK_r5}Ob7$jNhibr62 z8;k!0t#jmx8)n?ie=QgzoHubUojExfy^qC$hM>W|y?L#@o`<+o`hko0i@CbO9S6`& z@j_bW)RoPh``C_Y!hgs0h8=Hx|JS2*t|`Fnf|n*p2XctZiM9;Hm=suBW8R>}H5)_| z)>iEhFggSly;s;-5%s(gIn03GJNG@j0n(s%#&`>NW1P9&(zl%V!JXue;&yGben?>E zo^oFrk3F~~OpemAA_wm)Z&5>*D1E89-b5{~JF2a_hq3BkqD^OTM3RK4&z^i$P_g`A zhpD4;Gc^VUHo5*T+6?Bct$$L-Voo)=)*trn_FBt5d5-C4^qW8vyJ(Z{eIFh;pUfD! z?n)+&hC|tgaT0%_t!D6H)!@{bZz?o!Zgt2R$$`*AGy_|h)(jo2mb1VS+sz(b5$pp*b6?J%&PE$%yU_vy}SYisv;b=Wx?PXCyr z_jfb~nDzTCIis8OYgYawOj^=&nNl?5qdCMg;bG*bj~*>{g^<8b|E>~f2qmyMC4=Gz zzBI?n`hW%~FCa|b3t~QtAGiS$80KE{a$sE7;!c*>`YlSaC*r$9|L*o({=g z?{3y8_t8uPtcAIIzFEkfo$+9RaZ93O6y9X0RyJTE@^9328A6ZW2+l4|F3N*d^JQjt zx2_6mrQs&j7*Orrd^si9b(T>D$Dq#zQM1TXEqbY;s{N%`pZZr*VbYlR2NWA8FiA(I z2tuSYM{|6~`bLyQYIkB(bJ6hxWhZd~mn8U0SHw)?vguJR*)vxgjUZ^ z`88|mc0pq#Jd76$n!z=z3=M`)88as{1~`vNGA{n!mJIA+T2(983ezruRHzgBtj%>n ztddxB5Fo4D=BE+w@Fit9J?7QFbU}$2LW#ZeRPzq1P9eYr7PPxfh3lRgyMTbRWeYxt z+16xi&Ffr5$(P{lJ|}7aM?TqdMXYH=RuGPR=-1B_G=f{@q5Tl}xlqXd2RBzcSgXSC zldPg{RoID6wQ32BD7XZClgn88&jNU-gK!~^ynw&@7rx|?0Wlwd_#PtaM@+y^0*zX5^R*Ie*aQngZ()fFV<|IPXHymg%<;Vtk9MfKwmq5{*wA;Lp6V-iR;q{zlFPP39QWAU zW%K^E$ASPNnQ=Q1&=dQLfkyXUqaC3`IB$zPx4$t zDe+VO{7B|apZ=4TaK6Y>mOG-Tynne_1g@g2hox1;8rv$h=0i*as!z|F#l3k)S5XMk zR?Yliz%lMFeZ#d-U@zFNgu}Xn`+_^%jmA#a;#ZT0!_X?3cpdZyCA~N~3z@&2+@Sro z(6Zjuh85ZfyAXJ!>9GCV&XBednkHUW=+-U3%7pKeV8oDqkV^U)JYfPFGI)0_C3ggy z8O@wAu;qT@P~0ys*n5<-8yiX~eQOrS(a&JNa8_ax$f_T~NH$a?raP+5=D-Vin&aM3 z({l<*tuPq{(DZpfqSZB(%aMqlxXjUidiBZ`VeD5#>sQd-Qzh)emNZmmF&GA~gY(;F zr8`{hB+%4=Rbx&Kb51Hb_$s{e3Gm8YNhr^?sp+xkh%r0W3L+@ut3D=c%eS=X6-z#eG z(3|$YObAeJ`LpH1D7fLrcj%BFN)bLPYK|%+T2%8~YOG1k(F3WYz+w1VGn<$zrLbl7 zzc0D=S-^4yUSNP7!~a_Zfh2uJ?lc=rRIC5X=|{w^D2Jd*By@o*bcSexje+(HQ8<#F z*9}uuVg|l()$R)!Y8tZABb>0uKEV6 zDn@DQ*qYf>&(*O6{$8Z%y*iewiZ`4)Vp9QA+vLyC;Y4=SF_L%~NH|KaEB9H+9F4^1 z#;bffv-dS=gfAgw_X z--X;@e=NfT_PgavwWjuD5%eb0?Z2;|#FzX)%uv{0vkETKp}Df!{S+B?UO{TwUh ziF%dy%~|~Qix9fmo^@G|#6|o#wX3&i@6X%&+}z%M0Nv;uF^80xyU#?uJG5dZf-dV( z%;f$1x8`cF!OKukBTUk>a=P!KIJ!ywV{}4Tk)i$e;MZmzm9&GN9w{~&-N7KpowO-IeM+W|Cif3OE1ZB5J9CLfh~3| zsl<2{q6zW1vHr--VJVV71F7YT_$I*GoRt~7FynSdS^3ZQmEd8gTwdN;$EgGch#fsz z+B_(ieAA^rH@NHk)hnVgST1H>a@b8|dep&;3 zk|30DAGnYWf$wj`{Bm48fCW5q;99<|ufkctUO@k=n2YBq5juv8FzkcTj{zb*)3A!qHvoJM@MeRnKywvv z%( zR;(cOS+hiWbr;7?ya;3ZL{6&=wu}mR)I~4_aN)~;b+lt@IJh4fER87s=RRT2^+Wsh z>FGhM4MdxNYBaMD5|#&?)K(DYS%bsB9C#_fH|;#Hn_d5;LuHfwcVd;2d5}n!tKsc(nGrT3a(p zy6zM4L**JH0F`5k=kRNn_@f~XD&M$wF$_&K`p9?>FXa52RQuz~?IFG)+F zNz%lxiy%1b-|+1Y1f#j;_}>tC@?SY}nQ5m97DfkhJ^37}aE*xA`o%5sUXUDe*qHnz zGetL+l{>C~ls8bx_|_rI5xsBIvmkeNWyj9Bg!Q)&&p6S}2X%QrR>=ip!Yuc0(iRe< zIOK?N$jJH-^=UK@yoWrkuvbXw!P?$98kj)-h9Q9oWCHN}i*$2~g4!=`*@a9TuEzr* zyW`Oo8+J zE{l46L@eYyMH7U+!??1t0;0$==fw{Dp>g{W;dcWacmhTd6NmDq)E7q@3OiVO)@*xdn&E#z6g+lDEXphwSNe97k zh5@<5xXP>D)7G`8vHa%UBZn-O3iH6udCRK=(ui9owSayoZ9$uvM|s3M339R3oGYSy z3NkSk_B!i_69uM?o_vjtrJosmH;;j+{mzF}HV96@RmbtSGC{+D`5=`qsyq*|(RHu} zi*}tVa}2xH;W4#o?1aRiOe!8zClxWizFHDvPnBG%u1V7ijI%;mUMzRQGGTb@r65|_ zr9ELl_nN zZg<~PI)y37AgZ3thTceZEa`r+HpIN#->-dM=Lk&x0}l-QLTQn8QH4W-(H5Bj1-jMgrL8x)c#Z38X~ZsFOMe8x`Oo82 z-_wb+`PjEW^f-9GN5SD4lA@O4jp<_u-lrGrI{Bed2XNEBcTJ+ENJI>%=O6L@We_BD z2Sp?h#D%+)TE#w$9PQdiO2~HTs=WxQmFoV5ealhxi_gHbQR_**RFrDns;Ck9Ze6XK+w)CC_yiy7a#nUc8=gfc1j9A|*Z1)7v~S z}JDQg?m}{cU;7)R9oT+Ot2INO!-K(NU(U<`HremdUkB`K>6e%>hg4i>h^O^ ziUTuFrPTD+>RCzZJa!qD#%;TK@&0#{c2&cuD5oM2#rcBgMLz(hx0U9G_Yst)j(Ee4(r%zfyE#TW*D$XgY$ zWAMASEIQJeF0_*y_-2zlbqqOJMK?(px^3+9kKe14EL#`<<(q@YUEgITId2{!mnS7* z)=6**NWYhdw?LWbOt`yQs=cj^PxQuvL!5}Nnyzi#Gh-sa~nhTk`=N_ zGuV5NOu~=~Pl6mCuj##+=7GrOPy-Ann$VxDyHQPj zr#hWvd3eR|{X|jbq0{7SE1K_?U$D-Mjdc!lK zAzSZQ^ET%m+<3b3WpQ8%CBC91j*DQPo+YdVg<@b@S_RwH9U4plmJD)^cKA8pqZgM{ zHG6w|MI0_j7r~AdkoSwYp;lZrYWIOY@`hulP733#3oa3#7hdH-Zp=_;Ezim^=q1RKp3KYw7 znj|ZyeE$74JJY;JWqqT^enJRn?{4?&3UGG!eZOp(7j~qn8S`@C+#t5kEmpn*Vj9`A zyUYLa+~oW1tOOB`kYi~GAB(ma-}zlU5bD2*MBJ7#F^pVil+TBNtw5csYqpxCjTk z>K?yBz>2PAnuWT04ZzP)X;{HKu;mSN8!PpgCO<(z(fAMfrMg@ROXO+|+`!QF@8J@p zfDBzA2PO$NO+(oY9J_0(Z*MP6qt1p^Qn^|-%jcL>ia!FS{3JDi35YkZ3}rtEi(;h6 z5bKflc~Ze$XI8X^5>gh7sx9d?JH3vu<{wL zoYoZWsB*>6;i$IU2$$3unHa34IV9GlNK~{>d94hjaWjNzB0AhN&9N2*LUp5Gi7h9t zKZiU8m{f%r&*BdnsZ$rtlG&3`56bZubY@n|;6?rHM7a$9HBgB|pKZLL`y1BVtL6zy zw(vJIJEJ7Isb~)coO+j`4=GW;FOjFe1JQUD4@znwq*&V2R|vNfelyH}wVHSERSGZ; z=x{cJZxD^OUDh{PURkz&C43L#O6inM!7jRUgP1v3DJk%rZugJ%#meKuc1K2#y!3bT zMkbV`sK*j2>JRIqmiKvL@4f%Tl(uWz<}4T^2`js-;r@AV@h%Jp%5B#%h9+fQD)&4{ zM)*Dw1QW@cW7KTUp9s(5ofA&@W%13aN=vgfR$p`?Tq|sxfWZK7fKE3RpsGnU5R;@u z4=}>ii)fFNbDJg6Gat?%w_lf!K$u14cx0Vn?Rm^ zN!68ayrr<&+R>e}HY4ky6V?PGWx^)a;kU9+ZYJwzxvg`x!i43E6Un1}1?D(aROT&1 z=<>ZS5Y`CJHMk*yUS?-CES3;NEMHhkl>yH>J@p+-{?kyG#L-YT2*pu+Iu9l3Z?R}8 zYb2Nb!H^MAX-f6e|F`p4zu>Utq`*!zz<$;J0Ar)UU+=y${?=%?%{TM$KIkGlH$zjB#ZlusKaIN%C)diHu_N{2wwREfY^m_o?tC(SO_iws{Y6z_81LahSL@{*|6QC7CP7-j$;( zNF3CX=->638R`P~#mUV5`zqy})?my=j|HZ=4}G-&+3+%mIM~HsK73e_tCJOzk2&f} zsN2;0@KhGELzA)?Qdr~fF{V`GmqgSkO4E64{i2y%e7yO?kI~&xAq&9sS;`aahzQ?W z@TsBUqY~a9H8x%Gc%KaRl!wqw~T<@DmBu)D2V70(|q)Rj+AKi0vi4gC{G*DCy zV#Y96zLRhY{sfWg-wa@#8z_yc#e`!{OCKk@h^jqT7s(D09J~_pRi9cP*ACMrBUYRE zhBOMzRk8J%HUc6C#+XgvPU-3_lOE5y?;?M+DyDk;aekOxPtujCC6mVOdVkiR(D@fP z6RDUTL(Js)S+hW-gk*P{v((!b)@?IxsJ8X)Kc=988E)_XB!M}4;>>1qFP zoR#YG46t(dktp<%$J%r+Z%I^C<}+wnwDQo;-SyjVnR|~MIE=J3(lZ$i%I$}2;{-~f zn{Kkl?Y{;?%*a`W~@c+t8*%oWJ*b9hmX4Wbz4=us` z^T}0WOl6tI&^BAY1?7|}gar0+d?F?dNhyL`1S^hEq^O*fjJC*({(C$4NimQ1Vk(VD zb^`}@4xhL4OY+I#10@;)A(}t#ODDPTuD)byiw<6J@s5v49^P%smb#BHjvtI~LLs>s z=s4n&I`q%9KWGX54$4yKwar(U;e{ZjBr@ePT_nk@=|X?-vC=>I^oRQt`~*#2G(;}< z?Wn-ABx~!AC&Z-9l&2Viz8U|R4H0+>&M6C9Y0~hz^K8LX=b4*SrKc8xbV)vkG=W6s zg4<5G7Lk+()2j>61qf5%@*FRd_s&R4IuZXXvHfI4^E0OJDOsufVQ^HugH*}*L#tEd zy4$)dC6~eTu!+L?czPh1w;#Y(LiVGgMyfYbFkUSbLO|PauiM>Lpe%?$hZrXD{0%H3 zk7;872F#cu?lrE1-fKs8W3K;p3yTu)$@>GKa9yV9oPBrLvulm{1?>5CM+5pE0R|s{ z`fq^7FMtLBm>&cPY`O1bec#i@0_0hjAh~RyJPrF{rH~V5>RR3PpggbIaHpSt2YuP%l<;Kr{9WWbDGN8&`Gdr0a;|hi_^SJ-Fnu;iA~x9dyXp4(+8j?M6m%Tl zd&8nVbOHQZLf%v!h2PgaFpzQLg_N8oiZt$Q2yag!M>k>$hTKZ|)9RVqH6zk70N_1U zo5z$XzGe|A#y`~*E1lOr{^uYl)bC2>;1*`l2r12-Bj}U_<6A^yX*gx>A?6R`Uhh+k zIJKIKmggT@=e7BTm);E^YB^%ni|ImVM*&gVe+b3|GpAt^rpHIpOLYoAmoGiEJl#)2~AbJnM)F*|NG zM_M6F;G&)goEw938A>g_`5=n!oe-|8SNoAlC z62uFQ@$@0wv8p8LS0kJM!!`Mk+}+{yNn(&-7>0z466DGiiEl86BH(L>bt4e|JF63s zm7oz2*m@^E=SnyH7MgeaWez(*jXhe<7j(N^U&se(YJ%SDT)4=D&0FNTQ1Du|S;H$K zkVE-aTHxuML6t#|T+BtarXq=Mky5H+5 zcIb;<7T@aoq5{SEP4o}*;5SuhIB%9DAqceV_ zKc)RtJ0%CNfCf#fnXD$#C!cZi=}ks~cROZM`AnH6HG8E>A{G=~yR9x|w(1K5_-JZT z9qp)kg>=eEqupawKM)X>1$Qod`#eTc=6(|W^^7mq*%MjS=S4`!Xhb~`3qnc8OJ|3l83Fbw0vhGXDpB>`} zozM&#OOX_L><4tQu+AqZDkA6bmx0|Wo?j}IpbwAD5-T%A( z`rq`gmTBjxOlUiTk(9kl1T8sx+`M@57G!LlsTe|O( zCyGuQk=sR9r7C6B5Y4g?`o|3rQaJcK-Q3*mRI5VxV!A>2t!!uac=7Md?okNf+*o5{ z{Ke6QN$d<#6^l`Jg=NFmQ&`BI7T=66^Ix-Am#uCElPuUzBOcIjo&G3T74y7Bw44Ab zZDngZOL)-(-V|Ihj$$wJ1W_?JIEN58VoZle7S=0>}XM$AGl&{$zlF#0P+&{D<=$$b=gHM340%C6_O0 zCWy9(;>KVzz_<14X)=&PSHH+Z^93&{C2LK`m2q0$7{(kYN~1EONiP%x4Ub=A9_c)Y zE3WiZX*5I^zdJO(`=am~ixQPiLduw9Cnq7oIlll+ICqlZCAJ}Pv7Ip=UqUNl##MhV&MAUF*m2? z@hYMyzuBq)I69ee;oY!%x4yYs@K^%|jZW2U9+qxOr5za5yvKW;!(^1sTydo_No#C1 z0WG+YHlgYtHN$Y7NxMq6Wp8Y5d028Sfo{=2vPtw9DFX-UaB`2#4-d9`&!{s*+Q}SB zo3oL$Pmh1#C41Svw@J;-iwxTI7x&l!JE#3T_0AU_IMDfi(&M$5Y7#l7u74LnQ&CD5 z`1&qZ<@?;Df0WU>YKK zSo7lCoWz^hQDF0lMEc!@9iTrIg@QUg1^EJ27MwgQff5Sn*Hyp^-o4LHc49{ zEu|H9tz5QNXRUPRHcqJvT4@TYDtK98#{*`LJ&6e7BMdWoYCMg0ciJayDF-3DalF2X zcZU)`w(+}A-$F#-cG$+*UNxm1ai4!Pmk0^x&837D81@-Eq5UTBi+xbwB_l%d@gOER zvj*PoD82c_DIr8J3Y!>b8+WS3a9+NJfCwEFM)Q27qn?(M!Ne@ZkB0=d~FnJ??2%-OzsU8i>efjk2?N%mf7d3j zy&yQz@A2p!C6FEz4shKT>@84OV9%r41W7&MA(kN&ft#G#r*camEEZk<5z6ZmuL+j% z-9L3!$m+a2>Wx4beiuOyB`3C)yU0#`i+Kr96p8tKL>dv_k(77a45+NclLac_d6RbX z0{tNjb36i-X6?cM0<8VqJ^#MFu6f+xp99=C5!=*1`?uan>z!)6{M|o?H+CO7eU1}e zZ8qBHJ}zRK%ORg%``7vk@ZOI*w@x74JD>Kb8v1!(81~#wa0eguu#6ubq6zklRnjmQ z1gA5MGW5!ih31}d7u^i<#wW!cP?GHfBGl1p?APwkW0@ObP z`YnC{zK{jCa77b=@n@G?PwCqcJSn$46`#1OV1VTOm~%uVq#%N4)2Mt(P#;GP8Wf;O6p$<5mJdZOsXY)`UK`7+V)|5zlGU)}nbstfmSvfQ&^8m` zL!eyYLd9Uq_IUXZ5O21GEdkzOgKrlKkeJWCF0aogDVX!pFQM>i+Ly8wdrF_%wiv}R zWef$-%?}xF`&3oovsUkTj3d! z&HOHbc29_9ay~ml9ObRQswH)ujpOqitl1$8@g`UXvp^6+Qc!3FYjn=&Nm?d-DZ+&m z<*t)w7YUGGn!{nRBxxG|j)lK8in6C(B0m?8UdY@BU(^Sb%BrN5c3oDpU6tKOXCUXF zp<-7Omk(UJ}GBIYlA&c=V5hf~TWo-U}s^J=N=WY<*9&fheB-`4yjf-$f!Htq1U z&#DdEctArE)+fOisyUw8_J_{oa8c1pQsmR{nw0~3- zkTdHp3_ngZ$ic8<;f&?tx&xS5I*bI9;(HCT#d9Foq#%e5D~95foHU!y3JT#6-~C-! zEnQX@5g6h6kn7kTvf_$x_OQA_;izT?+*#(^ z-(diNZs>mkJbwP!ECZUKBPxOL?{DRRC+%fG2ip(eC-~RF;_7!!8sLGO&p^DNXw>cE z>iKwBk3WL`xkxAp7=b;=1B31Hw$-0t;sHRo3b#1d2k8CsVBqyH(mwql8;&NDkirpl zpr$e_MKH@e(4o(_?SDJVaj5nosSrx=N#pqG4vUkq=Qwcs_23XWwr`PB)3uH0qKXZa zcBJ8btFIyV9FFn&-gj10b*&6|Kzx6#03h9yw+aF5zYI$OU%%3T02)G>0wi;zhb)BZ ziLNIGrQXNvr3IwNtAz41%u}_#!)bTT{pt5dT zZ%6mfL$3v=j~6WJ=Uzete&CF!?=#dV=5M{7o6l>3bU^jZSKA>#;NR|td$}dx$KD4W z5MTz-+X&Ej-AnuNFa!M19s;h~sviIbx^IlYQdmuSGKt7&f%lR&*)iON7g{_2PW9-D zVfe{iu;2yIMJ!}nklerU{899uS-hc>p6IfGu2u$em2-?nFo6m%c)oaO>(FRo&&<}X z!nb|L^r(q&xQB3{JF-_79RJ?z=vt~42;`AL6itd35Ykibqm?D3)ErEmtza%4j6fLq zeQ?1aUgI1g*TInH9OxakifLAY@K|Y|879e)7YCQZTUwZ zU5$hh_k=Wf2w!F@r^E{h=t9eI4!p)tb6Tz-@)zoa>`y(QiBVodxd$hKRX=SBpJXaA z`d1Fu;jt84c!mHaU?6e9U7tQpl?m;6R$q=TK3gwqRECx+Jr01lvk_a%lK#C9Cv^LI zRA#?h=Jt1opS_iMJIVbt!jmH!i(apDZWjPx(U(XTQw9kcHRwQn>eI(kXKNo&%wfNF==A_A3w zjXd*T4wk}wPK+AdOyjVO#!zaJ`sFytT)IL*GDKmXd?+*4U;Z{O4NMNq)2zU$4~zu9 z{csKkj_urrNk(pqLYiaU?;;PnVWFA@RLz_@?!;wnv`%x59yAJyp9X&X8NL{PQhq#m z!yn00GDc$e8>gDwS72|X^Of+ijE)K;?u95Vt8e!9BH7)ye#2;18*guE#W5ZNzb?uu z95F3Y{%=BbLlsK1G&(?;-zLp#C6c1oM?sBezbw+4bv@h=ZiBSt)&hMvJ2jkCtqOWR z(WWI#!O@ec>KHXTY&vw-WfHBq9_;FV6;QZ!X~{C9Y3OF4V(0}3Qvasmk@F71;cDs9 zlj}@PVKBo&(_wTHM8(<-+tydK(YO@`=WwXKwOP+xGp&6G>*C0cVK?uJENZY~Wc~6t zL@a&`H;U>+Z2)AAlhAdb&^Ha8^)jxe0O`7RK$}OS$MeF6Y_a9Q-Ol--_wvYl-H091 zmYNdM(g_tQZY5Ubg4=}$fBzXct4@Jv=ivhX+$!iidA}d-Zs(K+Fq=UQS4L?L{)y>?U-t@#55-&y) zmqKv}R#2LxixOKk9463u1DZZVQ@Ys+dtK)j&|YPPp&B zcO@wTsT40x!g1mgeqSGQwsp;gK@q-Ze$7ZUm8gqza{5tdf5IHBK8Y| zKR7~R@t5>LNvq1ay#K|D!-CVv)n&pz0t>vH19i{7j9oe?U9+(Vj>8Z;h*g!N&?8_! z7++W~-jgHxBHj8+5(^URbe_fgd=Af~GxxAn{wT+v3vp-A*Jlc*>>2nk1VLo3;}Nb> z@mrT!U4&Y5-v00?S8?6CN0XUxPM>MH=!l0W6yQD$mo$ak(<<(##?``yZq*I}Y1@X)t|q*b zbZDZ*MboIJTK;^0?4?vNgXMeDN@OPxgh|v^m2yPyT^&}Vr`Ww|viid)5C0)LQ5U*# zhI&H+M`?TzVw1q)8-`bDn=HF&NA|AAqT&MPaDhIw4Kk-64li4IjxB-go9Vr*axBBu zX|m!zz$WqY-DTIAvf0r}FqQEfyK16az)H1mJ9+GIyHl@?$S}Duo5RfT5oWS8_0ZD!$ts^btlN!$e@V8 z%mwgr^4Psg>r3oy&z|Zx4gm)ygGnth7ARif$LrkTT-ta*m*S?6^r-*W1yMHIfDfL0 zWFlTUa6gYoPy3GXFiQQQP$c4o4_W;utl>FU%TjlA4l=)+dSc>M4 zwj6M86}5@c#@F_mmqL35Hh5&LBj_Rs)e&?+xwzL)KBUDhI$IS@re4n|*at_|RvwS>02W<&kp z*#x@+sNJOU)J2`L^*>jQrKizeOznAdKAsat)Y%;SKy_mZ*Zf73C5Mbv9G&n6iOI~Y zxW@#_lEC=dkJHLGlR?5!p!diICKRC`lX9PUm^g3^I+u z?{ZE%4n0@#(aRSWL_ExtqTCW4$6jqW1Q!gb5!` zC0hNz8kR=Qujn?pPnA|7b329#BfGQfZ18%_1NaMK_g>fBN|@5ZIT3&A2%C!d4b1B^0$d4X3jmM{6Zq za<5CA%E2b7!9c|0y!$AXw?BL6yyCe{S4E95_0vB3XVU~2~5YKE?Y(MwB`tS*1jrI`kfZ1l^w?nE4}}NHRfR;zEqT%+O%6k~dO--@qv$Ic4>Yo@ z+w8iS9(qdcr^Bp=fHZx&wlXEE{;rYp3zrjv%H1lOrh%{O%B3oDZl0Z}UK&xRl{KB2Gi@;4>W|Lte9SeSk zE@=v43dr0N_D<2!10ko8rgXKLQ|rPs(c6s$GG1>KO3x7KSVw9y9VsH3uiM5D6mKJ` z0}g}rm#fyi#S40`@^B4o1uhq)7FxNzQ>=At2cWgTK)VFGyiRr!>M__n4lNZ34#PTF zb*Up{BZj-K(xw)by;hDa7-k7fc01)PS{+yGE4GaLN9m6CxAo7hW7M{G%dph4);%@S ztz-uqK*2YUbL!`ro2${v`RNtzqsePxUAj7RWLKzNCKs;Su|Dgx#T*k}VbN8_c9S=t zzbKm#xQUE=^c9=_S#a2v+V%nue=whMr@7)gXK%gObkeSATq!@c*Al#@Z{~uhZ&H!VH;M%p zuu4tA<;+E4&qp&w=!ZV#me1Veo|3-jooQ|GO^#8>43Y`|BLYeA28pdjvw0maQoEG2 zhgumKzkwUQZ3m2}I88G_e2VaMKwB014j9nV1(8(EwH;h8to^`PotV$XpEfQo)9oh? zmmKUMjlR;&^4D}`H&t}@a{2@`>PGqm?j#`grL8rCug0~F=9@%!;Kwu${n4^;%i>y_ zWQQ}4h@Tlix%?=~4gcQ9Jd5hn{)vMPNVD!Ibh(E)o;DHpUxsc*uq06Uw;6mB16nun zd7L&Mh2|BJ1gaZW9Mh9qFS!hlK61tI=RAqYmA?HkV9OJf=3~K~CTD8PKjqni--=!FoQiL>k zEFfi4-kcjPj-z*{{!8cM2t0yU z+K&Nt{D(vVO3;XH-K#qgD%68@dz~3eFQ-)^_{S4TA&&T)Vk`ETi)nU67p<;u%-wwF z?qjGaRxvJ$bZ_kU^c$}}$xr#oONGqN1}|eq^idIFEdjNvLK*r~(zlo1SY~H6)jm$g z5j#JxAy9Os8%Y9~-CCL#9o*PxA+A38R75cxt^{LZOpf1ZujcdBJpLiORR8`XjjPR8 zM1^*>9h##f;?{R5j7YwR^6wNTr6GZT*wePx=QrLIx!EC|$3cIdpj4?skgjEU2itnF zQ1PD5#-b;W>hu)dN{h~S{`%V*VI5%|E)hC+Z@P-oo_=M^H>&EB6tW+8cJN<{e%RDc zzTNc3yn$71RRhmjJmk?FwSMdH>frI6ULunS@EG>97_E@lm#2=Ocq{1v~D%n%0Tu|rE?~WX(%9NO^74De5(d4 zk{t*t+j`(OD_Rkx_)!GvN#!7$mB=p5i=m2-9-n<_M`>YHlX1Q|6w~g?!aeVkn4e8GMoAd1HwmIyX$tWa&C+iT4j6|PD>4=!Y9_nJnI|eIqaLF3Nk1Yjx0kNRs0JlRnrLmyG#zeO zgh)#-wGaGtVkNLsd^LC=%#zDY_VxoQ`+Uqa`BP?7u&Db~nPMPrt8@SNCP%^Y>|Q!u z(&P^Nwq0sY*YlG|phCf2!baYCl`ExY?r%-(AjsK!<5e9tJHhd)%SqJB{S)}7v!@a| zQQcrPsp*Ojwii5e_(ll;#@}{{&UJtjbSn1lEvP+uBQMa)nC#qC1zR6DyOZj_^jDOC zIYK(#%kRacP|SQXp5b}|;jXqbGEc?rIL>*%w~e~@szL_4Pr_h5Pd#GG0`I1yB7^gT zL*_&uuuAhY?3}$PZUN<`U3t=D_av!z19m)#n}3 z0-L`?er=cUoyk7OTqAYgp=N-`i@~SxfP<`yYQ>v+R6hxQJ6`!OeW$*z; zIG)T_z2G=?N1O69#iJo9DjgR_?%<7daoVAGONkUy4c&|?o-@$l9MF6C-xsL$iMzI; zlFVioW2PjpD8Ap6<;{zf82PHmN2(Evm{bnLtqNupzkE3ccYM+RB;!U=cOw4mv^V(GXNI=J2lV z!f;xs>;rCNQVK?_FcOw;#hX|jnHdC(aJ3Z8252*lLElQlT|FC+p6~c1<{gz!Pt-0uH<;Qgb5l&TtRcoYGF{xPYA+I=}y@o7wgjMJ6l25Qa z?`C(D{BOXcw4P={$4|+w3+lMAZ15l|Mq&_OlxzQV948`_F(3K`7eLi(-@!ta{(ylDm^u;C> z>&T&&eihqkW~<*dMTdkR3xf-RqBy z5GEy`Pp!^u^wou63yGP(;3&?k2+RA)?DQA6v+Z8BOFPC;0xV36&)N6U~X#!a`y zb7HczSDXpKzp{Zz*HUL`BI=-_byxH!>INdB_-)UnSyBG{`>7Vz_umcGiZf0X*@n(I zmTI?domzR3e6IAme{ggg^ePS2(<}ex-JPF8uxSD%~m|5@*vB(Ph{|Gjk|&OSE(_k$JxU-|$1FMD6#nAVN-`*+T#P$(O~ z!C*TtZJ>1RV3M%$+uBZ=-8dx#u+0W@SPpKSZF4{S{msmoBb_6#lRC}4&$G^M@sTtd zNh4`A8jVIb_CGiFKR5P2H}*gO1@=G5vTIF!j@<`rdpH3Vzt`r)=AM19_Oge*6}h|! z66y8UF%(+}KuN-b-J;XUGV4xH5TdMwy}@A0>YqZ5zxN>66#}XAI=}5~5)iXYG}SwG zz^0|))6JlGOq^kYZx7njM`WMWRgX=!{4&R_KBPD;qGYT+2jz6ny}8*`+s<&ziNKM* zm}rU=ZB0GQ6}BGc^Nl?~cF)#>GNcrZcj8*P3P!DIqSexfN`y_?arbOE`Y2^Lw7NbR zliVoSDR^5{RGRr%Q)jCJJ}M?;FJ)-<4oWMjW!V%nl!lT{+cdX9Uq(4D%2Liz{KT&) z-za{*SpKIN7XH7H{J#eE&;6|YzqWe+M*hE%|8L~~8~Oi6{=bp`{|n@QQH2BDzIgnN zgb(Yh_Tro76h9-Ld}pX+>asm`$YeSsi!yS8aoM(jjq0C{!gp{cGUxuM%GH8*G&&7Y zen*^Mq-@ja%~wujiJw|J9>hM!aA5A?k;UVWV9Hc*Z~;90+J$4e&u6h_$?QUwp7Zu0 z(>InHg_h`qk@gN5IOd>+k-iz;}18OkpM+!I38ov@4vBi}l+bBmphNraadMv7U z1t3Sq4=V1rnlC$#U%<^p`=2eyvg-EnawrCS-#Mk-i*$1lrQs%YOw%~hwuOC6Gh(z- z$@-pk_|x96D66>k;NjBh%G&+%{U7)*Z~@UMoYAb{+YH)h!XW?Bh+ywfTtznRS+tfG zw%*JN5xg%9$GpI$Gm|6tB73+Y41z#S!)<;;VDHcau00iz*luUs^N5mCvhHrIh7)H; zWx>_R4?{_?nlIWI=b2 zk0XE;)n^)a54dsn>IJ;3>uD1s`z#Mx4Ncc<>AosN*^6T$rS zlUYjv&O$azzUZykj%o9ilL0$;#C7mdrd*5!!*_sSN~1%vJ0UTI2LPC<42BSH+A~=v zTxEA#jnVEiBSh#{RE>SNw&+OgK+edxFMZB4C)57nzUFbgckl}*Q7l|uuqnkD)}$(* zMCaU`eu_~u;}wHW;y7Ye{hT($=a{DGxQ`PoS^UjwvE>wezD7AgoA+b9A@X`{MeTqh zh&iysFH&yJ0rD+4)vUSJ5hf>&uA@`T22^qS5m9x;aLMszEkTicxf(m!?`ki%S5)AxR|4128D<-wvzcvNxaU|I*_ z45x}g-qf7(K0w?Chh^R&>Vp!B0-99HA8hLbC)gGe82 zPvXO|^&gJw5tS59EjH!g4DbgGPaeRuJ=O=2=J818kxi7J;;vJxKp8)D#Z~xU7?08KO)9al{IWE}Ey6IVRXgnDLN z=U~LK!<^4;|J>%^9!4A7$1kbFpM=x4?VK{rz%P4`&l^(Oa&_8SR_|g%acwN)3@u`) zbEk*DF+n^JZ_<;VN6&?RdHhk3IN$f);ktDz+Y+xKUOO@`+yO@VCo|hE=eTTn&^69s z>Zedj{HTI&vK%7awVE1E+$*^Wmb*@d+YMczuDKd2)nr8+Ox-mRi^bTW@Viv1L0KoW zQ%b-4m-7bWbuRR8K#_2kT3S5=-U6_c&)UB#^EWb|u3z=P!UDID8i#3;yMi|?<}VkQK5poZ z1h2ncaIf#Z_S+qhD%!B^kEee(UB63}Wu(-OA3dAWqjJE+hXDF$s+o}Lz0Y$|5Op?T~d;1)v18G>8^Vc}o6nR2v~kY=F)MdpNSZD`B_E~FVv$fv=H#K)HZ>5kn-d*aDXZyt# zn9~M4~0fN^!-anouv52vR5O)&J&qq^h+HPh3nsnJk^5D640o zguiGe6RJbiC=-~s$F=v1> zP)=wj!Uyytz6j#W6|1GJ9J1!QRVb#$c9sh9@N}c+oF6TGTVfxqCY;)naU7KTQ_Xq~ zv30w|;d^W6aDkA1YmS6&Sp#Sht6pq@@ZyrQp`57+j;m#LX7FFh{_FVH-Z!=XTDf;G zd;f23ZRO_v-;Mp(js4e+{nw5C*Ny$x|6=>E#dkN-XIpL8`DUm6gdBz}No0$pbxp6U zPYQl7DKhlLk-Ghqx#I52bgG?o(Fb_ag!hJtGue>Yp58)H%21Mer3G6O-!SoU8csT= z`lLNbfCe+C&>asrYz6 zww4-W>8%jEExYQ<$L7=hjctg2UvSd{w?w>~9(rngGN3M==W9kNkg7dDq1q1Bd5!`k zQ5ArQ(OBXUg@{(43z*(FF?ExQCA1iZ@YbVuIbc83eA<4}+}**+*d4`XTsmAy3r6T- z%B2dWu5oH#RNrV^ySrZfOIeqYymt*TLG2jVYfqDpDYq)eymiq5vzYRB+|a<;oAI=x zw^dT_WAVa)!}I}OUge2mi{dL!?gL|1Hz7{v#L-+ClQ7b8Xx*n!kst_nBL_fi9>1C* zl}SIM<GMMFVVj5Y(afrmNb-?SFxt)SwkAP z#VpVb0B12SNnJ_ZKPCHP7Tsi?s4KAco-?b0MUU-hm-v0H`kvc~!p9CbAzGx^PEkjv%-< z%4C5`txu@i_Qt{UvXR1#sMD@Au<=(Yi;JcJ>vS@7OB0PNX&Qf+7Aa)faG{U6lU*LH z{6KVIkFcq4K* zGOfai2W8q;O+ne_e>@GleTnlC3@4Mx1(*70l@RQN8&hb@_d-mz!;t=PHj~YFG6fss zd`%~x7COJAAxgSDhtJTi6o#H`Z9F~Tq2`G~UnUMIE-MfDeC3Jwhjs=b_oY91+SrCn zW&S`G;w_$zr!L7u?n>mbu?5ReagP7rQhYZ-xQY)^@(te>pqFK?G}r8HS3Gco#f4L> z9=R)Cn3mh_+<1MoL64o(@m>4L=QLW}5bFwjHGIlvFtX8~FUY3+P(lk=d|l#2uyotB zxF=;Vum7AURp}r>9#vgbQTyt@WZi5%*}$n)XMgwcivv~_Ey`(~kEe4UKHF~{Jloyc ztP2aHLtyb9E|bnjW&MboOeN5Ut@d{Nu$~?T9_{2EPK+!jl|0@oA^jD8IY%?*p}bFD63QI1rMlaR%8#r^S4>{1dEcF$zu{eg!O(M?>Ah>*1=UW z(wDdUz-Y1vl_`&R&NjP*LR~M9+#My@r+Q&o$-y7zo2-K=@(6^}4J}`O4iXw1M zX|WqjPYIE+CXQ`+DNE6aw=~%T37SN9)ohpezig-7Un+&?d%e6(7<)KSHd2tdgq9)~ zdB9A0z2w$kuUjs@S(jXVVRyi^+CEp?zF6D~Ap0Gw4+7+yxYw zSxmDHS^gZCDZ>dZHcUL9df8Xp{e|C%>wjIT7GglD?(%8Ncm9na8g|kP=gJq)Ahg4B zdlp&I15g5=oD$I-U%9D0xDMWzcI|XuF-RnE?+pW+st=f^;u;!o-!i!L8Ujqej#>3O z96MTX!BFw{Jx=w~LdQ=&Iq%#dJLPy2u^?ZG1Ta5s;S~VsR~;Xh_vWH9FMqcDlRH;Y z9L>uAZPSvRE2FPnhDL9FAj)TJ{=}4lpc#Hz(Hwtx;=~x8XHXhReH=J{@%e(DR0iwZ zv2@=?ms=8qfwa6Iy^xW z({UgOvS;z(-f|}IaSygoUa{}OkR#ItSH)1$t5EfP?8nW9X9GW$&(!^BJ}%7^$Xk=+ z1zVO(f!*n(TcwmVj$9bQT-OPUVi0k9QF@CHF2k|jUB&>DxkAD`0IIr45Yyhh&fZ4z zd5d-uJGUNu|4>u?n`gJyR@|(a#D^9wSw7g=KGf81Do7>HzVar^jmH{SXs9Sv5E5$~-B`0HRFUfd^ zL0n{SN?d`*LsHR>hm-RWbMK@ol?2h__F?Crt^M8NtCCtL;foyYq(BZ@hs9Uramj-G zj%$y!IVz4zY0&1@eg^bT!~CD30%xEP4-T`?4qj@-cVGJ-QAT}w{u%gnFt_-2JD6R6 z&>MB9+yk+L8!j9Q+UXDu8^!F_8jn{}13l%-()_UcXic4Z@(HV)9jTu#Kgr&a_tK)( z*Kg{6>{=%F)~)ECA9bIi{>1*-8oo;?Lh{Nir0alD<1O`leL3c zAL~XveJX_n5}6`SW4B>giC7{FV{ESbRRZ6FlsN(xACG-m+P%N%Tpv6OoR4?~6nhI*1f2}cNY62bZxaG z5=Fz4F_=`}FtcfEl88f*;&v=(+6Nntw_2N01{IOccB+2a*r&&!U-41A*b@^RL9v=e zF%%b+>Ke*c*T*F0Jc?^=4yG<&0roJVt=4!?EsW$P;1p-|t$z%cqyWB=PuwU4@J)AO z!f_Qg1%}r3sq{B?D-kqTCaXL(v7?SLfqzo= z+ro2yW1N$o`qg0e%-Aah^7EK)WPGY;?oCPg!Zb4f$e`vmX3oyWc8ivw%vGVW<4c9j zu2LSW*=?U1#+#I3JUEbNohWM4)IYHrt1n6xezUl}&gq^2=@By3L~&T#y$p<{hh@@p ztnn5jR(rggpW)f3Mm&EWN=vIvht{M{?{O6Vr`inFA|EihsAmpegY2bD_- z9RYZoVZCy%%-|P&!1m;Ju^G8;cOz#xgA4{p;n1UxnfkdS`WVHj<4X3n#bd&9ds*Gs z5JELSTDqQeTZzNH@2c7FQV2ZlzNf(l??W1vLs0mn}c$1Aw?ePcP!aTkfzB~2%h(x#r! z)tNM`0`h`!IV744%=X2@z+C5nKjn%&9+eI@s`7S^eM!o;GDcmVHx=E!r9BXJna*Ku z(zP*hE#VT6*pt-KP9WwThm=xG<~K^6;$0L@ii)~=@WmeCJid!FBJhPkrkv&auo{ll z{j^|d!Qj5^`gfouC$m?|-AcrV?XaK4tQ1RNm}na(J{*xlt;St)_#Qxg*Kcl1bd4fS zidNNk?RhB@mp{da4ED_gmXV6es7dTTM}65qor>~S+n9r>=>W8HL2Ys*GL?wm;o>GW=`S{ z!}o)+O~9ficdIkWH}-yC&;Db(`+mR&RKxK%vH!UDaP6UE|M5NBf8fOM#{T1**#8-) zzs(7AzZn}w(3x*|hD5VkSzYB5Vhh_ngHF(_Cqih4pEOwy5Sc#uU48WEewltB@b5$Z z{hoh+;NM4Ovj%$c?<)VUm4O9+?{Vlp|32W~hy43J|Ng+gkIX{54PfDOef*(wbhn+p z(aEJ2Ai!|KyOi@WD?P|TJB&?+QN(uZAzLk|c}mJ=1$7V$1th3ZhMc+g7;{vnjS?F& zbZHYLn!%x{YA4txk|Mlc0a>qYG4kC)dy%r*NPz2tvr5}$@gNv=KP2`fz;T&H$(7b5 z$nV>epmFO5EvO?mp0_Z5UhZvRC25#-u%iBOx*km4pU^oez7d-*#^0stI-Qcj#F8Om zNmzk2=)qwdp)m64rw=X$J%!O=8m@cR>Gb*lXl_zv8@YV`w|^cy>%=c?-K~7e7byYf zi)ik~;qHDZN4Ic#{UCmZ1!k0;&5gqiF2u&cNV8{_&kT5_3yEj2$mh@;U>EA3x!>M9 zoCnm#kpN6gCjl_nY@@*D?)LWX4!0R`+{q4q^J1BE1RKq*-6oo}eV;SV!bwNLx{zlexK+;X z^AL%HowNI$K6IZRxbjXE*5eFGgoU4jr-W$oo78^#0(9JL?X`9`TRY8m>!4(gf?N5b ztzjuRdmoPlloTC5+O;tv$Om7Z>{Db!Ko;oFCvb5ShXk`!Q@cU)y9g# z&;|*2I!{uXjh5ZI4T3SG^XTr=Mp`YMjnw^4IeO))429dbL+(>cj|Jxvd$fcfx3=RW=I4Wgizy87|X%47H&9Y26ha{rC#XZbk5WZc83VXVz2p+waV=x?Tq9Or&-Yeq` zBo1ce%B2~HdKBXPG^r%B!@Z~~E^-PVwqB9vX8y)l+2808L`hi}an1O1J=oYj+}NiW z{y_M};Vw;Riqdb1O<2Ub4M_^E+!U|hi2eCFMc~gmXicBZCVhchZSQU}um%7vB&JCD zLJT@klyFuqX7R`c0zhif5Uam-E=~}1P0!e}YM4Rb2sa3JWC23DPQX%AX>pt z!qBJ!1khZ=(~ilMDXXEKH8c|p-mP{d#re1SC>tR=(f)CqfG>`*oumCSfAd5T^HY!`Qlt^%jOoGA@VlKXZs)A&;qAJTmzF$5W zpBq;(Uf}F8UHT<2I~RBbj-Uc9NVC2B0v(#f=|^q8?qSj9oVdVwgno=W?60aEETjXzdmYd1doUyxRj{1MLL^A3B!iB zFAma*nBdkQCU6ieD6uww{$8uBl(ML1JcZNsOPG(brt-itEpe*qsd>5|jOlzat#?G6 zaD)GtoTEX)`&P&uZ$(NA)J#A}R;!Idwj7K#K|1!3at0nR#3hAC<|&f+qzr!Oe(sPh2U$^&9#8y*j(X zV~GA6a~l99B=MX6CfCoEO+U`xPvth8EuUY5eJ%)jzr>{ql>N+^91>TR!7wQ;_G4g2 z4NR_@BNSx;{iH=;mIIa@EYZP>U@f_s`(<0yC$G=hP=V?$Kz6w`ItZwTk)A`9E3)1Z zctg6JKdTJDeXn`#q{uT~9=yLvsaRg>aDfNvMZ%6_xJbWrWsxN`2z0Ln`QUKoR|`x*ggJ9e^)Iqq4(w zvFH};x_D^wc5NK!v1{YdUcW9P+FM>12X>{`MWOrIYof6`;p<}3P49Kl$aeX( zT`amqPooJcy-HXMIEt=0K)7u-1uJ-u9BI+^Z~G8iSNz$;e|z}viLsdTOO?Y($S40H zLFIp3gilV)N`7890yXqoXK_8**g60*aRz|}@yCLJB4N;@#c{nr=bE!H95u$F5hRbH z4nM$kv1jX_fmLeJ(CSc4lVctV#0P^VANPEGE(v=e4AUFc{mK-7i;Q}jR5C=9w>Mod zuM6f*g|oRAWD!*WL_Y8p5yXbBAm$6u z%f}=o4Rdv83x%*q&=Ry779?0nIwi*G4o3Gb`TPp+HtJ>!sI$rJBZutfLw5(X2~m)e z?iPmLZb1}Qp9&)1!B(S>nzuJmRcUK5W54o5i6Efgnpr?;rI%+8a?2s4B`iEV=Ue@67TE#C*Z2t%-{+>4$5l;6|jXXi0%etml%ECPmu1UK@V~v-aTe zFzCskZt|#Ze$7#RGk6ybUT3^EZD-kG$Yo$GQnK2;WcxfF(e(S=vaR4LcdPOiM^o-A z5sC2#1_T!A)HVHt#*SGYBKfJU0CfnJlyi4u1ZlTo1Z==rIhT35FMkgHv5j9gI3;k& zjsk13QH?HG@tImgW`~Wpve8aD8I#z=%D&fcDzAUZ=Z}t--c*n9?@skZJ0P6Q!6A+O z5&4}{9JWKF8Up%I`ypn{(F6vOZwNsXmb=St3#)3Qeirh zK$*67_GqHIRB~0eN)rbbB;nZ(XdzAYs9L?$)M0#ub4Dnzv|{y$|8pji8!5F zu1cg-PU0jEKdeBS-xLcL9sY-$L&U#s+;q>(+?Ns zH!vb0qF|d>4Q;(5$Bfk#4EP&1JzKfn1azM4`v|nczG85-{teou^+MU7QzL&3wJU~S zIRQa-E@t8tvJl)Y&DH(~?6Cs}$9jM)5jCUnfkfK_M-bfV;v75On#>Sn>chalkO3(l;vWqPG3 zwwR=D$gLvtLy&J#F&Sle1GJrM#8-+t+#1S!PL^~$71>yh1kqdVB`hACTq>ZWQfIii zISTv+!%{@UX3V|SdZqNFe0ONrs|7(OtgEt(%P5R}+j3WHJU3ktR7}IJ#gfZK?3*7 z*oBT9;3y3nr9hJv#2@)JpxRbaHRwkelE+H5Z zDkhK;#$8f$f$_&dg;>11qM6i!0D!$`yF34gcfIj01j#0bX1XWqw9F#oO%{JH%k2P5 zN`Kl>K7Z!f7|Acf22H$p^6_M&yz$WGImSOu{gtbpL90ok3agz&Ns%H`FQfqT%ljUj5GYu134r zsD*LM&>U$7^|T$pl+zvCi-tDeJRJZ&cCs9q*Y_$99+mG^9^NaN@R%Jl^CjU~$WHAB z7v!@61KaTgS^<(>a-sfVNdDIiJufmii@l5$X`wv$7`-%I_OubrO1uib8vs{tFzD0$ z*UHXr>lNJ#sNLN2{}b>3TWhngel`C42M^}o|G)p>`_n97aGE^Trv=sG~01|Z+nt^*eP3`ltlu-2YY4{Uz+XSfY0I~Vzx zrt-Xn8O~4*DE{aDGw|+&nPA%6!LNxBdLUV5kg_?P*5(@;eTeKC#tMae!w-Xmrp`6+V{jT*k;DPTHSzF%3h3lA2Xf1<(tkX}FNn+W~~ z*l(l(G4sEz-p%1a<5Std(yn*P7^DYbW;Ojt)JAK~Ir#ztkv7FkoOoO~#vrC^*vKSz zB9>1~A;DN^6zFdOsc2h>QLwYydAhaxxO4F0@xft0`ko**mVa9W2u_ttX3e&kcFO=* znuO8t0y<9tF&u-s#Uq4)Y{7)eU-D(}ui&Krl z#^WY#PCk9s{@e4d?Va7dzwaL$zIgfbtAG460gbWdQ-$PHcw*2#yh+VaK3Mp@`wt#| z|HC6i(jCF!azisI3MW%Qfa6i45EKHHA}E4rf-?>7>aO_8kVgi|;pp4^D5(G!%f{pKtos@!(brh`S7MbGby?0dt2S1?yYniDcsnHv5c9Th7}M@OYBVkZj{IB9y) z$S3bl%IOB;Xo^eJQZBCJ5;nqG3?R}4#W3~Y79o6_g{v$HfP&*NMT;bEq2G(p^I6ht zN;-M14d;;7$=u2`GE30tlud5ZKng&3z^^=1f=GiNk~9h+;B}Tg)J)km`RGIUV`Nwi zsOSr48=tt>Hgpn#8L2&G|o4JlGwqd@$iPCqy*d%{t9`mGzOUd>yb_}UTjr!dsM z1Ov2-oZqWfp-!~>6gU3he8TiQAJdxf0S%#5A)=+2+g~(LBe%C24_E3j3AwF*yl1Ue+PR*DQ_9YkCry?R)JpmYlMheQ@Fx`-Z!r~oK~R#I{F z$_zd$f$)Zvc=3OIbc7>3Q=(2d`v@W)H;~4&dWj<=_$usBh4T2R8~#cUo&fR}LB_{2 zoEr4QzzDE|BXAF8BnOLR^4X{)>C+^=nqOfMTRoeAc)4R2@Bxlj8V_}qWOyurB7M>Z z$k7}GFJOcqTxJ~xd$dM}eFPPygQw?X6l~sNI+0h4jh)Q`&})=;x?(n?9HLrIV3$YAY` zG0LNG1kqlOo9V`H&ir&|Euf1oMLEeU)%8d(VGKXRp+1_+Eqr%=62-G``Cetky!aWn zY2HVt6&(-Ql2JNNYnVOoPdqkEF|U)}Di!9`9CS=X5e8?~0%gHEScL0vWMjeO6{6iyK)?<9QRb*|mNyau*7_K1 zo~m<6r=_PLIW-n|syVk@1#9SsmhYsc`ST89)Gs=zM9{ zOc7K7Q9_dHQISju*qq>~R9(vB=7}5vzEYr9N5yLOs5CzX2^?Q>1v@HDXNi_Z%b(h8 z{DQ7X7kq@0t9U+^VNlv?RlfgCe?HMq^_N$a2mhhS&xS3bg_nUM77&$c-Tb@omS`&u z+$w<`{}K}fE-%rGo^;(b%}!{DusoToEtaoOiBC@Bf!_Eyh_uVSv~kFt?wI~%K~Opn zVBFnG3J!_@qDO@~@zcLWc{N?Q%Ta!{gx7c#Bs%Y5vPKG%$+_Y{9^=JEY>F2^t_q|^ zW$}9W7%Gd?!4*(t>1o2o3Q;~&-GrJoC0zo(iU1G1YzwI@XpVIzXPTuL7b3C*V1$Fd zk4qZ<y%YI4CnFSc12h^Mi4~YS?5ma6<>AZ8H$O3-+V0B`NA2SIY$(h2b7ER@6tAEhNxp2%o1Uo8bEa83-}h{C1-_KUT}B z>Z+Dw3?z(@sBCw@izHEo(V7WTs@nXrn4!nj#7-3AdpL$vD#^0PLFYy@_K!+sU?%;_ zFOVMdgGb1Q`SqJ)<)vk^d5Irg!TO!UNCAampol?alQLrmZv`H8pmp7Sa-(Yfb5yOh zAg1r9ghK8*-$;5U9>epOa!r(h;B@CrZ+_F>yg~}P5rS@npwAV8pk@AZB%nVm0L_0ZelB|z%nOeCTAPmGoJpH$o(Gb18x#C6}~C{Y4!7V|cFT^x)5XWI;1XEVQ~V0>LkM%7)ET z$LE0h$O<@=rqz>Y*D*by!t!c>MpK#SR(ZT1B&{&eWhyNl68IPITW>b4H~jj4*rqjR zg^FuOCj?JLnU|5A=tP=gU%!@2IzMMfCC%<~H#Ux0hl99EIMrhjXHu6ntGFoOqm%JR z(Ln2Q(MN+!6Xbh00Phs(OkdKgq!>^SyaiR8K%k>19H!x~1JrUxy`WW5!O>Q_=|0yf z4@->04+goZ+w^q^zs;B;!T(olne-paxJ@x#qGYI>1p;+4UAD?0nc4FGGCiFkDt%ki z@5p45-1iXw9N<{1$0kqAM+sg0zI4Ta@TC5qqOJvKL<{j7UMPyNFzm9xO1|##44;E; z?^MF)5&B#U=0P66g)Hb8Nk5F=P(-UnhTh|qaure;djzn;PJs{Tx+7>X1vmPKmIYI9a`l4iR6r?_Tc(&TKkTgYqP2r=1n!p%@0+F-} zn~~v}m`urZ;NwZ;4o4x(qQ?J0Q$fJTBT}kw4Fp50VzztR-BV;Ku0FcAy1e@6hestA zR;V8$%vTWU0{Lpor69glIgStAC;VG|oqr>ZuQm`-FhANs=IYGx#orbldh0vO)i_?L zGY;e6yZCP{6}ywfhT+6VNDBEv-Z9N7blyNwKRzn44MC}Tw05+5v}TJ;p;9fTvfLmD3QspV*J7Rh*|nE^%BSPo}6n~rBn zVs=0$`cwQuvLllQIVRNcDDUodM?7pXGuU=dO(hA{Af6SZks6F?*#fJch0NPaG%G5w z6RD<&E8~tHwO8$? zPO{C}w9XT!-Q63fvSQ1QZfuQ?MsA#&=DXh?0AfH6XC&K6_vJiIpIUqaNP--Y1VI2v zY%DuS3gtEaLj4Yp%vS-v`l~S%J%hSf5jNU~Ys<@)VK#zxA;SrmyzM|qUY}8HAxZ*p zNbgSbCC0hfmO^Aca&P9o+yDDM7V{j;<5246O39WXe}_o46yE3dJ^bAbcmKct{N#!I zBh;8b`@#V=K6bGDb9{QQiye=z+jr9S`|h{$ztECPtt0|e;O4OTHjDm1zrc6{Mb ziSn#Km5&?1jn>8J@hG3uUS;^$D4ygo#p61;7@xOAQ>}B*p|r$&z?SML+zQeL{g&Lh zNR?{KVT&(;dYcW~J3E^j zOyQj!#>f3}+-#9_^V9)W`=&4^?Xt(LR5v+h?mQ{g?9az@H&&ftY-Dr9Koh7a?c#$L zbrV9dfOCZTutoHeZP?pSHe;3NPoBg|&!6lRpFIC*6mFwld@}mvw9~q7OY~hu)STi~ zr8U3%WIkU}C;su4=0E@V>1XbbHmAPCoT{plkbj3h(&(3$d)}bqS5BRfitPXR^z%NR zQ#>YX_ZwdD0mcU2b&9RU#I_k-;3=TM!+79Ipb&vlp7+V4h}JMXyrV&|BVW2VixvlO z_G0UQNIe5s-a*>j-AmU}a5iHPssqb{PvC zphxnW4r2lh4DTlnu;1~U{UJNR@j-tz^e&VV_Wbji_pD4wk7TCo4N(r^P;Y!qhw#Xq z&9GCxfaz5I)TDXljAq!udzntf_e}ucC_8nqGsH(vlo0DYOqyYfjL`?K6IxV&PirJ8 z1*axMJYq*xOu=QA!1m|NUyxE$y^4gML`wf794P&*L@rj$JBx&}8bfqhYL3s`NoBDq zJBfNYGni*?XhMfJ-d&XUU6e@&OFuZJBP#W&+;vnNyH(l!AOFaweL@>WunYwk0+*VaQP*t5)MeafZPcxyz z9d;$oxX_g6Yp2WJHSz2GwMagd&-HOvt$;GeZN#Zr36k; z)I(3`l_&5tqi$C+`DyUu;vK$(o_W&Gt@3?VKjP{KA903?w<%#b9s4$gt#vqs)aGer zMLe6#crBE5cEsMunXm~Oa2R6v4xnabAFG2p0go%2>D=;`%Ph!h#x=b zB%)WYyE%*I_m}A8cyV0xH#{pDLL(yR!Fzs3k`)b^1?3uFN(=a`j`1-mr1{JMCD-Q! z1>bj!BSuglK_}v!aW*zc9c8p>E{3vW968GJshya8%X=-$Bo?2xb%5kS`(1@yq6@Mz zq~$5SBkPCc3SK~9X{jb*(MghuY6^(mFb19+le%_DPDfU~G#kmXAEPHS%)yB1(EmeG z@jLQ-TvYb(h02bdiW8f5lI!1y;===DzBmUPAYbCe^mN8=hnI{P|DA7n?&7GItK;2}}e>3eKez zPNcT?_`6iUPtKI1JHiQCJ zMB7BU^5Np3(o2G6NCW;~X57#bfsBPt?oD0Vx4fx+m z`)vIO9!2BpPr?=~L)xqWQBB);E$z`-N??uADCQ0_7bXN@3zi`b_+R;n`)Uh1niaQ7 zy0apo5=XSsx~M=H3BndELmE&rS{rMq*pumRJ>N}$q(q-n6wEIV1W*&UU`#D72_%L? znp+zSBib7+mv$v!k_^@ykE2mc#=sIR90cQDDX8_#QmjACDb)m-2vJ&GB#cE7rICU) z&`DG#zP|%8cmlZ5SX(C>ONFl0yT% z=+%qCXmHB3vo*!eWZ{GGtmV&P0Wu`w=BZR_N4WNUL-nW0?V3}M&4hNPr=&w)13*{i za@!>nnxgXcP-06-<^@hLjP6ElkJZbX;(G`;{Moh2=bYLJmd69g?*mgCtcbb9D60iy?<5LNiAssXWtr;^fWMGgqY{4?50skAfQZWFz;g$x~ z#==MtwxCT-#I!?-Dea9(W(cG)8pXm0S7vbwmLUzq{r2G2bxqLzu1KiF<0xWLlcMY( zY(XWG;%lJONv>2$!xk(<8i>2?L4nnfTL02m7zx4_)W$1t+Hw(OQTZfThT=vd#oCC7 zH7bn+VQmV+^(`^cCc!jDqgWW>fwi~=%TUq}0<*qof_0%Wp%Rayh{a6_vxBfvguxo9 zqQXQ1Ylwvr3s<^ppulX1wQr5_I2y&Y0}^X&zsZITwlSrez@&`R;%F2LBSAQ!gn$|~ z44qM6ZCaXyl(f0kVwHFtjbcV$586Ou5hoL15-dX+@W1jC(*?Ok5JarkX(R|+uncKH zJAl0Umd{RP7h=DSdmDL50IwUt?&f43oIhuIPcGL8Q$s9_SeTb7iYijbdRW2**gukOt(} z1H@C(YPFeZX*MUaC{{%mWLmHcX+XaZ!)VfLNsbST25KF@LZS?FlAab# zQsM-ooVIQ)1?B3WkgQEgQmoOISc%8cdI|z6r63ZGSnCp%f=PN(G)<`{R4E9U)f6lh zC3+-gGGu8MTG*W3n6nD3A-x%-HnpjEO~}} zUje)tv=ML>SOZWqNG(89@tVTbqLi2vt0w4IP(KzmUxTPO5RxQVhBV-R<53qVpfhaR zs3a1EEm(%M?E+WV)b zM@LlDu_%-T%a8`74N@%J%N3?oP!qOb8S(+mipiuHfLw7ad1_-}#KJmhC2EC~l0~Bi zLab9nU~7}8rX;nRP>ILU1Vb3Hupu>cA*lb22^u!a=xT{Z(DjKz)g(PFnxs?{QcRU1 zQ7nuE;TTDop@ST>r(vw8GA>adrXJ-e&8F6`D5&*OYF#Z0l@=wzGNb|j8@EBAfX=XK zbC+TN~Jmr2|$4qodTngIU&E}`W`&cEd)G!gt) zzJjJIKKufju&ld&R#Bf#KE$p){{Ta3Oux;)|3&i;WBMyhK@%bOE>~WyUk0M*%a8$I z>h&UX*2ZWQ3nRQ{THJzVNCWXQX0JGe)>f4+tIY|OcpOD6Zc>;Xge|BmpEW66_fW2U zWx{aH@i^)mV<}-I2wSiWX`o6tt;i^+DMqR0lxhOv)h5P8qF5LS!WJ}QS`!j#f+Mct zD&Ys=72t)bNH`;_wg-pp&%EMAN8A$U3wo%7;JJ7WyBh0}25k6l~jsb;BUg&nmN+>;*89jXTx9=Wog97Z-LP|>s4O5y4SS@$0g%u>)zUBZ)IbQx>U6z zfBfO}v=$)sUHD$W%DhJo0oP`5N75{tuc5i60B@AwQg># zo+#I^)!qnsrzyMCXMSI3uNZX*#GB<2P~tToJ%sJ+Q!6ntdMi{k^gmv5rV=#M-w5^d z$wkI3eHUS8+KR9wzS~zNBL$DIKfR)~Dha7>m{(8sV%d42z@lhl${GF^p5BfLPm)fa zfgiP{yBYIg<}GHktvKU{uV(OFpmhFh4xF$lr|9f;7su5@2=R=;3vm;YF2^m0L0C+cCKUvAQIY%2|b=QHJ)c?ujeb>)-J4P6U@`(dG10@jA7N7Px3iA!$NE1 z-M7odxNA|0c;gCICYhTQbdCdcbPLbZ*j%~hwHK{H!x8-t=^!IK)WnD9PPEej?MUEd~kV<)fG zVM+E#+>aGqd?UP4h#l84S18suPo`w}7TM+wM5Nl${z#J4{*HHn;KX?b6|+``7DJb2 z`MS%<=#MHfWdOn|Y;^0l?3T z(_u>y;wuVJh^68KFh))37-u0?(jo-diP(2`2S(eD?Q=JV4EpsG%3&t2>T+9}x4tL0 z!1Fc^$<-n81767FxFV)gyR^b8;X_}raqBTiwgBj$8W_k`?sP9^vkB-`z^6&F>lN$2 z0@eq}{rm!FDa}Qr%zGop@|PsUki_E&%y^$l+fQ-;qf7xO-R?UW20T4}$*vjC$47;F z1eI!#oNW#^e5JOVmUz={+H!3-twu?s^Ned(?fUFEI}wNoV$^;o<=;b+N+SAqWdb{+ zX)Mj|Q&C=1!jeZnUk^0^)?wF;E{&zEjTmPy&oU$Dx1&j7FNb)F(BmeXACUXP8$a(Z zK`N~EWQG^i%e^#MPoK2WW1BWhH3M^o+SmdGo$vdy@|mf1U?Z5^QFY#kjavItN2T`$ zKl}|soGly><y=&sJ?&bX*xMTx8#k@Q#ni^QE*7mf&B5zmSt3wcOXw zvLC25+vI)r`QDRfFgo>ujHEvQ@!r$nkM|z`@BmSidX}rf5RAZdkoyC zUwCi9ux6Zzd7SN1KuI?4^Lnx*pvX4;Hou?h>g0(2;dwMz%Ujuva5fIgVgZ@+0c0=D zDnQy2ZN(9YAKCXa6!G&nL%|&q+*F3hpr(-Y@UO@U>cx*;yXLLwh2{iOTf$iudE~GE9>5GSt9zRg467rQ{V)9sFG&u9Qe|~=af~w!` zR!vjjpL&Txi&3}YPi$0lSn0kSYWEAYwO>-z=>cJ|R(p;L`+5p=67Pk%&6NGzOveDi zajQUx7g<(o6AR*b%r8@;e)9AIPOMsqxm;Nsy_zlo0lc_7QQK?WOsQJ{GuQaooJpbE=IbsoX2m?AN8 zs39UT2bd{U-uTtT_#nX$d@4^hbTPh_t-_j9k|w3C?(W#@i(bsd#1Uv^+cAb+_X?z$ zEc^$db^5{rsRCaEP9TL#&hlCB^ytVvS9@uOLuJs0AsQAYXg{SSfs~EnQ89E8su421)I$sC^(s7zswd?yE!Usx}~7 zpiw4;jv<+xF*x$guC5>=5q^q^Qj>P>o>Pny@g#l2}1mm}> z<@WVJ6P^fD;e(Q{m6DXMnZ}4jNbPf$xpGq44~6(Lm%cpN|KVYb&O4-W$XJK1`F(;n zeCr&Wu`U3rDfz4sU$!qi8IoY_yU4=7`Qg#y``k9$ZlEqZ^8%@qd476q^WnXxe}3T-JkOC#qR|&o6U+)PO*r45 zV$N0^FXrS&uLrM06B$>ntpU*bun>icg3er45bHXM(iVhfrW|xnaIT(_LEgIKo)CU_ z*S@4(yRGmZV>0K@fk}arv+*g>`|*9tC%+h))pc}~biK!a#Og`Aqp#G9AYJR(D$A-4 zmHp`qL+OpG2IA!s5lWNkVJ&T_*u_=BznI*0LvAB2+lQ%f_>a?BwPy$FXlQJ?1=zZ*NMc znR6f~tGJ=`AYY(3A2hS+5l0-v|;izq1 zQlSC_^$wo@#CPz&4Ep_FPIr(%EwEK5MJtO>tF>`WlCZu>ZEjsH15+hYx6&#l4~q`H zpxNgo>2bfa+p@}oU%$aO#k>-q(@O}Rmv6U$Bf*_CHcKSN&h^nR2+jEeO2y`VopCx> zH4fC8R!0FTCf(Aa)-fRuO_@ZM0&_>T8o)G?`hC-5%Iu_#(t=?-(p()`R$rl$_Rndp zO|-0SN!XC}u&aqQ@TDp<$VwStZByi)K4wi|N+HMHDH)6E9IDb2&9u`C@rS6ZfRM$k zK%a#7TmvfwBg)F5&DC$9+Q%*kR=_4g&rCc9t*iK^l{QvbOx9~7&hnBz<7HKTIxURf z*<~D-P7Fmf5H?ma_H|<=uCQgG=mLY6%lhp%uQuYRzC=MQYrFDlM+lbep>4Na(unrm z+3939K`+HCDNNLxcfq^;FFz;A`TXsIwTABOZn&*K{NZkw{(jDXzu>>W=f7X_-~Zyj zf9SfqaAU`Rx4Ier-sSM;{Pzp~3n={klK=iE|NSrbaDkhF{rqGJW{8b4dCX;^cj12k zIz@DgV$D}~rARv=xWdCR0UA+dribwgy}Qi;s~p71>UU8)dkIf|~C34Mn# z_}Opvbg$1IMj03sY12(o`%k(J6em-^|0*C(_Ab+_toX)>iXW|FkevQlIX6Q<+<fz?iL^M*t z#^n(L@WF2lxjP2Y)$RM@LcILkBL_I}kH!sP&G{l!;**CtaF{>tmHu-X?mO0ycq7sl z5mSuMR09C35>{b&1D~HwLFGwLm5RyPk9tOA|4-$LH=>${Y0_skX~)Fnxe=&fSV8FUW(zfNax+B$UM<4U8IQI-?oUAJbufImre9baju zrKs;(1C!x36qXpEsQ5B%CzHVq@c~{;)VpcJWWhP=&+-E8V$$U!JI&%59SqL;i3`+l zrrZLFSOXrw`B&A2C(ji+eJPemt6_2JlR5yjv85GZQ zUM=_!eJkLPpmEw~tbHo{e3$03o*QfBBcSKQW$CT2cKL zRj=xqtR%O%n9~U&U+@8`gZG5&Y4u``RzM?;gz2hfKAwrZi+GfF{q#ZQen%k$Un;`Hn-)*?ISLw?R)gJspDg$6b8 zBb+(*ZdjC12TgIQfEMX_1b<)FSsb}Q94$dA0Rl#1{K*?y#k*MBCcNhHx%8X;`|gYW zXAVcXe#S5zqE;k2z?zK>2oW_8NTceACXV3OvGT0PU&PrNk+{;kOa&(yg-j~2|IOat zY;%(CVwgjj;vJHkN((NlhXUeUQ5@pY#sEXc?-Ul(C8A6$;ej}@zQRmE6-q1`P~oyg zH@gFDvCit@9n94Yai1?MQg6niSPXu`Q{r*&|K02TpV12+_^kJb5x*_&Z<03poC+R# zE!XCkZ^=6`cl(a4l=zB@(d_KKte0`Yg%zZtq_kT9EW7>q(f1F&-wPy8MF$m`y;Qcgrc)!39D8E?Wio64+A_a^Tip>ZHGf1lhxhk>c)I&wBYwjd zfq*{7y?lwdMRiQqxo{2yZZDvbkSoj6g|ST7#diQq9nC z1=Q0=B;e%P#`U;@v4uTRrcC+5RT)F7fNuVzsepW%D?iTk^VHeIBZE058PO(Il57(j zk7zuqt;4#HqKa(6qvsJ*kZ3M56tys!VGFaWgk(e- z$HYcu)wr12EDz1C`cb)69gtfebu4blrteB4kd8q-|E86}5Q#FBLyP{a)uWJ7-yoIh zYpHFx4LEHh|Ja>5so#TOv{CzPl|2P)d}t#e#a#fI)t8s+gkbMM1x4K9+~S;WWsXRi zvDv2|4)>|q)Uy7jv_uO+OsZL%W#1&!Zg0AF>~vpYlNMwh_n92awekL7?zTR6Tfg^9 zw``iqBEydLwX;+Io~RShL$>V({#llVgXzXU=Tqq0?Cr;bZk(D+(BsHvVgNB!^JFnW1n7=qr4eJPUexrJ!I{kIw!pg39XQ4_jJ8z1bR9fUO;l8t zax-k^#9Xmi%C)hXhjbu|6K;ab{I452OKXLaxySN&n+;6LJr15?PLAY!aK`U}mb!`M zY;csRNYO~V)t8|@fn1Ac2Z^?(%d@v0%jB4WP>`**&}JSQsbMx|sQ5gm2JlC-#ooB1 zq`Q(7tt{l_|IwdE`;VSIuw^C26PC%M$KrCAEpO%tbrS+9C%VA{e?Fo7O3Axgl9aro zawI89(57no>uX4X(#lSzo~0O^n-Z;}>RXkByDb(5Ds7^?mh%LPwTEn3SyYe(EBwkM z!C5|LWeoz<8_p0>!wKMufM4#sx0l4&w+?=B0|;8u3b<6in#0d)%}kE<)Evo%dR(kh zNcRHzwCg3FO3K5K6TGd&$@JrvhZgf{|Dk+;5JT8e$sR(l?l?=YuhnydXzuz~ zL26`p2g4<7RiB*(s*A-~>{yv}Kolcit5Gg*Aq^<1`zHIDu2kaH8us}X|3dT@O(Zht)+x3HXLu5K|x9UeNyG0yz zT{oa{M3-Fs;)?gh@EN$74X1Bn>Z>{LDh!4&u3t`QO$DezB zH`aqm+tyW$8&%r^;KAFY_$DZI)vu*)1QN5gH!+lB17&aR|!jElD zJbSkWVDRi_R_|nWY(i0rfn4Q&HpLYnsK3N*xtg1?mThDzH+CWscK2k5b}@%IimzGn z6TPjO%nIP4T^&YX3>$m4%en5gT-ajUnzB-4`t>TcufT!q(}CJ%XB~%03uES7tseVS zsd3SZ8^{#+b__O0rt-`~6uFxlb90Q=;`MDNuAy(eNllVvIvu*q8}QTk#d)|RoLFs9chs(=SQfNZuQdI57_Zx7w`7x7XR_)Od6s?DT!x^Vi@6Jb~@qAj^_U~-< zx3)Um>+!`U>qceq3mSXoq9MG{tvuzLbmpbi+CG??0!DN!9C@bICiIbUQRE4!zg+sb1#&2yPEFq zoQw<5X@iEj$RT+R-xiDuK{iHk#zsYe=bMYAmqH;y?WN`mz)xrThU?5^U)#vQ%kLi@ zOD27@x{g$F*#?IuQL&5J-ahAWS<86z6i?NwrSDN%B?-zPV?wd3iK^u9qfn*E^W{rC z+xR1V29Y4Y)XZSp{9{vt6~i5+XQVv8D=i9AsBs|~;xjPIVf87jsH3_yEi!4EOmP@Dnw$%vQQ zw6D%dxkeJEXqo4bWlzy85rFoyRh(R3y~_=*gKkmJW}sq>dGZL0`<1}R9+(LA-1~UN zdG!7MvwM#p>vChKoOiPS0HRmA#IcrH^~@8t z6Uk6{NX-GFI;zcq!_%svru#hZfq#iPaKGRW{T&?b4j}O*)m`BOh!_j7m}XgW{4psK zh>jsS&WpSF>nV*8G9_bgpECS7A*4|HVIhGIYvx;kK9`4Eyw2_K?zz4D&&ZE}h+yT> zHB|S#dBc-nx%R;KONMMLL%sx{_2P%=(wI=O#FIu)pRJ>K94||IQvFa_guWFb_o)X4 zcg`uO$W))pAh4&Foid<0a`S68j1UC3V8%?4EXR6hn>ii8wy(Jz;NuxX1*r7sa!p}; zH758n^<&?mp*9~lMWOW+_rdPCn8P;aYRsX31y*XZYMc`muA_qwVJWO`7OzdXZsh6A zPhV#2;6vcI@qwW=g6 zPVC?WR&5bHL$C;%EFjEXsoYl)Sda<0FcVS9Jbw)&H5jLBCsXfeMH5?WQ(zF{ZIz@~ zW>!Q9ke#Lj*D5e-U5H~{*|h&Ql+LBxf4GtcbiQF&J>s~}B}yVk`HTNet0#*B`ii>g z<<9k{LB=&*e<^d$b6M1$KxBSe`Y)5V9A{&(jEJL!8INPrELc~{S>JcUQvFTXSTKmV zlGvP9sv62;e`2shLRWRBd5^*Ou7bo*x#zE`e}30V2y3ZDSq0ewJ*MM&39SFCdjPNQK_{ zr1zby26lh<>7ysl7&J~=3rRM|Je(zjQ1l}9%P+nF@Y+45Tr*72Yj2h+k}gi^{&qG= zH=0+6jdq*2-G5*33eRHbtT>~Ga$6aGqj#R(NZK9fTuWcPe4UR0sM#$=A+KhMlY_H-I3<59=L;BH|eg&Y!@_= z&~T@7Rp@JUkd1u1L-6{J$Y1c0dlsGByGihcmoFzWrSwvXOLcIVHQz#*OyALrUV_lQ z$HY@?dIvB0r>5`X#(*#0o|EKwhhKiE@n*-?ecxbDe(X*$XkwiSEnuf0{C(iYMPbnl zbo5l8o`9o5Ml~yv;)p9qCw$cj@N$l9u$gt%P6t`s-yA#McudP>VuB<7HnHzBHJ`)G zg)8l*IK+sxpl<^&Dn3?O1Fs};y;rCfHSsE=da7}5(v1J0cDMv-3*cREzRjG-KUz1*WCDwvGK&jzmwS%JB#eZb1#wFd- z;U!68BOO0}P3tLm)h#8AFIL-4NxB8`)c2>;QJ@;@6+h7i%`ADAYtJC()bX+fS82s+h{ywzM z?aAyVLRFKfg46ax2M%I4{M_=}ACF|%g0l-|%pR5)j+i(Z-+9g zM6Cw|P_i&Mdd3-`o=5F^J>0(YJ9t}$QH4i6LguhqxW()yEtk2gy?Q)2^iUm@^oVN= zVhl9td~Q8&xfvdC4v;1uSv!#4d|(YnI7S@;Os}z3b7duLJ!mWTX8EYJGYr8nj-q;( zS;z*GcRpRW%L5CIWn{g-Ck3(4eVf0T;1)|k<)yK%<%D8E3BUnz z^E49yaA=2Etlfu;V9}Lj^Cb6IrBpX?ux9wHeCE$*hxE?lNvGBjZE5H9;!JJ;mGy;g zfGQ5{cyMRA4sHA%FLqlOYOy~MBe^CCpxr3u)d`7+VzBp2r55X{PnUXCG!BhG>(lVX zDOe;X8kD5Y&)>RwOgj##RNJt9_v)8GZ4Z>5#cPX2$L>`6g{F^qAZ~Vz6H}QH8F8ys z47G%l_cuC6W0SVL3ljAI=sTjDT`)LTf5V_7u) zDwe5bLfgBhnbIVS6-l48t6gnrwrZAKWh*Bz@r+kYI=OkuToKG zbt#$UOFtsgqIG=b#%$zYifeGcKOXN8bj=(jB(s+OjhlQZH%UqR&t@Uf=TzUwtY+fe zgsB*0%337v*JCj8OAxE9>Z;g}%67|cnsnD%+5c>pn;d#Sz)!6*oOic3vMcS@We>?X z9bplXhpa0=#{5Y9_b*6yrAf4MbA-Bo4|^frW%VL3AV^5E;4z$L*YInmI{w$I5>C}S z8rqrPv5oo$UETJIR(1{591IzI%3P_tUjcYlHJm61;K#@kFr^p94{ zsT3K&0mq;?c|$5KAI3jTK|~02%0HsoaWjPw=YBPX5Lnr=_rg?>ToF2hfNx#z3SST< zYpJH&6+VyFXg;(of7|FY@Bw&d1MTP)wQ95t5KAfl54)F@27BJLX@Dd;69)fITJkW1{Lymf%$7#1LCeEx~M*!k0+ z{`AQwpA0>Xh7#>$Y5|CS84x~Jp;uknvLSaokc(e=#OXO`;|H zLKVCZLy|`t1(XsRKvxAI-@vaoecMFtFGO5TX*%5SigpcIaYQaRW1m3$P40D{DK$^iTJAQ*BZqVAHSCMdLFWJ zW}d9d|5fql=jxQ;%^_^yZ_)R@K~e)lenH_K&tQ2_Yd~~rokE@s+z1& zx5WIn(9F?M=|nDX{k8_*1Wq~=Q5;kCMb|>XmZ+qWojYJ)<;J=9{No)>z+`mc{21Q* z4(13~xXQz5aS^nde(UzAU(>b8C!z}P(7MHt3sZJ*U z?ER~dj$YIzX=)4vm-gBH2TyR0EK*V@MVaS?T2OQbku#jP(-PrCiHZhu+sB0>*tZDyID9M?*w3E z03!vc74}GRvP{=*hTMr={9djoD%w@EJlss97;*C028K_>D1h^Wb$)|ofB!K|%9Fuo zs?Xh^K1DWq_VkAb!!q{p-s64jP;Pg0BX5N`H7{DepJg=#6EgM#$RP_)ip*qDk$jg;_Eqt|My!K(eAB=^w4}RGr96 zB0Uj6rdWfC$p4%6()dV;Q4%WBTS7*av5GWI)IL%rY!zOii41yZ&~VA7yO6n&!N?s1L3@?fIQZjdr~>-TtZDdA^E~ z7T_s*d>9YaObOlY@p3&%U#@?kTN~h`JlSK5Yi^zTG>wwp_75f*>@QtqZ)9oJwsMRK zpmj2~6jiw73<{uO$B98tLn)_^3@fHDrpnaU2bnC0h?a265i5O?cY^y;nO3d_HRy_h z`vK|MB<8yalysohRl!qCr{XTfsYPlp^An%PxsUa0feAj9{^nF5zqtdxYwIFhWL_P+ zI|zaF?6q?N7Sjj%-zZbg0d=|aT(X+yVm0UCeqKZ{qd!W^C-=4 zq@#T)dc34BUsCj_cy%d%{Hj{rt|ni#`%+5z1*DYvcrrCY=}7#?-^k<6VkWO*(_xd2 zY(!+!olbahF=U}Wdr^c+tOnO0J`9+y9Ff*eFPgv#SQ5@|TbOAPdkej(?oWJMNHd2W<`D4a#%o24I21L>My>AB3fi!Woc=MV1tZ*5fH|E|ON z^S3sfKmQiPDSD{W>PSvIyO#Bf9@3Ld)ynpLK zyJf|YS8vSgWf&W5TMtlX1a^p=AY^My)=-7crp%s}=b6(FJCU6ha>$hWd6z|*dwe9I z^kuR794~1lbiPq0Qq$GzV~W!MLHMK_9~^LK(o6Wa$A3q?eMtv)abSPn{v7h}QD?-z zU;?C+=8NU;{=d`#2x>%-8?D&vKGN0|opC{Cn?*}ClauAt9vStg?9Wa^{oZ_K0_tS? zsWY+aYFNK+t?4Fm_O=H~UcSC@y!J2-LVn<4`c~Q8ngoasII$w;20rxFg_b;bRA0gE zt(RL{FQ22m$O|}R(16X}(o~Blt>mp5_I0O!uRTDAzL*LX0Yn9G^l_RB4v;h?NaIPh z+aGs9l%zGh)Ub9O9fM)-cSE?KLF)=`P{O$j%mjg~F?Xt0O!ka${O*geaK)~|SDpRW zOiU2vu5x&<j8+0>&heQ%1TG1O{Vvgo7NF>_%fU-90!J>x^)b!lzwb>*2CdXVWvx zYY4=wOetgKI-5n!DHg7k#Ltb1LSUdoq|}{}x>r6?xhZ+f`us z6=$x!A|~FYXe8eL2>Yly#$Nmx#n?slePBqXw*U=b1%s2Q%LlJP9KTD@rsIRj>00KB z3(a}o!5gDPT9Q;+Eo!S}{^@x$WsUF&@yxlQslmkgQ&CXiik%DK4IkPUli*01{Ha&t z^9G4rqLQZ$yd$b~)s+pYXf4IZ$9ncDJ&!XHYw;8+^#&`sGpw`!A%3l_e7 zHF=@J?c3OUY{-cf2t_(wMIsN;+_My=>aKB^(cW=4O0w<3nxaP23);}I?fV#OP3+$T zlvlo=SYDRQ+MuAnuETR#WMIf{;CP88c@A}f#f_rU$CG@(HEJf{A%{+ESIjp7nZOnlNujn2Rz@y&zJE!H~WPC zZJf-1yAwGueIKW1)6PnW0+O@2sDKfzJp#%^LwqfLh{%a>ypKcgdzzRsRtO}S-Dxmb zNk2MAK2{fD^YrjTe^_C+N3I68Ab6Fz5?Y_5XpGatQa_BsiV-*0lXwbxnXMZQB0ibZ zOMZqAAnox{kULDzmVh}~*Sh&roUl#y=zD?FsWDRrF*D;Fre~`^;8x9)4i8$^+Y;x|%Gp^^iyF*yZB!#5ljakM6ploK7 zEjmVC9ZCK_0Q3Ba!a3=zUwRI`^)uzD)^r=Dp7}l8 z+;l@NpQ6MqD(PY!3RVFnz_bpDqV%na@_RlK4vk)`(wdm+BGNX$zyePiy4}{{1!=Q( z&_nk|ZUGREPsgdO-EW8$>~e|y zk1VmZugEOrx551Gh@NCOw=0(m?{eW??rmRmDgO6|l;0l!Ms`7ha?YcYPC)MZJeQt7 zHTZ{}>EnW)a{N;d=2!tt*D!U$a`oVFRrC|RBY~;zuDVyD{%OIPZ(AJV9B`^bvgnPF z9KGTZE1*vFA)Z+PC|7$Yo zb;dCHf6tHW$5T*i3ib84C_4G z+%q@B+d)D;S!%2qpV-#HVefHw0(EiP2uWr6ghbATA0KaTnPs!IJnkkjY-g9vQYPne z#n>-u5I(77dA&ei{Vs5=Gd9bSSsEchw8?GU@<^^dxTgMk;iKEHN3Z&?v1R)(;Jicv zXvtw&KWu#!1&V5bdc*=~JqcCwz5~q<4AOi10m$QtS$ba?l_@3x{vC1~k%oDp6arhe z*)f-hqAzV?LhYlm-`)Gs+z409Cb^mT)pWb2pU9(Haudn+`Uj+MU)|W*dkn_{s-aJM zP^{t&m@qLk6diCN^d#m9=gaM6g4+dF;AfrBpn3A>Q2;R@7LfxqZHY0rxuJb8#P#wwf`?*9>acL23I9{1zp1l6HSD=Wcw4OC=0 z;>x3o!DDYk26z=!KL|&xcR|3#9V9v_?VCrVgRO`S~!h*;5 zpO{T^OZ0Ugzr--inRc1XKDiNv8xtDFqYiYy%m~wo)_TcImU%jM6L6aFhf0g5%+T`yQr_`tgM z4*+(Vf@lDPC_}}pkl!l~zgl^1=-SsyuDfIm%-jQnYCa*OwHQ+UbEzc!pKHri!CG_~)21$TCl93Tq~_WVk7K z2e{eV+}M1y)%tm3n^(c?s$@N!5T~-JX_=vTwTgN<8#69RSz*!jKvx#8;CPrEk4D(H z^A-3>T7mNdX>Gij8U0+i`h3~xR^)TI#t2dP#yz1F$PG%uw0=|_ocF)^PPHx%Z`ne&drtJdjVIbS|S&mO5*9PL1% zW*=s&nCI!msg-u?gpF6+rX*0eFUL`c$=D zeS!#jbCN&{TukqHzBq^GK@cLy4oDrk;)ByS+2Q)&T(b484b)&9 zF&NR7aX#RkXG^NPJMw34x*6S`A0tyLgTnsQt#*{~vRTYS|Lmk|ecE*C{e%ryB(~NG)1b!DzaOavxr%ncK_;-8Gx%$et(rZh=wYBxm>C>>$Oo}{%S(? z&eay7l(Ehd`(*kEuEGvFLN#PBwnPho)Il4urKZ{$ci%R%q4E?QI>E`Vr|#CQdME%A zN)W(YN7tRH**&oMBhyibu6zuH3&m4!1}ln`a4@D4b6L;~88JLp0cJCdBdeAl zX`{?@G!UYW5k@3QPwr9<;P}Ao)bpg!nz=`qT}!D-m!jn%Kh0>}teWfQhPi2O>0GAH z0*o$X<-OM_2EF z&U_@};+0R<5qW6yOyXmVx?h8oXNFe$!27iGK={evQ{4`J@_O(z&L(AiM>~)g2M>w&P`5}S9m?z>YIt;UD#=ZO7J08N6oY}l~En}xA zj>LYTzBRId-lFOO?|26Fi@l)_imFQA1)U8XyC!i((C+aN0xN-`hUEyKP-x832JW2F z@BUDB6JDG`bU;8G-l&y6ie_px{*-1qf&zHLS&QHyOSW7wW5Ur96pqB!&uq3sam~P# z0+{Yb1fm-zL@C*lL6zc4jXkx? zesUzTU`z|q3@TZbqG~k#G#CsNis1UbxI>lY9-Yvp+n*qQ9Q}HXCPzKVzNnK$*vWL4 z8CSeM>GNeZ^D8f6{q7zm@B0Z1Uvx*%qNlI!5#-?h6u1!=R_72eNeSx--(;ii5Lz+j z@`T6Ka*@L-9DO2us_uxBNM}}taKJVchVk*?Tiv1$!Px*qK)k;(J}VS43(|29Wc%Y( z%8S9sQhJPXAF^XI)2|4jNIM5%^C&xw7{kauJ>w|d7-g=sGmR9Xo3^;!0~fG^AO(NOrx&)$B zIkAY}gMN~LhawZMByM&zfR9EUSh64qTr{*I@?Tg+RmR%bBOJFQH0dGQ%Id+3lQ8}; zQc$uA5|ZwBv=Mx=5|dLsRK-gn6=#HL$zRYnF~0*o{b_}}cRO66wT9n1FZe-+mmys! ztfd7FWrYzG$B?95T$6ec(zXQEC&4Y-*lx(;{Iif8; z!qUj$Fbu7fb$s9-6s7jXPcHzxu=2nHKy$LJMarm9WpfiEjwibhwi-%N7b%Vr!NUr( zxLabTnJPnBw22L3Pp)SjD7Oy4bfX9gs$*j>Hs|0tUx-uZluK>*e*w*dyBF6yxVxz4 z!QC&Ud2sg|(LC6X<3TQR(BJptKG2oh9Ib^yttLi6$i5(|uveQ&%0xvc9nfmaL`^#H zR3!nEW^RS`mGF9aGfeL@d(r;!;Sycun}ZSP-~@zGcA1K4L5knnc=izYWMwTtEY$}( zYD*a$1+Z;hotabQc}slw<;+VQE}I{;n0&4otvCy&ta=IW<9@He%0;%rE$%SNQwr-K zh#CcOtiF2v#=8AJ#rMryx9{LvdTEx5Khlj)IUDm5xxVi;hsBCH;RNlUS;BCt!Pg|h zO!t`eB%Xgvg1rc~Y^a3v6Zuc>omN0I8Rhw_It5!{sA zfBXP;0t*7Dpn z;DWtAMAT$#Qlwvi%!~{w5S$-Jq@K_PdLf%hzb2qYg8IOx zy$A&kNH|cH+X-})xT}Osk%W@zG0v+Zpc>PWN)Xt*?{|nMr+}j#+fhVbDaP^v*-)&s zuRFjhWcC(~YuR_+(+q51)p3Y(M zA>8Uh5+BYb4rVDkv|?{xm6b9YN|e=CQlglOkpft$epaqjA~}fc8e8EED1p>$)fmt9 z9Htx$Vr(o28i5!QOE1}$+WSh&xmq)B7vKth&T01g;{bdFLF&VnJU!UtoucGj|SasvP4G{YPa z6!v48vgUQuQw-u=7ZI)d2!MI-5=~Oc&$^dY7Xq^LAz^9}7Wa6(aoV8eG$@vZXmVQ} z+{sw*S;jmqJ&Zm8OOamO81jXYoxP$q!NYfIfsfh61j7e`q6v%GXrwGcw{BL<^&26! zJ|38vTV>g+0#gNL2~304^*V}ZzPQFY z`VjTmRTnDmVn{0zLmBbCU3|_rkWOW+Xfs#}PyEJ>>*4hq_#dSZy*GgEK;8s1qT9|X z!1h&fEX_nJQS;JF)zn{0CE87*@0dfjOME;eDWY1Pc7g^+SC_t16os%;H%bij_BKTv zXJU>eN)Q%$TvnwG>l4vux9>Y{Am;cyx?SKn8>k!{DhIn1;6EFi^!Ehe2GGt|0z>4b z_SU8L)>qTsy8GwR-n#qSX>Z;AAJN{rdvWb8l$~xxF2^kGEwbMH#5n|Z=7p_68_2c8 zf(Y~lV(0jTozJ=SBFYYLOp75!jCo#TvbLt#70ou^b8avTSmRkxuS@h_a8-qK4WFp< z!masv&z5F!_6y6gq<9MqNC#9m^HI>n?C0SdJS^gT;r1DGe|U_2z1aQ?%yVJ^1C`O@ zVOkf%y>yw8jG}J;;FSDE&qjrd!CC|#GLtfYNEE%M2BN+AQaBrNrvclYVD4C49ONQH zvbeC`ja|N}E=|`0ZvtK^qW#NN{ErQ);qQXh%HE?(J?HWSND&XATqb&JbB1lv;)@KC zQdvQpY>$9XvwWfk)qp+foft2(xFqK=G;E=(TDKp#I_t&cW>2!L8_9XqJd5ObRdEh* z-7^z(hH4|}7<2E=2UTggg2K@W3*ANYf@l`h^ajbAtuqEeS+-t8T_^0MX%^zKmsz7L zE!4K7tPxpHO|@$6Fleu@%U$+j#Fu?mE*A!Ba$j6eR*4}&$q>R6h^xcH2!-I1 z7oang&7(12g31WkFGOJ!+;w623Tf$u~ryEL?hV+LA>i3NJ)i zG_Q~g3MyTp@NY|2xXQDs3gz&KibOb?Lf>bTlpLhOl>sEcCjbUG9K?uTIT%OLe$taz z`$6%;Xp%-FY-8!kY#PlU65oSl2KYZXm6Y_8(iX+9-Mvg}6JMWTHgYXibaBkWJjg2M zCm8DA(8b6z;~4jlYZ9oIKE}x>Xk!)%=P+`wZvx})J3KEPhY3XB(J)WU7btW#Sr^o8 zNzs-TZAsB@#v0^;FU-;VXhQK*B5b|m@CR5#XNQNlJ|OwDeCVi`3#qv6(l*PbOzaED z#1>euU(*)Z|Ky_9Ym>{heYv*3;kCU;^~3o0x45+M*=K zTL7hajw&jxOErfcZT!5|+Jg?_=5yFh*!*eZ!GmY5y^YrP){dzwjiJNf#hFUnxQ2KI zbZ*8{3tpJHL{Sv~A7e0aKqQm)@?%(`fG}1iMY5J)#SJF#tnO zFs*ancTqH|a0<*FSQ{{g>>~8~697St$gDS1Oq}FV^oUqA+V=ffVk}8mna`1G0Fo7!Bv!7W1Js{fZC+hQ|1=~sK}lGTj`L+ttRx3^#v=VXa}ewZrH`( z3Wh}jgHyDd^PsS-nzwztS=c9>8BSpWW(w`VTL&FoMHaLXO<8ho><~f4+cd>xs~BZ6 zhE`HDE3Mbg-b#xMt~A1BvAEJs&0r{-fgf-uB>|r?V<1TxJ1fgLpC+y0;FBnx`5DJ9 zBV{GLSuUS>H}%WLvz^B~57+ES=!7Udw>mpAFZ1+tE(&RN-RjZlyZ6s^s)fPEJtF?{ zFqBc+CEnlIdqgk4env8f#cE@jhgrcjydoGM>H#k{&EdDmdzJ4V%4VlOGhy7SHZiRU z%mhS@zy#|i&Dx$dlWE?jNhcMw1%(1^4TG4)q!!cyDjfv1LwFu8j%nBD-fU0j>F(a+mpmH1malCk#2?E|%aI)+L7#E>g?%jB+Q!a^n9G?*yR zxV-xK>2-*YQcZ{6|AaSFQVEGV2sqK-$s4sTY{GzV}lDLT8vEx9b$ zbCLEqlS^&2f39UfH&@s35Ze=PdJ8vnaRAzGwHU8w0-euPVRJMFGkU^2^Um(h79Fc3 ziqE(9g;YzTusLo=6EWongE625?7-QkhAB*m%mdEE!<^$s34IC*g$G;E`lvo&E_`!$ z=SMv1d{hw2kNY^NBn=Kv^h;lIu&t;yHt7fhDtoj?W)BN}u6zwOXHD!}HTBRu6NV7D zhemRFeRjhhQL? z`;E4L@ad~|3ceIpvCVB-4b9UrzxX%On+K1dg@)~8uqut{%yfi+zYA?XwB@(2aPpVz>o6nAmp-3l3&7EK=5o} zeso4KKM`fhB}vIo+OkD;pkusJru`QTNVCX*nne;hSbLUoVg*9JAah9rF%TyfCaE5I zmXG{$paBMxmH3_mOJ(MG!ToL9u%HT{Kjxls3ODw1vwVp;@BsdvbMf`tvZz`ni0(%r z)R3BNJb$s*2y5PHn$_j`_|+oeS!0F1iJ=*ae1!G;8YMr{&qGwik1!>#&f?jZf#XQF zNx#tS(Vm}O_E8bS_(`c0iFhr)xAnr+@2pBJ_RNRTklw%x`ziH>q)B-^bccA~n4_~K zssaRg`%c9+)drea#3P|3JT?e$%^X!!ih`X|Y)%}aZz!F~(dYBJb6RcsEMCD}Clitg za4|9D$rF>btdPTt6W0I^3Y|stiObzL&Ag4`%a>(Y$J^v;LW@S1Iku4V?EM z>vLNfDTA~#%V99?N8+RVevH$MSja?S@Kc2cFE+L}H$e95g#2u0L!-=99@Hm4?Lo>= z@OGk)|HKLM=dEXCj7L-xF(CM8QQ4?cEYY;SKqdC*wneI0y370;~I zHX=*#{)rCvSfGOA*a)w}8Fk|!mSz1~vGlj%r;1n;We9x{myE3g4fNI=lL0Rb(u01& z45T0;u#ZJm#)z&qJR1cm#Gnz-Z-7+v4T3JSv)g*Oy?ej4_u~HEb9Y^xL?Y`j)fk6Z z*W^}X!XM4|I{QS$yfBZAeYN3|AN=hCao3+`zet3fYDsdoXta#2p(O zTF3(-g$e~e<~M>uP_W3y5i}-bv4%}Ki|rA45DwziNl4DCCQ5G`vQNs^NyWxZSg-^S z2kGDDUy#@T)SHX~3BxYN2ur_iy!ePx>Y=>s3xxv~7fh=89H>9DYSM55z+R zusxkGT$T)JyV{Bh5-=ey7B7W192P~_*~J!FaE8UfLR zb@~GVax{X;aa#2XaqeramKY-z*;d7uUKCK zAK26*8KWTqNw=TC%a(N+Fvi_NXw3f|$4s01iChbfnX5zQ_u!ED<|!U0ViZm7S|YnR zERg!DsE&BNCERqiHuhRPXuoW1|71Q8v@Upb6$PNRG8AI%lkLs+WHV>B08kubKqi4B z38EaeDmofXPUW&DEc2tAqA3=y=psSsANxbH4IJ|Y2m5B&j^lTF4+2K%t+*IaIXz@k zPS}9z$mbP;p?!9MeM zLo#PzAj%yKr3ABN5^RKN`Z!Iml~y>5Yo1G(GI5ZrjZs}W8NsDqpUnV^R|YU%fcTya z&ck~cv+nztuv2#45Xqe>DmHB_r_J3bPd0WQ1OU??3NI&AR;Gi2PGS=F9MFYYc3wj7 z(p>xDJwfzFKYPmlPTY97QaMG%Y^wLzT6-x;>v92V??RlgRnX;In37_CZq# z!!H>_GdPVTcJ)=Shb!jAFOPT3y9C`8e9)Vpt(~8lJn$cj8)hkUXCql>QoCF(ndzr{ zbqFj?fWT@axW|DTjo=yrXynfJ9?Vx^?G3xcfNpQLHgF2sRNhU#3)>qz4_|CN+;RyT zLolA{4F%?u91-kesxe4R{$zXWU}FoKOPyvpn9*`VJ!M5W`wITmsR;H#vYCit%y_&+ zbQTLJbA$dUanv|R8;JmGd&sv*ZRXHv?Osk!wG2|~kt=YPZSje>fP&|(a8h|Jnk{aED)L!F1x(TT*mjcuL58YasmzwEibE#Hq zmS?9Rf#bt0V@I{=D$&|_`;)7m+8a!TUvU#P*Psn0S2J|gE8$=1=M(*@y?IGx@E@vN zIBz*zJ~Jy~kpseO^J~zivE6(?3neT#{FfLEyi5u0eZ#m_Z&>+?7rW|W9o=zdh(+ZrVNU_a zKzebirqda)q6F8gIaR5LJr4vs0W%hzzSJ_a71CSni*C}HhRAgXyY1*D3}P~dw1sj6 z)c}r-#t8Zs!b!{wk3vv|osL-2=nM#oY*NU?)dF_Nu}jZ7|LT}$=1~V=iFZgKl436d zvN#%nwC5?Vo6HuH#-zOwi!h8JsFo4;i`8t7tf+@w2r*lQ((xdMIA{28bQJ@5e?Y`w zI}!+6p?T7M(s_#_OZB_g>(%<*J9o=0&7pZ9%_j`f3CgWi%LTm#wuglg|E;|$y_U|` z8i;@=9EW7twXPS*E8%FlKHHlf& z#`+Q=&bKvxa0O4P(;`L(9A0v|?+qaOS1&vO!Q%tPXxXDJSKG#)bOUZ@wr1ski3_Nm zd1kT@8uF`Kv!?hv^Va60-PUHq@b8ZOeclkZzpWyR6BhnehpeuVNeWJy-9QC{-Q}_t z53U63>sPMYPZ|cA&p|{7GG}iflv9H-wh;k_K3OXXai8-fWQ>vJQr&(*7(*W-%ZBAvTBc1oND%*-Z7a*&UiEd;i$0h|9OO)XkNm zAL984kuHYSwnJNfwQL^z{UN+k{uOuaD>n>4W3hweAF&~Wbqmk=gX*xqFY;~em`w%t zc*t#FL{3OM5#V@nt0QO%w!2Wn9|c?{KTva~K$fc>#2jJ>)%C`Z!Hay4XX54a`Jk)ytcl+To&ub>kN1^)G9_Ur)Y&^~P7|`@Z%4VNg78 zOH_T;YfkcZsx{ZXAC1ncv%nn9EuawB-?2JMxSds}I~CP#XO_h=AAHk~R^igu`U{8w z!TJcmW_ip?!MHFMp&#EO+8bDM)xKwQ|4;O@r80SY2NI}sFd;}i0>FAIS^|ed zeeFXd7n9C|45!rKp6VbhsW9v|Kd-Ksk$h0!%FTv1OTKoC~f% zFWeG(c(1PhJ` z2?T}5JD9xfZN%76PlUfF{{^>42}2xW;XByA*P2*ag#&2JEl=(BGep z0Qc9gqaH;ONlIn9_58<%G+=+_hyL~~RL<_23iLrH3D{rx(MISD;L9KGjH1nQGgvNX zvBGb<#45>gZ?g1VRLtIqDqs)etY~YxSb4@+h7{f!0+EvcLvbD zYQzP4E8QwvDG_af132K(N7Kr25vkO%`J5=dbF`10BRb$Ap80j zP1gPp!6RV=KPynzW&?zs4@SecGuMD}t^Nx56$ONqqrg;11NK*b*xe;U!uC-p7feGM zu)p$?UHwv0R#ZW~M6(9fPzI2x&T{#z5k4Lg(|0(8J(Av67-ZWtw85Pu2%(~ho-VvN z)C^3Uk7@!=QCQZDJTUe63>?459p*L~Ea)m_$IB@li?G4T-i(<8MVp#WN$0N!$b6ys zSlC1^e|E!3v+7n=w4T-zS6IhOOS>4OnO$);&n(4Nn5AX)bDkAv2S;s|0M1$Lfo5|B z$)?GIg}tm^4;BQVS$zOgR#rX(V=A`?CTE;waagX1CE(|^F|X*kmP538cIFp{u$ZlR z-F0NQq1Ee-N2=yX9~`Nb@rhoKOh^#-pNPzgE-IofE5a5$i5ERSh?@^^2d}o|$sv6- z;kRqZ7jr$GiK;?|tZk{)%i9Rrr0EZ0-1$ySb)ad)m32EPz>9xK0&B>PpwkOT`_L>I z^SfAnQ?qwGggx~eVI3}vbu;z0X5Fe%J?$(SOufqYF~%3bH~=19$b<07h%cY-8 z1LDyGPk56DpcEz#!zW2O;m$!{=R@qlvf#h-{SD1TP)TALh= z*!WQrA4SkMLcG+fdL$wBERNYhEhX_md{J$28;iN?X$Mp$!iVg)V(vJjY+w5pjD zCopxhYU2VfP85r|U*@ZP_vk+p@VWz*nD| zw{CzfpE-MA-1rKU3`P)6sRA93mA`KSCJ;!_)C?oR5|w&V*&{0p8>{ZQ2Ov~SWN%rU zP-+nR-nDv&?WyO%DW?;J{u9b9T)oqlvkfGN|1YqzTuA&VqD^8z6Wrf=2u<*h_M)Kp z|JnQYwloLB|=0RA&l)rKH7u;jyW;LhfCtTzzQJ^SSLb5G?H!B=DVL? zRdr2wYa}dkcK6xjjh_U~^mJF>s;jH3>(V(Hofip({xh4>V0t}+8Xp>Kn|8#R@96g2 zDJut6LZmQK4S?`Vi3>8tV_y-uo>jR?63nUrxARF(N>9#*i3@>14}g|-T_ zjt55$iMQ*^lS#?&v(gvhxdVdRdf6`~kbt;BE$N&4gy~~DlVKuGKo&BsUaagQhUeO= zHrY>}%^M1Ff7!)3v3!;lX_Y_!to_*oQF&_R*0EF?Zy&;8r9uD2o+)n^Rb?_uEZ z(T!c}Ox+t1zGSF!QmVhMgU*Hc=Z)vF@iS8tZJsa|szaXpUzFPd#gl1bf>SOXb3qC{x{~QGzbTM=(u3n7 zUo?FN3Q;_5)eF~!OZss9x6e*jK7$@`lQiH9W5Yj?ow^RfQwzS24Zjqc!vTZDHN(k= z#`;$$w`^>1(m)oLjy3S{7gh(b3SIz+)+6v<6~e$Ewh0@(M* z9Knt|5GX?*4TkH(#N+oj>)c|@$%)D z6>FJ_W+8)=>Yr*-021#6O#Ool>WjjSf56P*_xh#QW%(TV@f!p8oE zUZx0lQ?CPCjAN_*YG&&_hNZBz&?-_G0oR3l886NOxF^8Ru}gpTk~l>!5kB5`^T4!E zu7&l~quv$lXE0c!o7ua_J%KE;oj6CUKazzN`=_ATPIki2YVxzLf*4fX5U{DjhkCQL)O}i`T#)aU+Xz1!ww$enEDUQYufS zR*Gk`1s;es5r7JGI*Fs5shAU!;j(BNvPmnd;B)^_zEVjwh=$1MZD3@TRsy3{X)#-@ zMm`_@_8KVADubvlnbQ?+0zb7tU(?E=>nYQ`9M9i=mxR>63kY$@7{@e17|hO+oyoGn>j*b7wXmvYy&xY-HVvYpPUt z8|7BOKie~s?|pa#hgB@PbN;%;$tVyB092dh%mWJBF>(stBYo3O3Lw<)8pN+GgGA|2 zA*RZL7-!nX%7-l1fsTvnyHb^ar03L##8HVlTXM+-UpUc=MOkK~8p2$Us*Z?fB>?t% z#@f7)T*cIAcN-xBOmS*_|1*r9SdeAxxc$026qW)OstwMd*ck5F+0l^S8Iw$*q>Q*j0JL_*_hT};&*+_(<|rVSW1w~1jrg$ zAD4vEH<2-~lvBUG^5FXQ%iIo@LySc^vJJuBfRiMp;u_qPYNDdjt%GOa1b)q1j?K&qc+#% zVwubqL4=npFe5mrFjQ;D_zGnkIJ6W`)}S%FrElisVX=Na8(0XyE3$?n)W&~it4QHQ z4mzky+|}Q=m9s#g)%-iWbI#O*a8rK5dFbAK6w;BoJ73VYb7>pSKaQa2*#|(v))i5% zP^@1rcJ#UbF(*8`Y{B5`uCvQ6oy|_hgwpb}EJ*!vGQ>lL)4ufPYnf7(Pd}cNDs|(X zdQSM*6C8GM`-P*9!BI!f9C$x&paH1(K~c{fsDx_*2>QMzhYk>ehD~{h6wCGJis+F; zAXj1C7L-MDWT(aHfP)nA$vflF(?`Yc?W?wbNFqY^(^baJCstgjTSI(C}h zjvb~R;vdPbBgRO=w*@Ldzx_WS8_oaeU?$g?iyqAu2eX)OQ}bXxXIm&plqb8{rWWX za_uhbwY<%mhjY5pT&W;GwGtt)&@v?4Q#Sz+wT1JhYJQ2ubPuGpr?rY5n^vt^bIB{3 ztV7YXzu?;av6zmFZ#_me@vBx(Tnz8IF!WAS45@7SQEFs~)8lLh_(g@QgxjYsWp@o` zYOR3UY?ha{IL%J~h0yzCI=ID!^RFjkanZ7(kuk_9>^NPJiU;DaOBEnclR7cU-K>j! zj;2d{<;r~tV3zwAp35&e%BVM|ig+o}cgds|n7Fat+B>MF;~NlD0wovs+7->F{=?3i z9_+Rr~JAAf^<^{EJ){qf+AYi0@xqAyy6+; zA#O?=XRm|B$}YMhoGNo3N1U?s#k8LE#a$}WPoFxFIRr)VAi@-qHQfEuVg;_yK8fA+AxlZ{3a8ACEFpVEI zS|h8fE3N`O>$OQaAMbMmWz?I3-kcw^-PK3W{>l$AGXwfGNZ+;qPq~d-AT?`EG@X7c z64%$K-sXfe-Cwe;x+0&L(@&RMfb{rA6nUE=dn#XEdCK z>noX?w9q@7mhgSFQMONHnF(TXXKt=c=+Vt z<1%SXVnn@Ku~ULGZaADmRPEYj1A1{z9$`tdY>^n$ zsbJHXISq4WLiq42z63--GJj(Gdr($D9u!+NzwNqa;+ov%E^D*WVvr}lD(riHQAqOQ zYeEZzOXBVvvj8lt!i5d%yyii#rBffOKApDYES!GO$cUamqd;MH3{{u?_r z{s;@3kC#u8AT3ZDl?N;QK(Sc4=a4W_n)!8BEp@jyXHJQc4QI6=Ys*?_+i$t_u-^p^ zf5EpAuo&-UK{NW0GTt-+BL_RzSc@$77$##8pvijkg|rASNP8MLI$ z90AFuUDmAHF&Q348Dh%5Y1+pM!u3xbk;(AMbt{MOi->!{nonOV2Oa&`Z9LpEoLqpo7yjWfsI760WBmy51c#L4QfbTjiUeIgBw`Zc{I-Rzl+Z?l&{0+;x4 z_6nO5`&?G{le`0KP*SMAO|=3Mw5Eg_MRsYn;x%ohlJAiOjHgX1Yw60z6>TUUrJeGu z&6GE7C2enuMcSPfyQHz&P+bn8w`e0!dks{_JF_`~e-vbJ3BTF;)0kPP!=Z(~$VT*w zl70H((tb#~l8y(LtV4}-dD0I$?)*ug^&?G#e8Gbz(+3;|N*}zY-J&{uqikhbw84_~ zr68ggB_S-%)YFM+L7Aq^v8*{ldsoPyClTs&#lM2?3|*OAEe?OGXH_U^Lw@^BP;-oBIUU`)jqui|E8o^XJ1?Xkznzk!eEYGK z6SjPOivAWbXBi#knVYraf8nx*Bv-SCsabZKDTOJ|*(crY^s{^SD+{vddk966LrAl- zhCS4`08*I6rQ|EjXVug&yWI^Xmwm}T+U-g{+86m)nz4@I$xfXfGR^hz3j}vsj7*#~ z8}igHa(bSB<#*b@P743tam-5t|-B#J6PPRJF?WDGG!D@TRCE0V#!d zLn%c`axw>)Doc9s_`SK(ngjOlIk5NKr~Jt6SY`1DDoWz{+7I)7a^^LuT;R(9w*j3~ ze0>dR2`#7rDancIR|;BTZxb}b?0NmSXquu<=8f5x_$qIy%@f{IWW#Q12v4N2m!@2< zrYokhWbLhA*nP{m&42&ZWaP5+xjQ8Ux9Xg_*cFPZN4R#@SMrw(VB4Mi9Ye?jtgK`y zuf|%=lQB`IP?5e~J^enU`rO1U#=9#x-Iw`(j_;-s4#CN#ocQYR&FRnl%zFFe3?Xvp zFUeQ|xu&~3B=r2ZpA6ivX-EGB$omh#(%OATq_)^lU?3#uErc=NB$iWANyA?=FldR~6~o1tlYPGN}E z9;TIos9r*`lx4M0R)q3Kx5I%J7HE_2IARoJ3pSH1S%su^ms9Cu;S;+Kd!|(l2JJxd zNeX^~=0vaPh5X=2mKP0*>&QTNcT*M$8bMF?@JK zw*W51#@`Zb$jkZX%W+YGPPsSoq@A^r|DHd|hh_AV*2UgH#{wV$Ll9CR6p~_`W#RlB z8e?t|$#y^GG9FfwjCe%vhsE~?wCHZEv}v<)=i-y7DS-k}<^_6go97qNW#_A#OrM_o z8-~z%8XBty1<$XXoE3^i)j4<&ICfq$zfKYqQb(=Mr4_baX0ary9EMlKeOwiT0bOKA z!ZucGf?NV5GFCMXa(bvkbuQR%vN*Mhhc*y<%)l9t1X%6GV_aL(7j6=H6wOW+9%I~MG4Bb7Vd=Fu`@pT%n;`#ETkSU}>j>$HpyU(m?D(Ux4u3gAEjjE;l2vY-q z$h>x3Wm<@}nAESD5t&t%&(w1&dj`g+0s!qs>eQ1bh)>$iC%0N90=;Q2q$>3W))P4? zA_>VLYlFl+65<7E=?F26c|N5$E9sA)~2Gzb516pelI7}v&Z<;}E2z)%Q!OoCO5(J7|UVAN-$bCKhpT#9M?3Vi)gD$x# zC;MI_JWKM;QF~s_sLi=dlAekC_z23evGbaJf3Od!4p(BKu#qFxw6?nbl`I0tr6q!hZzc#|YBuXPfX z{-W}X=he+Ax+;^;dJO+P%P5ZNb-4x6PAG1OXy$@ z{kZe9^%-ZX_}){$_fyKfcWU=nq@Xd3|kZp)K z7a^eP{5f^Om8DbmZwf;bSbvb2q2wJ|YcU#0h$#sdpR0gC98pw^@ni_Z8^Dl08ItiQ zpWV5mDGH}v5z|)#!C&HQoF)MmKzuVf@_RKM5RmKwiCGmYaTJMJ&LqLFwy11I1*<3?UtCaU-^M7}9VEmp2P2tMUF;Y7TwMks=Q3Op z{N{wt@$I(WBP`6HWO3~JK-eM@J^Wx|_@_gA2lQtug zT!E8zV(7p&oped0z}C*r0lc)xMhY{FQ%(AGwMy+G&5T;o0k1{SfFX_Jnb)k{`;N%%Ys?d5Gb)uNRQp5mcIE% z*0G9zPaZv@-^P`u+A>X?ChIb_SBIWt(~iC<{2#+vE2a&eJ@C&hT%jk%dcyz>$SD7 zqBRghQ0>Fbf;uHk5c9GRPC{cbylyo1ADLx{o$C|u40QpODhk4%a>WlQ4G}fUj_A%Z z?ugMjgLrI~-*>G_5Cif7WVaV=;WQW|?_}%O0Gtwax*HGEIO6C{u+2sq*XC-uKhklj| z0I5U9i-#cvV7hauN^nq#21>s%ckUX#P5bE^KWHcr1&K1I%%j$m5ul}_BY)lJDCI#5 zHMF@zBOTkJ;+k=taTVmnh|^R~MnhC9tW+<-&~dH*113-PKHY4)AiqtXK5=aV6BvgF z#8sfh(hkgp7Z+7OrEh3CoIBYj9*8CMdNrapSictoL-E2;KG)kw8u5JF9PB+i#D2SN zb`H#|{kaG&k%n+@}7WB+hx^XSFKzIk=D4K@ANBbzqK{PcXAl2Ak80m_(-O$vUE))VBzeY{r9Au7lU|Fm-e4_+JlI|nol&-V9F z0mhL^>=76$_i}r)25~pPxhqtktO#~dRyr=pC8tETc^e}GpI3lh3CfMw%cOWMy@G_<2D2WZ29(NjF)5%v zqG+mZ$7xW4xW+N6n;>=6|GT9$s32%5fuq)Pp9xnEo*7Z(q_rwF*jsg#vI~Le zVvUkrizTt>Dq1D^HH@*c9qM)M0*7j1JkfvS=y_E-9wV|4M#|px7@P=EN1yJ1G|-P1 z2gqLG0zlkTP?Dz)7<|j`#~jj|C0(a}Bh$<e9)?Dw}rr6EPZzRPW0BMb6Jc2 zsB3SR%GqsLs8{0LMSVxf=!<3q64i^s zfRH)*o6FHP@gr#Y=JW6OUvbkp^;RTE*~i_zE&j-<^bt~z?Bm`~FZm;<;^S2Ybk~Bs zB7j+{O+*??25mB%%2!F02 zo_OEB93=3G{Y|;Rx1?-^*7m=+W4%k|Gh^`^5ld$71qq{S7eO$j;9lK>>aKBfpPKF} z7hw*xmE7?b<6@jbpv2L_iNfiEK#Hs-N^j8_z|La#s@IY!qo-0fc`{R!hT-H-GO8Fz zdMlP>K+&TjkD~yhFyyU5FCF7ge?$TXev^j+ZS!rMt%X)uLBlYyaq`-kKowaz8g2`| zUytYk=iOCvy!VRsiPI>G%yI4T)Ew+@l2(n`Iylq_|H)`NtL8eOXW+^9CN`;`=j5%8 zT^7IKyzIR!`;O!*>|{zj(RpTW-F^3C0vWLGV5ay zU=c_84M6pKA|DVW(dfgXw2_illu#~>lgz>r?wl9f+vU{+vitP17m&GYynoAL&)Tcd zmrd`3BA;jni2(##1%atoKlLi+5gTe@Yx`Z<_(&ICpoC@<_8^&}`kq`7w*vQTSDKZ1u zVVr&LRg4m*ApH`>lpGd43@NP@3rno2Cs}n-RWw*w5VpJYO_uAb!X%i&{Vz#->D78y zTq&C}dnzk0+22BW1?lv(VpG1czsIs431m|sv+R%asR$Ihy>taM-Tb6t zGSXfY6rBJ^K)Aox)3jnT((Vv5`#i1~rR~(quCGoya@FGBniX|eKV7LiJJ5R^?*WgsA%hF7gJ zQHQ?=6*;K3E1p71Hcl*ki##}E2S*lQIwtvz$UOiW1$s9&5Ntp0Nzpw$qf{M<)p}8E z8d8KsDA7pzW8slY-$tUHO2wRdY9Lb&yRKK8D5^@2toPI;m}(p9bQMb|8L3WBj9Rga z^Z@kRq6b;N%d7x0=TR2O{~&EN4kIOj=MhR$t67WngPYQ@KMt#giRVt#8*afZ zxAF?MagYa)HuByNJgbBOXYP0f>?qsQpPQG+h1tg)n2jF7CnLd%K#I~C_?UyD_A*zy zJGWOF8+6&OEqiO?M+HS5iIyTkHdE~XGM|c{;txeM%8;1USi3Ztq(qaXH59+~U5u4n zHDx9qWp&$~n)3w307rNqxo7O~eGY&zXa*4yPQfi=ajw9H^Zt_zIZqnNdVajV4(fK@ z=2o{F4 zeBkQIU$)pVC9E$mC&?59p0QG5+SJN!)=&nMro@>*K;wy09r%JzO=hn?I!aI>ePNX% z{1!qL6Zul~a{2LfWjIt%vtzF*6V`nfqjNO_5anpp4w!Q6l#WmZ6k1l99)V@Oiil>U zTZ;-(7D~^`&YfG`*!ps%Sj!y+)xVIMmPPbANwv<3qnzLkqR=ub^Tf;-nVQyDwx4GX>O0j z(UEGJouKgnqZ6$7`~uQJm*o1{c_-yw3i`0VaehIq`of98uF>k}iO}r=_$|s86gS)p z2ZhdRPElQn!p6Z1^s;`Jp{h*l(k-dBAHFWC>W6=>M5ya`cb54e=4<=eiPFq?zmKBd zl2fze=U?gP7Ju@JehX(`5OC#FAf2M0?sI3frsh-QJU!M$uPZ+x2_>knRd6Lf*NTSx zkhlR9$k&vE^GJXv3Uj2OT*m21qlk&iY?vnXtpp(zjeU`pfk^e?y&Z-A6j&ss2Gf|eW)#5k%s9KT{4`K4J~%T|G@X)<#! z_`AM}9GV6;Xm(c48Dx}PXVU(aSzW7MCbf6jVV0)hCy;+2nu@@9l3=OjXrQ|i05Xkg z*$%|hi~$V}MIxJ$MYwK@`R>i}g#^w&xy%BY78xT$a97!Nz> zEKon~IlW@`92oxU!5_uSW|i@jiGegOm@IHUpiHc-CdtCKxmlnQtJVBEE7JyU0$(TB znAyid5$K~bXGY0vq|8o#=zDAJTXP#of+8*P{8jDfwP`e>wTFD}+1W?2$I&C5*sE-A zFL9K*u0iIkMfonV#s?)pF_34gvB3YE$@B&xa4HR5tTN}g|q{@rfOk(ai?Do-rJMnC@m1(l1QCMeG_tp;H zFkJXk^H(Po(8lTl$1+taonyHB7yM(wJsRV_Tv(d3pi6wKxyY&xxs6I88{wwoR5Mof zP&afUi4bY`yORN=7OYIgu=QZX0xOP`I!dk%4Vx z?8G#YQRV}UQV?!^iP``(WN=M=L*awtYfKpbR*fp55|v@FVD;Gu_%h*pnBe%M%Z)tb zTEEq>(xEx2c`1=3Atg&HhsHVj%oZ4>nb)30&6H@cC;LvXb)9RM-^ktPw5(5??aTP) z6#h~RbA?o`G(md-lLSqmv653Y%Pf~XG9DV+6_(V!xBQlRg{9z}CdqEscXheV9tC`) zc6p86t6DkK=9b+Xzbnpuh9OwB1E)6qF3}Lfat2jPT5vPr;PTI3w{@N^ro}L)9X3wGSS5qt`)P zBe&ORnlwjURpv_Sm04I4X?K)F`i$OW6?!mRvcWs&E`G&WBDsnsP2{SsdT$(cH*j{l zto=E;9uW7#a_2x#X6T2mb}SK>7wKFkJZTfQM5R*Odix2!jjrg6bNSP`rk#TArz9SE zlE$ufz9P}9`8@y3GCvha;)&}b$`-QBTvqgGxfj|mb;v38IZybC$SM^Ez<@}JI8>#L z+5jd?S{Ha)Cf49W)KYXCKQ@9_~P5(rK@2M|_2FBLHn4m7MSIvP9o z8h9diEd~YfRXsNg5G#I@D{s+73xHP5|4h=cb1bU28&XVQ1ck?$wrWuj?oI)*cIf_V z4N&gA+!iP-Qirgxrp+(B__F}V5Q3y5-@#?+73%l}{Jbv}el_5#NyfSEgzF5I5zz;F}d2EmSXk(j} z&~7Ah^P8o$W@)`ydekgE&SykpDI zJHRi^NA7@_aD*)u4;As?g3bc7fUsqNo}|#5&KL!<<3a`}om`W;4SJ!S`#|i)%jBI6 z_(0(0u$K0Fa%98&ScTnja4!M3`Z7!`_96#?qQS-N3C;_tXq#d>Y!@d(_C+Qg(XhxU ztdWt`RMoFVYL=_4a|#cW-k1wjUq)G)G%^DqIxFhS%oSE;asgx@JK5w~fbc{B%vc3; zfFX5=P(ln-ou;nX@m)*?%ulhIxx3tw=@%ABv4k}c-N&5l9V0#)q1_zx=lN7le*8O{ip;QVn)-^XJEXJKlYHAoLg9C2 z|JUhqOpWMj{U2=_2PKKw_J564*!n#p`@hF)>krr0o;)J^zqQqef7<{3OYHxg+db=^ z4fZOcC2(UbI+#Y(XyAIg=A0?wr7+80?s1i`qWJGu{P*jsS;Khn-v<9(Ikp3txe*_p09BQK~-f~wdUx{(@bsLwmLzf)T}K6=gtfTEXh3Xn40 zyy{~Fe8Vqg7sZ6lvv9*chenH-9UoMi%GV(l#|VRDc!^)n4v1T*Cy`#HwvlRNiLYKg zJv|A&!9h@WepELYSQ{a1UepleRckS}s#1%ws?zTGJ-IKm=5`N=aOL7;DgLZITP>Zh0w#nS?}un3hAeeI#5^kwG`^;aI6gqcYj@4N4Im zHb}j>whR1>+CPe^2jz%{HMgSu)jDUDetLcW-dE_xE@Rg2#t#{4F56$?H)?nMqtfc# z^mX*J8Iv?!s>6hLM+w__4OtT4wqBqI9RYCc@rbh%2Oxu$*L3;nZ+HWo4(cJIxNHea z|1C;OWy%Rl9DlWm!^rT7AX^hrrGUk>wf*eqC6-mb^QTx$c}E# zBbQQ}`{D$ULg#uWKFFw{Q*N`>o)?@lNGF_HluIx$N32$Y{!3&C@s>kM2q}sZNVrq! zlY*qSK(z#MfRM~LE=-&Tyy*+SpFv$dp4ELGcoc!w&$1wgd9uXsC=I88Grm8;u%0-?po4hBrOKPtM7_1|ES%e?LcW4Dw@rFvp#p{EXC|6zKD8gGZ@)Iac z#(M99ZXZSvrnp_>ip0`ylA)?6>lvI?J7PA&7D5Tq0}voL1Ggig`A|OTjBdQ!3WF)l zcpS7>7+BjJ);AWCgbOK<8-En!vUxD5=wcS{)y}3EZPdsGRrY$J{>w1q5Ne0c({O>t zZNa0=+ZaqOiA!kLtcoNHK>8w-PlJYF6GC;9;Uwju=nqMu)YG_bDu)g)-GCwf_XCaI zAq%yxm}_U|kf^)ps^-AS$ZF5n9-28qRqXEc=dC{=$*SI~IoOvZ*rxEjyeOMRXwqB%!LY;Pe)l_6WsVUX3V&cGhIBZ8Oz(*d(10V+}BH{&EEt zEtBLb2+DO9iC22LM@sF9Zj}5Yi;YeLfWWe=a5&U7zT@oc6)t0gc*2vQOvvcVoKw)o zL5B#;r>2!A42nwtBvyDblyQd^nARqf=N0A^hOt#+gCV>mo(ef-> z80yQksN|}?Lh8yVmEsv7siQ-*$<|=mo6_#i0lWF=q+FqWZ50t~k)6@ql9%S`9u{@G zaf{L;^a@hQeSodbnV(K8AWeK1i6-bJuz-M=D~PF4Zx|i6kQpio6(r0PO7G;KRnhs~ z+*CG=^IVMC<+r+^ajoKklG%5J6`i2Wf}=%7>7tuD#heX$xFxLOomnbC62OYJN@u{L zf6Uv|s^O1li9R4!GY9;V~>rzeq#g!oC!YUj&Hb6H_@ z$h3v54Y6r-sMr^kTX(<*WNe~z6~4JeP0n0DG7ks`JKz(SAwYPvD(u#Sxt$ODQ}7V~ ztQ%&>wHgAjpB0o1BQ9ZUhiv;dUYN!IEhdb65{llO&@FeE{|d$b=v*2e$uZN{`GH@4 zxv>kUK}<4glD@z}&Ofhg2|?=kc9Q-{BCL-v(qR}7Y>n{?beHZ1_2f$7Z1C$JSUoFa zS5wo_2^BDxY{6$6FAh+0(SlqzvK}0LcW_9Rx4GtgvcT1ohkR(m%ak6IwcOnA4nTOC zl)-8Lxbfm>yDfbvtw}!OEY>m&B3nlbj|#3;eo$7IH2N7yehxAy%=mHq?Cydp9MJGD z7mfps>kk&fts1szy2843+Dw4Bd+>dGdw+iq%>A)9@hH$JvSd*>XAK)$I1>JV(Uf-u z!dN}QBfog8kSGY=JW-kG^t6J0%#_kCAZ5=j_^fb( z4VtjdrR+fB;hQsFqkBM^%`)-;h@+(_6aPqZh!8w}8J zxiLp0iSaip*l$;42X}k7Xe;nH|JO+@+6R+VhDA61jv+pTJ%e?{`9g16Rir3c41iwZ~0e`A~DWKB=r3lHYt`y^3 zzEt_L+kI&8r#xN$=+&lQD_$3=6-e%vBAhpi)$0Cv!g|>=+6_uy^+4aw6NBrH=1(!E>0i&N((6u0Zy0QJ{(p z$@v(Js%V?OxcL)TM{!SpB||Z};hW zU5kE`b%<{pW40jJvj%{Ce4+{?yc9B3Tsxwm3_5-aKJkW2%*^=$0$r0xg-`)zFmi5l z0+>)SxqBVX+;lU#y?n!dk_}E}8|=PSh_#PK)W1+nq)nIJkJ+ynolrHVA~ck)$s;7u zbB}zAix8Pbok4~n@}9%d`Gp++}Nc#d1SGse{&=CYz${_@Xu7H;X)@W-8-KHQ0@ieJm zbxyY|XAu((n{`aF#2!G5bKI%@eWUjOR%>6MLZDNz0kKXIUM#9xbU70(Fop*I@_oAR z>I|}w0CYjpap$7VO-q7~Db*A$UBZJGRcPhJ)H`OA3=&yZ4L}qyHids) z9hHK0a0HOn$&AU3v<6NRhd2;XbX2^|%<&Z@%K-|hNXp)sDy&psupCKZYe4S~jKyWJ zGN?j2e4yB1ay2wxt(s-7=A^<*hX4UF@NbZze3%f+o6#2Ti!j4|i3&1FRsWzL>e^%N zd&&;ZpgPq^o){jEdC7=K9Dm3(LRmrpv5z?7%B9~{^m`@jH_AH49kBku(#nF*a_mcO z6d!ZM?~(5*O6|EhZ02TGyA*1gztYmGXJoCLMUd-bM%k;;L$hukna4VpF0hWqkSlWO zbX+d=%h8)6BJIosDgiL~NTSu+f~9`+rfes44EH-lRo!3&o#nh$6|~zKLi#H(^s=7t358%$t(Nb+f%x}6X%_bp z6ucFTTImBg%7a}11gUdLzU0ZmqMwqUxCpF?W>CqR z6s_v*et9rZD2(gsD_fR({9gP(Bc1d|(BxPsm$#$6*LW+A`n91eU}LTzaZG}_dMqGHUOWgYq))T&I*j=C%V=hm4A}z;N zg2JH@;`7~2JQgW?8tcsR5OSmh8;4kVgiElNjL!;%qdcQ8*+S`$GBpVdMyM-9r*s6- zRJTG7Y3Cqp9%ZKyV;EP&tTc%1E_0=wX=Mm~VvE~7uocos%K)`>Nx1AbSa@rSB9Rw~ znV$~v%@)>pMvhBS9srY73OYAMvK<5y8nk3tVBqDq;&(LladQn1tqH>r3Q2iBBG)5`cy?b(B~l zyMaOhC=?2XdQ5KzdBu>54#FcxAki)kq+NVcT*}qQOX6#tn7jFi|=ht{td4e*I(*` zjxowMY^4IzmOmoW$mtYHP4O>VjQx|UwEp48Cjfr6=iQq?&w=2?d?AxFwhsVDQ2bje zwz?ccGDRgh3I*W@?Q4I*#x`TlW)qKn2nw_#l5Pp8;D1v3dKy4{FWBwrp}-zrNvXlh z&Z4HFrHN)$Md_R75#1JarH-c3!()q@^7QzSa-m$@fBM7vWtP?pUl=*o7&u%c^X0F= zGb?co?X|0jTH|WY_k-suP1UA%GQCQbr7{WXHLq5%QTdLn}O%y0fzOf&C6eAV){| zfFWFqz=)8I@v$Z;1_;RGG^Oy%oXQ}J$DCA34l6>{G(ilU0Evp#o-0#EiO5U?+G;jU z$;*I)okl?+5KO1gyy{uqZoBuv=%s$hmO*TZNDBrkYj>TTytmLOh&%f zJV0nr7D;yRB)T8e5M^>-(ll!nGa6O#%vYoKnKekYjt_b5Nh_ z%oK4-7JxZ~4ZPOiI=`&4t4@{)6j60Km`V<~1pmmBSs?NXy}_VMX?4zp%nIm5bTnFp z6jX1d`8+Y^v;)#=v0TPxYB4urpfGcwmKya|Pfw*pZAqEqK#`~}SC!x_Df$d_t=g;w zUYAEvFxud9R{6(QwXf}@4sY|z^4iyxpDH(HB^tr$r|{c54iP39^}*%g85w%f4e>5l z-@9B73Sdw1R``Q&u55n<({Xa3E{kYT2_5a0=z(%2mVmI<&pL0)3N&Vq$xkIiAz*Xu zI4Q^F5k##0ef0jG^#5`#JGm6{BS@iui=GG6d44x!r(hAf_SJ{2Pm7T4Nl5RBX4$0i zX12h^CwsOHQ;EqR^6|@%&1jAdOKs{VvM|rR7SFe|^k9M-AW3(J7VVlW{)#w*#0#6R zPhRjG86Z2mGPrvvBMK1a8Jx;F)%$wpFu%}7ruy}X<}na3;x#XN;`ocii zMogrK5LCBfANT2s8nJ+6AjHo{HOau43+b4sTRnzm$DQe&d}_#SR+}UPTKlF{ma7*G zrmi$ZOLbWE%N*DJa!z=NpHpdn$d> z_fZNkY~b>C5<6!oD=Ugzi@#i16$dQTSfB4r(k|+wmIy8hU7eo%^!QlaDfHHXx1-D2 zvoe#bUZ}J7Ml+s+gb{d8V(<*-^JRtx#IoErD#~{>%GkPQDesl-ipG6xz`!eB%@yQu z@y<0oki$fYqYK?VmpKqy`M`%{&p+N_sKiHS$=1gV3w<_zAoE2o?9{?Le*Q4Od-b^g zZ0rI%fxp6pHBWC@I|*bUSmH8_)ri;TmWuW3yo{KziL}Q6LJ17j!&+*O(gkHtFg_lD z@%?J4a;`)L;+A5>A-m#aorGD@`PBFWRzl;zhePs{r&X*AOaL@Fzk$B%M(-^9U zbXR2n&!98Om#pTYw*Gu$|ky6}18#P`Z_a(6T3faoR#FoFL>5SHHm3fXaG5kfoiFd7uUV!5Pq}m28UFUm~ zsO7?}6Xx?+?z4GS91PTz!=W<6SlOW>D!erdOWiG~F(3HZu2z%I$mLRMd!THN$=!Cv z_0Z?{8k2#4t2ey*xE^7;{jy`#?Va_VToMlJ9IDhir=TDKZ-R}FP9rLk7Tfb=C zv{$sUHqi%eYKU-Z7(}fE~ar}zq9Cq!_>^{dH$h88aKE#;+EXKk`#w<4< z%$%PeK9={WB(9b6eE0C^^y$&zX+@nQspgNppRSE!`%3@W*JQ7of`SIHGj9}M~t zZj6qfOU2h0+gh7Z*6eAP3b~!8ty8?2}rjV(_^j_u(osYFK=?8 zrNq)H_%4WBtwJW0{zbn?nL#Zdp64qb8?cy!|+qf9*6{s#rRQ&Pe z{xM1(pPo5=KRV(j7<|!}L*L2rF4V#+yqS5=_cj93WqAiCuu|QM3f>iQ@#`rv{)@dW zu-=aj`9y5Rhh7#D@@ra*{5N}Bz$s3}Da|Nx+OoP>u>v40+zy|dl7#vE9QPp#1pj!^ zTte?d8_2ZEZUtq?++^_P#^-Xq1de|?hSd{GhH=6&Jwv)Ah9mFFt|K3bFyim{_!*FR zZpyH!2_!ijIh+G2Ln6b}xzY42=cs&Cs7$H;Z`rX+JlSg7yd43Lf%UfTTh5SwHbyh3K0=1cyWkCZ&R+z36grH1I_{(<u)=~TAfi$_n9 zw|1A#Ug|Zg+IaxLT^z0;Y0CYIq7@n?iD^?^Oliuz6 zhQn?|Wg5yPeaF`Og3g7sjox0w*OCr6;*Z?o#Ryuk&L;@p=!N7vr7AT4H3<=w)Pll(xOY}j+oWmqD3d;6E4Y8hc*n0ZeLHYFGy9t zZ|L#GtMzt3>F*63^|=HXEQ*YHcvqN#9TUa+B75!9ZV^twGO7?8!_%3(gEf=|{j2E5 zVMCxtX(mWFq>36Ogq$?~<(DRLu!Z4j;1Zg1=T1@ubF!*LUA4k2xf9?j&$MUv+Dh)XKL8%k!A5n z0J1c;mNnc3c{#q=X|4F!W=NuUmLk`T_YP`euvvU@K}52+-U!@L%lWlKKXf&KMw!`I7^zC z#JbkTGlQy1V3-O?48z`OkeZAKQ>s^?td$jQ3ziUt5?olfY=x!Xb~~nnAYIo=r1VuO zuy!3RmtZEF^wH!g=;gfS7SZPBWs2MrHeAU6SE?v}DHkap{&Nt|4M)<{v z%F;$*E~YbT9m9Ldr6TQn5;PoFf=lCi`8CGnWj@9)&EWIy;da;j4P0Xud~v#sUIy%u z!dnPuKj7XYUFF8!dv3AX4tvCYr7G&&n4p$>_~|H>?J%L#Z|yXyZ14BFJ&-o8Z?yZR zmnAl3@J0c>4XkTUaXWqCK=!O|6)v7Cfj&PzJ3l3xcMBgcIctkji;jWt)dzZA#)cx$ zzYsxdG<5OJH^eyMWb_b@IRwdv#=k0Fgnzz~RDNa0S*F|w}Um=xL*fXp65dz1g*6W!~fYkp{jS;PB z-tTs_>wR8Fy9+*oJ$ZO~tk*LdDDM5jMWHV72YxDFFJ3{VKE%p{-*UEuyift5{38!I zbMcBV3H21O#tqxh*dDiTsboQQ$Y2e<H@d=+eLX)flVH@LV%qg^Gs04t^`V<}8 zGkd>K=(t#7K%U*$m$O~-SNrqcKAG~8N+N?P0Q5iUP0UJuc5Nb7r~FjCvbSS@X3$4> ziHBYMVqCJgo-scu+OF6ldpbw{MV|b@s(4UEH2}Z|*hJBn-)i3&kkdyx0;wBlB>M?` z6HUJoTIg1+bNlQem)qu`>h}3!BOd&27F0<#2Q1T&P4tt_-cAohaGh@T(eiflkFU5tt?G)LHnXg)UDISwE15gxM0SjcaTjXO@xtXQ0zs@x7OF3 z1{$@Vi@WY>#=e7aBOx~>9D50pS~JQPuQ8{^o*XR4UgrT0XIO@ui!7HnOIhG@>WPOM zW!8yTStHHRbbL?_%Ch;gjifmw&}RFx^zy5hJ1_s&%ks<19WG0|?*@}WM*J?^2r~?j z?!?rZcI?jfUWPBfyt_>SBGS~rX2q~=i531O)@wPBDkt~7D)?|n3gooKWu_O5jZ2j? z*P0iD`*>yaWz|zLb=2whGEi8v@|fuI_L_2ZlAGbRTIh(kC@`2T5)RaoSw~BdKhq1? zvDPItcGD|ff26Bgq#X6AP#oX2N;v~ctU+O?4m%rrtk&8M^4!0d(+u5N+DQC)S4uvu z`f4fyVD)1!zJA4ev7btQ=np_f)0B0Y>4N=&{FXnUVYH==e5_gW-)=zUFN8^00PEK) zY19_j3KwhpWs9)1p9Tc$4`$+LDbA^BQsEN0$!p9RAMjwB<^DAB%)}s5Fz87o96Prx zmC#&F^C?+ux?ou<{&OgW_SnZv0oX>MlAXjhr?|_tO#5it(y9V52=T@L*=mHQ)T(Uc zr4j>go+NAmP$C9c(y8?qs?0D!j2Cpo=G+{B?75FE)LS(lqkwTo_t?+EMIDS*h=Km- ztTl-Eid3-|C@Dhv5!xGwf}nsW3|XhQ#;PF6x4`)nJ>)Zu-L=%O@Gk-H>w=(;5bPS? zh}OW@k0Qntgn>U3Cw&!eG=#+Sty1eOl~_Q60AlVWq**XmzGaC5L>l8g%{M_aB3Y`5 z`652@WXw+Ds$^E}fJt_OV0ba5;&D<2rCiJ8b;3k#;HiRZ zn&<$r?U5$kk>S0;ThUTnN|(fsL(u`0#cFfkYoV%Iw5sG4H!RL(8Px1ossr{3fmeV} z3QjLHOc_r%z!NXr?fH!9#`*1Lk+$467YDX=YsOjF6(< zWhF-?w6WT@#H8x9_<5Oe6n%q!JbZqF2t)5vWl)k{lVwM#P^1C5lV$g41qG7%PCtJK z3U@V##i&h^YmrvH0(KXD0b!ZVPw56CYQkMP!)S{mL!k+`{X+8~*5V-UeCHj{UrRa& z6PPxpyVfD7w)V-15nG?5>5*rKkBrfe4}aJ;%kP^3B1TEr9||B0m3(qNfaWvapDy2a zDJLR36qs~~a1kh*Txp~+oGe!a-E!KUUAopr`MuosHP(>9CjW=1z(a{Zi?`BxRS~r3 zEI$?kYVV+oWZYtck#7fi37kCK_P-6~2EB%F@5OjEvpAk3hu0#rcG%vUctwwhD@RRnw?dBf$W;_ncJO77k z{7Nw+vB0oZnei+kFrxIpFZT|m$~m01AmYaP1fSTI#LsEqIhdWB$do8=NRM}vmq zVs|30LSextZ$%|^3Ik@|$=N_gz*2_3d6KzR-FhKX<#ExtIP^u9P^e{Qq~-O@jBxbTgB=mDpDNiy+tVSt)jIAp2VoB!%wm^_$})r1?m^G#vg&G$n0s7{hvm$=*cn)a|YhXH}q^4 z$-xP%cZoL0V8CWTa&T)8GI8#Xu{~KEFjEybI90j zsaQz&&jH#Vr{TBW%YD{S`OL^j2W~OoEmko*I^v;?Db1XI8$vb&Ko+_+ta{dGgmysh z6&jFWzS@yOH;RkcGSKlv{7E+9XfqJ~$lhlDv@zQ&K0L^`fel88MG$)h14g{?pJ~TA zZcpgTu0im{|9?M|t80o|_U^V?uSNUtf`0V$`PuK>Mjbz$R*U{d-FBV7NBmuW+EM3= zC~9;Xt!ArP?|xB_qEf7LceEm5QH5-wx|3)`zd{M{e zsQ%~r|08~UYfB3CE)i9*8Rn!xdoQR1@77~WIiBWc&yVh(P|%>oXg{x68!6r#KS4gU#POJK&EHEx#lU z*)U7wsrf?Bu`ct+_-vleajTg><}dO*S;SYsZF(zj@~`v`kNkVWr)LgYnV&7enjP5g zpPoGV+nJ2eJgdDP$OnWcnPIPg=aWDf$U$>KV}#SE&AmA87*@AsgUJ>@fdd>s5wC} zXGyWQT9Ty;b&Shvqhw14rdN?@O!0JyFD11aCd;0oDWCb_aJ2)|^eUb@O_O9PXpx@m zEDci`Xk_2sbB3jaP`;x#(-c~flDz=oR%|}=EMA&{<9c#)Z!sqWu^K}Yblph9R6zlX z2C$sv#(f+FHOrv*U63UMmyJgww8ih}?g^h*gToVWG@U^Dr;+|>qC?HU|bd;H|M!d-HFogCt!Q?`WDN8 zAzPXVX$~a~Ks^MxEK(2!Xd=q*Nrc41s9xj$_IqLBRliY-Iz4{dX#G2eA_{l!V=@0* z1|w2Fap!RSJ9^bXuOuZ<^85A)kP`zKcyHYQjRnRZs{g@}ugUtKsNU*y>TTBlG`oN5 zfBujkV^t*-NM9B!@rDY%-u4p&1-FA1yB)OocjwOVL-x7SBm`u?y0;dAD z%I1=HTStg(L~xgFM8&m=fb<|X5ZKU`X#e{-gGAttT5wSKVKl#oi5gChEE0$Xx!xXR z2$yeFE#I&!i2M%Kl+kR$L0+mNc7!a>Xelwl(15cd5sc>)Z<)-zN!Y0-=`zMhNfn)1 zTrQggJCo5j6iP!((4OOTjv%MG^cHw^#CQ^YU(UUDbxr^vN46~eRexIYF}S{w@X}YS zG^0z11zoYo?N7#ykwwFNl^N?<4aw-3!DS+aBrDE2=$P9{>R-If0_ZZcRG@lS>NXD$ znf{BPrQY%sBliLt4C5#ht3q%ENKD>q86?-LzJPaN-9|amfP}rU2J(+t97ci9JLQR`NGoA`9?Ltd18BzB&IIm*DcYfsnIBJ#&%>!NK zS5?l@>J`Q`NY0g8lsYQ!Y3k0mJpHM$U&%N!3jSc6neZf&9wZzT&>o0?=MliNNpBX& z_9(_|n7$Z*sOpU|oWnkex7V5A2vL_~KgUz;QPEQ{d8JCA^Wy?{F~*P(%iu=7_AL+<7p@_#-dGleC17*FpoNoDV22UxpF%*a3=i zyQKEP;$#j<#O84Y&B07l9rz~yppQI2zJ{x>X}67yuG&NK;0Qt>ZV5y?C-KCm2&K+U zr;|XjgN|GV17&v5uF&%Ui`8TTpsu9}`9dr$UsBq)s%=<`qoDI>G6Nw^gu__A5jbPa z8LQOrHYZ~ZLrmtwKkFQ?H8mOYB385|F)I+1^tBqC(49{iFG&TEE;Mj;Fdw@O1_AnJ zvk$=<%cmpDq0zAc4MtQ$BS~4O+wwo(W=*S=Gjj^X`$RTEtYf*$_ckzwn16FY5NWtR z5w$>SKi3Rdc`dcJUeYEQiwiy(0MK7esKvaKjTtflL*%2Gd}*am+1^<^(#M!Uz|ACI zldKKAC5#x029CVwjR`}vWeIZ0W-SyaRpH;uyp{mvy15btA`k;_*O(-+UUhLez|@9bfJy>w25EhS1g<3k zmtuyuG!A)^vyj97mq`Sf^FE+0Di{VWW8zJ^`q=EEitcnW4+T0BII#^a$`PiB?T#cU z=VH&D9G2lMTE?%4fe41NlyhPWRi(IztR#8w)Cv@3Xj@Oro+xmD)!Kqduu)9s5Ggau z05wt!eFmoz6BbM{+E8@J198E7mN*{UDR)&xmRY#NIf}2%7^{bd6Za~@UKnF3$2 zu4(a#M6~opO_iS1GR=w3Tw_k-@ha#aA#&Z6*~(CaV@iu9tVHF&lx}^A!iwG)x~c2Z zqRrAnN8M)}(bkv9KrNWrl$?5lA#n`0y|>_X;~hEKxn;-R;JEh)WF2tkOjQsL42yO9 zd~|d$>i5GV&b)F^y$VlHzQ^Aw+YfU2ub&{0m&8tDM*u};Fn|N1k$ZKx@_9!|jsf|Y zw3eghl??9w(V^VB@U?OAyMq*7SoJ15XFw5++4r>q?nDNSBi+w@?xtZ@ zVh7ng17HB1k7aYh&k{NB*tLTNO=giA!7g-n)gZ5IJiv78FJi(%FNY-Hp=Opa*J#vR zsJs?>4>ft4$kvjfO1V;CIk)!D_N>5(g~!R^l2%NuEM)$7mUPMduWGwoF`Fvfu9-7! zojEf0^2QmB#xzNa(dO+%6ED%=F}nng;RhY39p@+ojWVpyT)xe!w47d0^6R)|}^&)VX4QJJ=*n`Je zSQ^K4cd!Ub;L0TY#nY1R*C;oqIoa!hlUS~&r=vtL*;c(%es-;_36}aH^Q9K6 zmg11W!R7ucTkLaImVF>yu4oKQVO&xwbW54{D48xtauf=%E|g9s;;F@-Xly)rC$bK6 zb{85SwXm&XaJ&Q9(%w)(Js=EAY5eRaIOLgZAD}W>zaj zMXZn)Pm_K>>hAp{=YvdkSVlqvw(Gy_0F9rO; z+4%#rCiL7IJ}{@@V7pwd9nSFKmQ}Vh-4@VXAjt_r0e}3%lGVU5xw|7%4q^Tc? zs?+KOd6o-0SDespt=4rD3N)xy$%bVS&=$>e$ighjvtrGVAe?`yaVBH+4w@f5wfz+S z9r)p_aK_v4o*WYcRe0$&_%$OT$9p>vWhN)Z%8rM|atf4uNaDDfP5!0l1_;dBX(=tM zv4~H_qXv;XB{s(x#iWKZW``5p3RU}}p`2wWW5-9Q61d{5FKycHpo8zK8dsawFpD<) zIOjZtwJpR=%$%X1iM1sd5_|yH1pPnLP(Z$)* z^XEs$2km+t(g(}eMES8!gouR|MU|LEl_ZL#)zHk*E%XU=D?^iur%%rw>_=f-dsB;R z;&@kK>Q{{+Roym>5==6{T4ePEruyD5WX27fy|PK7!ju3%K)}BwtHN$;vw5<7BlM_t zA#oPO+>3ZY*KGMjgxe>=#zb(Z1X^xVc5fZny9V&iilLxgG6Sbxi4~(!hKy$fkkx3Y ziHS7a%q8W0ESrEJK|yIsq2n;zv@PCd8cGu1bZ_{E(aTTxGuHCZ>CW9hICJV-9IlDC zpk={^g)dG&j8U_92o9=&k7R{=f&spW>G*Wvg2@+GJbAOK0m*-Vwwpi zl(2iB<_Kd|2{4XhR3E&~ zRnZ^kW+f=HO&)W}j7v(JYe?}L;e-xu91@mqki6q>K;Evb7UuiO^K2ymAttV_*A(qE zda~q2j*wcsi(HUa?6Uyx!b$P66a-7*|Jn>39FBh_COuNC|s<1GJ zV)TaiJ)d$8e)##B?!DA4`buz&S0^DK)4sWoyicl%Fg!mHz!}Gp!bD`NSxfx#V*)at z(WpyB(c!-qF__)1m28flomVMu*5Q+%t7ku-{c!v^2t)*sZv=@CPZ|Y)mYRT2(gWX= zzkfS^{^a6D^50rl32I z++{ZTHc+zs^RZdAIB3#CQ187i&=x3J(8=+v2-Vv3W(p&W1IChnS27>AVLlr(obV4L|o#sM4<<6jbKh1Y29cOGq%8 zZJI$9uh3adf9Lkl=EAqQIsvS}V!iVmwn0`Y=Vj&oMlERo-L)+eQ<4nZAPy~w(ugwB zASV>vU8h(E#QXH3O3jX$v8e{jU!W;p;#`}qxt;KCJt`W?3$cL?7>}}KoqEq*hm}qm zB>U_`7Z?P5V(0BdEtzPA;1zK>E6Q>SS5Dqt&CpqMjT~?ou1S(u`-sBakx|U~Y;5DU zRb(WV@c*7o{%4iyO_d0)vTWS2j%7>?5iew28&C+=HzY=IFc6urD-s(>k(Ia?6VjFy z#&w9?1`c>sIC7-@(!xAoiKU!>1){4(22Q!H9lwDU z&+58aTsh;)TiP}TbJDP$3|NbmS-6>Ay1D^-DHg$$Zka1$Bq1xvqP!89d+&WCvCHMQ zhb{QA>nYYU(i)M2hU7)=1Pat|$wX~8)@+PwA(zx0SSTeAUO;R?V2DwepaF6fqy>`T zPQ!F$&_0wftMkQOCTs!%x8JEy9j7bikN?A9H2JMa@7BUaWOtET^tO-WzhTNZL2<&T zbwQi;mJ8J6H8F$mljq;6VC3W+i#4|1>s=xWFgZ22(8gID68$mnOjx0_J?RKs_Ef_w zbxw7++-^-YnK^1?)U;7t~Gm-=Q^~{SFsnM90Mw#U=?M8KJt;XY{zspE9VwdT+uRVnSVa( zNrV!);uN`%kitZo33p64YCabiOBfCkE{ap>N=3G(NkV=+Vhmc*?ujZs*rJN}4F&#m z#{3WS|2$&j#MAlJAL;+m=yulQe>9?~^QZsEAMpc0m))AuUfLZeX(Q?M#{D$z58L&A zd(>z(no+&c8m5h2)a*A$fy4_LgdY}~W0?*pJ=h$&YV0=cun`TK(V*23Uyr}mp%oVa z^?53`&LF}dFgSI3!?<5>wK{3N(QCBp-R7{{?GKZBr_md=#?4l*+3a-M$;aRX`D?{E zMPa=@sP_lWUIC{ExT;gl3S_W6;67a1koO2WuCE%sE_{|E35&$P&Wtkncd^?9DH%gHlalmNySCXbCa zOSutng@WN!3sP3t+4^b+q7EtI2fF|%0;+}(pUg+g#WaU-cJlP-;mLz1#|RyJ_BWP` z#K%=~`!fQP4?@x4Ak=8aZk-I*(C8Ls@S%$H`M$ssxQP-)YVe1XWsYsXl_Xub?nS+3 zua$O(;Nty8D;a|6cjHcb*cgxSq8oh#wnA@*IP^v!xc;Ek9@JZRF_CZx8Kj+~){IB3 zMr+(_#KZm=tSm{IaeX)*jfSIsquFi@lXg35jOsaR9~@O^8-|VEpjj_qcydh>o|5hF z$@u%*Lm`IUy*vq7&RCl5db{B;7QcqoA>^0AL(XTZi$F7x%*PyXbQ<5N{0W>TlBn20 z-B5ap3`et=Z?B;=xOz=T26vI}(xhv>Jtl!0xHvNfqmHQB)%uv@0|OW15pRjPH;UVF z0~<@H*~hM5A2+&5E2?)ot>!4{H1G=)GaNQPnLIG^-9dXJKW85m@w)wiQcG+c`Cim+ z*^y_CP^_j|SDu`op33?@e)<4UIf!9MYGb~qq|yup8vwmcFt+sP)(pR%VbMn@()cVp zh5x@)#8Z~q_2$3EkWN#YXM+H=4{|V~ZAEL1MO(#Io8)+Rn>T9LYP;3xwuYltI_kuo zUVj*Yos1hX$zo~0-%Q3)+UVBXAHBCehITMw))KV_?aq7GYAZ)A?)K}wA-1k`H0<=- z5Ju{~ble;^yR9)W9K}GdKN{D657g>|X1jpe`AtGRPwYV0qRleo#yF<@TJ7<;mBeu` zZAK84>fIrB+awwFMhRrs{wRr>#z7 z6gM%9-ElN-G?G39s&Q)^59_^pH|aDxbt^TlsK^|hS0H$fwjpBBrkI!k0!$Df_eKOXKLDX07>|;%4<6x!# zN*8miaS=|^Ys&Dpm!p}cwCT2oskb|=q!Hsq2l5sk^y7Y%ejJ+dlF{rF zmUY@jwv8=xIMD9`Y^b4^atzy@wAqc5&M>ZzIwUCcI-{tCv5VX7csT40Tdj5yMg335 zkYwj(0Yhw3;eC#r^pM*}oV+IX0(BaN2nPgtEb1?3`lHUM-G;mn1LuAROR3*)w80jd zje3#{NAAN1 zEhYv&ybQrhmQKPkjo#%Jo5&V6f?o{X8=Vpy&&epO!AJ#aX^IY$&TLXc+aim}M*es! zmI8V&u9>ooQV$dZZKd4wO8sjHCCjw-x@O6z9zj`yqb3NYK|cLwt8_i9ycLqHsTl(Cg>r-Sr+KV-6Uz@>!)G{ z!ftNbR?nc9%{BCZNt!v;;aX}qbX@dSGgjXJXzGj%K6bFjy&i_Q+ZcC-kV+HM1H{Rw zLA!LL4o(gBT<^6y<4^BWt2wA|-Ahg$AQ{2;=MT-9+ID8`MfiG>(Cy^y1>D?s5zkoO zQs5*$U9sT1G8cN5i#mJ!Fp8n@Kxg~oRs>GfZFPESqtmO8+esY{mY@lOL_UU9jTvI0d)Ck+uny zQ@7hm8fm8<^%D$zqmicFB<({4{PZ;dZqtBUEd_E9#1E7GEojB zZkenc)4-FDkm>2a&ySz~98Rvl_tV6RgAE)>hT~zJw42>=2LqlaNfLutI?zkjhv2T! zsNLy)I`)k=INxIyGTGENY6GrVi_p>M8{DDWZbCzo z_Isa-aBI*aHSboP%+oU)CEz-xFb$LJ+HNzCNVSLMhH}e#94V5q;t=s`tTphUf?MzTw0QOVbYd@8Q%tbpLiF&t^nYN;FT&IsrEUNUU) zHj99tz0s)OYBc)YXxtuScWowV^wDa~!<$7Ib$R2$DY_{BACXfiV!?RlP@Xe?9{i}g zI{0=U8+OLcG#Ib5=VZLyeNq33iO5_9yqFj)MSph9c=2r-A$ukL?79 z?&Z2g_W!Z>tq*PF$iAP$U(w@X*Vq@gpBUpTlOcp8>;Um%V3?CIPU8o71Gd*~2+Sn^ z`}tK>m(}WSKgi^sb3fedYyxUksU(%8QmGy#JmzddPf^6n&SnA99F!_W2ypE}vDVqd z40LF(z5E`;mg|-3%sUrWj3L;)2FdEarBN?KFF=s$tK}Mw);4zBO69WT)x2^UuTfra zqt>o&;BM;`40A6Lciz&sFwt8qi`6j3b7@XrtCKe=WAPe}V;6smtYg-r*DYLbUP873 zKSTN|ZDH|2rXgl;lO79#M5ol=_}2Bv6jvO&myn(_Vf$sPvYR1CYYL0}u(k@DSV301 z9Qw%3C3nBvy_$7XbxA78`Odn`Q;$9{(vmjIIb5-aHu06!JXhic!g@+d{WHmtc>?wU z4@Uj!P47l7BX^>6gRGciS&q-QL)O#OZBp^>8^adp)cIgm|o8ZnSZ>)2w~-Ymjuh z#=xVcg7&{5q5>vpQ$b{85&NV{NN(tuTJTiwcE zC9+xvouxvI$ej+4FKw~jD7gKa>p>Z7rr7RmwhO&t8PY=$Iyh{)o0aZmsolXjymfhr zc;erDp1tl~I`k%5;GCYrPuoW6-Pgy5GD52(e|}v#Ry-mLb->ed(EC_H+IclHzo~?>>;r0~k246;<Tk zl3P$68ga zmx3k~A9>FL$C}4MSkweP!?xeBE;o=SrMNmcQqQLyGzMtb&`kwqZ;%H9YkxHXM@?Y) zbsy$mrzZ|vaGhUwj*oYaPJVl?3BzeS6igJEv=7AS6NOkJzZn1@?j7&G1;ozF{e%6J z-#|aSFiwv4noY{2?d%|u$MMPj?&$&YNjFZ98}FKXF8k){$O1?5*v9P7rO&?^$1`>d z9z%rflSQD%!M+#I8E|;?8l!KdW(c3N3FdIJZZ68v*#vZqG1r}qA}V==#It` z017kxfYAlv`5K_b#JgpNFcA+tz}hhlMK-skV08{MkuNn`Nq-_MC*XegxZ5!+Wi@f5 z40|V&t4=>e8-G;tu+)L-9rhv#vdzG?M=a+Y3tB`0fFtJyRbtF(g3K>6|)fNqbzG!RZh`#V18B0PH z<4rD6HTs;^y-g7bOf+1UQ7jz8f#jzbUn`>Op|6kp1#+mRP33c+nPC$CSY*mga7%Hv z<*me@-eYC>wQu5-T?f?lWHPGf^H*@}f{zwtQt#RgMvMwScQ5lVM(PQLg6H1$<<0Q2 z#mT3i_qM~r$MfsUZORt6vU1zq{>Z6wQ>%p(vKW)5BG+}&{<@pZudk;+uB_bArDQwx zVda#5s5`3#=l#3J$^N^e3&cQ@7;ckT5+NC>UU=|6d|bWdScn?A0pO#q)MuTSPtHKO z>-E6r#nC@J4>BlJF8<9tuvCA7`YdPW_%xch}7f+xF{5`?z;D_4NqQM=h zrNclg$MWI=T^%^hF#9~Fb`c&Wz(`|BJ4kp&oVC^Ic?v0a@oHQ7OY%WjHdt9!HdrVT z@RE!l`I-VjL~Mzg0OBP!{y;nk{ZJTT=jh#v9&69dB>-^WbiQHW+3_^Bax#7tCX72( z^#`&sffN8>xgn;KZ-3fqFKKz8kHlp@SX9T0Fr?{~E2)#563B<1|{_mb9T zf{Thr(I|eC0$uW8uk?G<$@*d2DQG(GaHDjm#RNZ24b*(ARcUYqnYC9~NtTv^G>9lU z#SP*UB-RAywO*d?AH2dS8rSwapAYKrUhX>V1*uWYG_e5=d<7E+f3`r=UDNn>h)CJS zDxwQMkMcz0Jo~^wXW-BTDGNOBH3&G^c%5KOsD~~-O+xMXa(0D!{!-J8Q5fCD98c;w0N;uj=@Cz5Fc;f8}9H?f#Kz!2Z z4J;5dZDHpgZnmMcOm0U;6(L;}(=304(qR0%Dl8E{usj2k(^k9P!jf-E)SLK+7UEvlg58Bi^@RLdI-o$F$ww>UIq5go>9>I?(0LXz7UQg?*!5UddF&{MR>lw3$lEm`x z9P~Ka0zRYq2EhXX-00jE3>0jN8A5vDQQqH#XV6fUK2g8)3B8-xgZ@iT1n=zKO4 zrGW;9zh&_;@=Zt22@(gR(bz8FJU8kK{3q^z*ulgN=uU-y&uKj3UexcvSmi;yQ%wFK zHpmVlOS2|t?dsb5qyO_@*oKyTa)n|SPgg9Yk;~gmt;3z&xBEwX*c7A>xm$b9V-+}d&AS1|%MRd=_YU@U znj!dcGQ8G|!b|Kh1MWw_6<%vbz|UaFhTDdLzmGR>*Hm~}Myb_5!`Q#3X!Wp}^%scY z`D|w8S@+(<>WebO%Coiy8;5_e^O0FtE6+?iW(|CYz>ZYh!`bDuTBp0n0kGR@p~$hy zG*h!uN>!+M`>u_EpY3_oaLv5&yH<5BgaF;c5225^a-cvyfbyVsA6IQrWpCP_@L)n> zyu!2b#Qvy;d~1}0JQHLe@l|KFCc*9S z1O*)qNfa69mM(5VMl!(5^+1E5+@WF@W0B2ebCT{HFL2rQ(C;4f0@-x{hU>J4yZwUZ@6MHhz5D>-{8$r%(Nu`ls^G2##oPFf)<0oRx=tzG5!(6cw+OI`H z9#bpNEIw=P;5LbECGXRQyDD(@YWU)OkkgLBUd^i~$8bPR2J1vQJKiEQt6=rUx82K( z#vk0~UvmKxI;pf$)~XY$;a``#H>QezeUn(_GF&C0#)ge#m!`Eu_)VDp%HEI^!*`EIp9RI7!JGPb+sEC%@ipl89}n){E!p-@h9 zCJIVcytYb|*a@vhgeTTmb$h$-UcYwMLiUylzVYIf=MIj{ zbp9f!H}toq27c!=#1!lPhN4~{e;FQ-f1}{BDQ{}NIx2b9y(G&)I&o!BP)73k<-p24 zMNhIfa$z0F?8B#Iodq(k=Yx@G-y2iBf{ANF^KsP7j+k4ZHp6~G$c65Ws`J8{9t!0L zUehrivxA~0N%VLRzUv1UP48-5S~v04)xDDkh-hW@7j?{~v~mJBFbO=KpJM_0OUIb@k7n z=U=f+hgDPAI{69ck)FJT)9xR4O}63|Xgx%(Am$wQ`*0-2WdQT;eg5R6{}i?TYWeGQJ!CiB@MiU7RF$u> zrM1&;L*NYzy>>}-`p>#!Fpc~%tr$MOF1y`9C|uca0CJ>7I8)u-cnZM5?oQA^HBW!nmTZO_ zDb8!8d%s~rxYYn=XD(2622^8rHrS}`#o#uVgxj>>xV6&!epPJ#cISAlhJ`Ha7Jb-)kB)F}e04$H+w&wS7%Yx-`DbF9vO&h}93Sf5T0-+si zqjDMpcc5YqEBNJ|(s+`(QtvEQPfp@k#gmy8B}lud_-vSS8%8o6DOg}+cq@6HFHyw7 zR~fYEmK+W$oWf5jmS0u-P6o%GJj-B)|B z-@M)b=Pw6`NADW{I&Pkvp8b0M+kd5TD;J^E3R-3mIS8wR4ad`a-7N zRo+iS{j6`mJUU~6(tIEY@nBMRHzMPNgv4I9etNWj-jWMp>#U9w-$)sBF*B0SqkmtC zN+$1jybD6}{@w86ebc{KN=ESrV(7YylhGBf*V3d}PVWUB?&KDF@pgy};QC^QmUePV)kjH~A75Mk=0hYHGUe(&u;5}pmq=);>`0q_P zP`}#Eaj~vm4++tK{yf6nvru+FkG$Tc>-Ah16FF;pP-ej#0`|1 zNXV{v1W7^VL}HUZ6WHo(dJ};{f2!#Zgm)o6r~lH5D6i<1J+TVk%6oll5SSG1RlS3O zhn8ao`ulNYy}deazNpd!fa(Wcs#U|QP?~_}+BdnuLv;q2EOlDsrEGl@V{Jb5p=%7v z^+sTl>*Rx7fAmoWKxr=H#G2kTHVu3XDh;%h9_nz30Uyp;*Su(aNnTW1eEt62y~yVC z(F1_euDlJ}!tJ9T8KZ0O=DReJ4L3nYnAaJ>RVq8XWkCJqmix8psBO1QWe?p!sBqqU zO7rwcZtN*izNN6RI3b`K{&*&H3EL-VtTp3FEQ+jZC3lGrqB!(fT(B)GKn5aTW7q|}~N#1!^Cb^v| zWo;|SAb(B8ExP60KM&FgeTUDgzp&%Ed@HHfWz%a*4m6mfIAbUPNk<7(R*WM0fK4P6 z|Ko5{oZI1~V{3d^(w>ahRyWp*>*dVXv~@CrUOB#FLJ*E@l(OxM-C)^FolcvXGwv~H zT&kZkZ^|74r2{`7OsCrx)b9N2kv-T39X^h_56cWVwoJ*=a>p8CvC-@woyca6CydFB z7zT5$8P-mjY+J;Wf<-m(NWv4OgCceQqvRP~)1NgtL*N<~fTp|&EjG^SJ^iJdBDY7n zWKJyi1kWg+0`Q+O@FZ7Cf>PVidra4>AkI>Xx`j4Ci<2TlSpHp*m|RE@zIncN)ua%i z2b8T5X*~e(uhi6QvF=s)NW-aJ zc|&PDiBjMujh}3&GB|<*GXR8|RLJGRU_9S3WRlccxn1XTLzDcIy9 zeu%0TP5qHiiWA1s!X2*SmXqL44^EEv&l4dL^LV`Irhc|_t~jz`BzXB=8b_&s_zD?exnK0(*o-J(4TX~2;KmHe@41J zwcVPUZcQcc_6Rme^#2uO%thAgLs)Xb+9S(H84CryHGZ;~4Ea4In_qdxX@e+M=Nf(@ z)A9DYLq6S37C+y=zsNX$uCPH?xT;j63K>Vio?Bqg2~6#|j2*PIM!67MGy-JnYKm!S z_FiTpmFcn&t)YCTL1Y5pDu*g75~G=6IXf~H0Ks6|*v)fL&8YB))D&-16}^-TlJ#R}PexO>=) zL($M+`>NP5IYb~*2mAbl3CfP~nf?6)nh^$7c;!1SeuGJ7a%DKQgo>QZU8Y|B%J;{4=Y}h$|vv<;Z zxqq~C{99}P=w$C0)+Kvi9{@+AKs|(Y(u1J?pwIjZVF6%iKFqLou5v&cJDQ}n?C0^? zm+jaRGpZ8-no2MIjaqefD*$lpRaL8H>#v4*O6lu8jSQ)@z*)m4T(%gaBj1!SV#t`4 zfJO|mZYG`sD7{{&B>`bwmfOx>30gu*x54fwgg?Wo;SW*7r}%u9K=nkSl3D;vrOX>A z|5Ya>@#Y|T6q1^A*7&?I;+|v5awvV-2;3?#g;rYkp2V%ulN| z=NcDxvi@MJjlSuiWB&;$OzXj^l2$E||1q5kP^O8dwCH}bwJLSNe%Gp1m8OWM*sE4d zZP_6Z?q|At41Ip-buP>^$NtMhjOm$fF{aW-Sx2ENQ8PO?X)(>y@_QtJ2H2t&PfRxA z1Pj@$LA@NpKy*W>52VF>AS^~5G_*T2pQ5YJHXWH`B9_)-}ilap&212B>WMf<2aN0DL4Z}@9kj?pkaya58i-VHd|H2GB> zG}5pQ_;v3%J+uFS5rw{VQM+x*1BRdu|1U34C26^}sT)vy`s~Um98VyQR#+GOMfcCT zs)p@dl`qkKi8-2 zaPz` z6{ZAH;OkNR$h{un;MPfEEkY8m(hOXHOQr)!`3U@NBX_F3f7>`cXWm@yRR)F-FZFFE z(WO9byS3GF@r7e?#oLCgGtn=LMVCEPTHmhxDN>dCV&ot6B)(YTKtxJ*^W4bbej8ej zyOu_s_!z6++@)Pb7peW!5#uyLD8}?HyuSL$2*tb{lJ`k-F+v?!n^GCsWPaZ$l{3@9 zN{QJ=Aw{c14AC1qEz%GbTZNejYB2=GBm~7-2+E~Q;s+Z+Nhz4qZF@Ym+q3?lU7PTd zTNn`Kb6~2KILv3U6C@rCHrrP)1ED~nm*_#{`3MUR8V8i~H{^HLU0~aH}#pQuZX!+a6|5>=_GzYN?@xBWQ)r!(=7M>wG z5u{v-f(+(>1ex`tAafwTCVya6HS4^8m^CU;dnXLcoR$|eqtd@TTYODmN~74d%k>&V zKda5m!V66_iihrv=4K-Z#aI6iY-mA+RJbzrgZDjSjxGD2+5WKh3{x28*PKmIKK|$^ z6a*mrclVHGPZLiqqU1Os=`&Ph2y&z*S-PL;A1Ogulag_MzO8hAsb+so-?e1B^As)yoP77G05?o5kPb{;b>;X5I!t%1Y7pfpSvZq_X>u^=kOCTlp-{g7SfP(O3Vcb zwD0&w7Lg31J(b~6RK$F(j3ZVwT1{;al53jdNEK<{szgIMI4}yl_5>+|WlGZnv1NBVPV}_u*YL7|}NWYD!VXU~3n1@|`9*(d=fo zv>0Pa$B@FIV%)@!v_~n^VMNuGLLtD%l?)-Y}75Lc!b)pJ@y{KRehKX%=Mc4;IbI7ns?9h zX~0LZzu(FI*9Eyg&2zJu+Zvv6!wnKv_zbTFh(Bb=ZX#_Sdr|8#KihRLKihFHZ;&k4 zx09ybt;ts5yN%mPdCx|!e!t-sZa@8{HkxNeyAA)o_&qwnPJHn2%HNK{*a`FC-lBi> ztxdcx7vPq55%Ct3Me!QRK;j=j#p~05;^unF<_1#(_}jni?WrqE(c@sAVjulQ?Dlx% z^Z9stGTX)*xD57?oV%DejAFE56&JuG3b#fzrdYs)TXnbKi>e1 ziOy@|^^*!)Xcaq2FuVRn;dGsMg{PyP8{i6kp(tf;xqjoIz3*z_ux&ZPP%Ae2W zQmom};uu~Q0gn}U#$rXo`@_2*I8x%S-uKypM_mt+o1EERV-cYvKt($k_}}Akzf7eRu1YlF6-cyTSU_~;~LC6vfEpCZ?fTD4ks|y z4sEqM`cLz_$b<)teoP!hgL?gaE{~0Pl`>{1T@>AI5lQQL21=wTZ-NgDnK^|b-{f<{ zOQqyh)_8e~j$NA^(J86i2x5MJ|9c(-1bPBliLYI0{OjfZxJZ9|!f^!gheF7HO%QYr z`xHQ6@u^}nwZv?!bJ*SmT4bZI-#I>P?IBmhk`WrI6%(V;fRoC8Ssf0?1k~P(g5t?w zNP69m>vg>Qak*rVz!PxVxY}4RF-%;V^B(&CBGCJCDF&?{79!}4@58|6sKZ?XH)L93-+ zI##h&m{cZ3=nJUXPHc>pPGXxcliPf06(*HQ(Tp~=MgFMnK?!lRQ%eWZR?nXxfbj1? zoTsN5iKUGnM)C#5pSTcec>F(6?JEbAc)%Ng`us@w3;fFbFC54<}D{xOvnfow7!c zK@_|Uu-h@zRNY2xOPy+FR-I~4sj<6*T9HZ`K+meRxv&<3$ju}wR0oJ=)Y&wZYT3+; zN;RrvTW2AH3V0XCT@I$m_sDpWqd1HZU^Q)J=sdjXxc<;BhQb)Fz92iULh!;NG2>H^ zdPpuQrcgZ72!AOi@;c+LFhEQ%u^3+8L9DHm9zaY1i&h82;U|5%b=aC&8BNTriOb&q zPV!H-p0-&kvfSHulp+Pv5}q$g%5IIFP0WY&`jSYxvdd0QtLyXVyy|R*Y^u+xE7Khx zo@ymFKuIfC$`_5g##*vaQo)0iEDF9Pcq90(tCehAUU)iFDZ1}-ObZ)Y9p#emC7RrO z%ZwQuwdWy`3!31WeQ}$M0Z#0`_r1nnZvY0Hh6;cA`jrDH*c$QO9Cw@`l9RswC*&D` zmlVaZ01A{sPpc85G_&fYOM%pV*J*b&K*t#A?oA#aDjkg}x7-9sB<_XYujI<5DKLGU zoKrZ7%6@Z039W8AX^jd#f(F4QJWV7gIM{9N92{)#QWF?K*g9eR46gRRCVKY?bZ>Bl ze6<95(`ot0FG10@J1xly0UK)&pMP%f0gGgKV`mQuD?b%Ax;Pc5C^WG|J^w?8YO$z+ zE1L7{g8rX{4*M!p?q=hV4z6;cDvlfeeWdztW6+$`1GSQerzT{Nepz&9CwoUHhz@>+ z@TEz&KU=zqhL$&ROE`rlX+SVZl4UoT=v}r$ll*3qM+{s=nxAW=N1ul9BJ?b2(V>-^ zKGmzlH6=1N&FEF&LruIVDUB+`N=g7kyb|VCV|oWtB}V^nOhfQQ(S7-hGe{?3r<-|W zGSHyR6gWR^J0&Yoj1x{Qqo+5Qs|Y-!f_zVw)Y<3u0BLLv8wfaf9Ff->Z}uZ42rPy- zsn+g{;@ylzvP}==J%|bHW@tM7?u1C5=GxJM?<(9A=4GUNsuvdTRaLv(Iv^$_(;|a! z%B1l-gZ0(EBbdGT)o*yk%a0}q>8KkresK`rk;CGt#$HXKklJy509*x)Ch_zLkFm`|?8mKrq${xT;$3;b4PrtiiZ&M%n4zXd|{_>_j;V_f1 zbSSx&1NFQA=6Crh@F$egMiW?< zT-Oa%-G@q*0}zgeKBB(fi^r`TF5IM1>J5<|N0JZmQwUNB5%|CFd?JScha3yur61?3vQH~tuU zgGvh`f(W+ktHp22w|-~ncm91f8YLkBB_ZlW)vQ(m8kcXOF@wDGA2wD+X|L|UN5gx_ zcD6e(Nske4VDqz@;LV)NJ`ghhhv=AUZ)Xod9HQ4x9E^=RyYZ>`EIZM!v=eQ*59lbpJ6Uqg zjcCp6m+WpA^2~6MiPo*6u8L<1mm9__I@6KYh$Z%(EV#dWY`d`}@WBl5v@(>d{E@bB@pU7PaAR47PIiBPDU8)8kmxkV!)1}q zUCiyFna<_bemNmr092=0qh0FuCJxSezO&i~pK(evW)Tt)z~{=Z{`scS(1dsCQ9G^D ziB=j6IVPqg&@;%0w@d^A&FzBBR*#PF^}3W2+4KFoTLPt-b4{*3x^$EOfyUb9%+QCY z%@bUtj6;woxARbNUcz7~=b9-#7*Y;}E~8v+VnhGt)yrup=SR7vLxs`rm<%`EvP6O& z4}Cw!w<9<5=50=%MB}u5GNX{VdS&}06li=X$8=%d)o@_jMQR1<<>2P|rzQxwwU&g)?K-Rn8&bqxi6fF^PCM9b4=&fpR=_6#M$!l<#+ z>4?N>z6H4!eYqh!;_vlHvbv-g2NOU7vj~~HiL($Y-%TU&wSiufLDI?oIY|WBjbN3e zsJu4@bES-rf1y|qi{|l__CA8F4UY|$_XF`_1Lwj<@z#nHFc-riT6s~ZzseDg4YwSL zG0^FIm$?oO>KK#+QaXFT!G}77$vHH3Xo8`H4_(93Ko$w2l%8J36ls|aXkNTvo+_Xt z1?LMFqHHIra6Ow;nzu_UNC06M)Hdvb<}W*yNXe^a$u4;NCQ`7uQ7DEQLhs)-`4mg1 z%|LL7Wy)&Z@6d*f@dzrpdIqyahI5g1!jYCE@cB8|m#qmqIezNc7 z@wf0NQPDhn|8no5sXDHB?B7n82X;Z&;X@o=SXapINr-X@@$LpXK{3GQ{*yp#0G5rE z=@(y)l5^LOGGWM>7c@hWEy{DM-|5G=h|++@bpP~F_FW=c)P|_+eB8x#Y~1jm=6ieC zaBy9(fRECw$IGLj+k^BwS(z0a#wS7kAIE(P`P*?1-Iv}NvgOb1_8|gZQ|meuQtsC5jIG3tH^pAJN1 zoe`1TyIT+>d(i#tBi;Spugx52tHze(aPXL;Izzu2S;!<^6i75weo9 zOv(G{6H&hM#_$6O5XK@;n>=uMB949yHVpL>i+rAH$AfB_7<@1WaZPrlqIRjnq%P_Z zso`Lfke#~l{p;wwP8k-<6;d5+T`cNq*w`*oOL7h&iJI=aF*Ky`ipfzD@N;(eVp9nE zbN?AE;4bMIWTu$54WM?_qvl@jMg8dA5k1faL8ihyH1NB*i3c0x+uXp9xjaX49WTH& zUK$rp(&3=WJSAz-M zz0l}%M8gstD{xRVS1ec?V`o$}_e4y*Uo6DH_Kx<>=K#TvEW$0nG|>vTRw@J=!!HN1 zBFc49(Xu#xsLh$6QiP!MUk-A`1XLTdQ9XRRNko-ZklDRU27{aPY>@sWn(cLOpYH)4FMQcHF@hv^kYc6ti z)}*}@#!DD;_5N7dUqGH_jy$qj_Da!jOmsZ893tu`P>c(I_7xU)w(N zABmBymJW*5$T~bloil4bMeErefLTOEoVZMEEW3xNGjZ@EdLoWl5VKin!Ro;AgD4=a zmPLymO3U(RU^N;UC&Cg(s}`o6$HA;6WurkiNz9KA)?8HcyRF-{FsF|IlW=|r_GX+t z5};WQp|!u?4KiFHtc}Wp_U#DLha2$Lx|2F9f%yj5+8L~P~?la7JOHn%6h&mRB{>@-#4)riGRMMG+(IP9>U><#!Vly46ya>pWEf#P^OK@k8i@kV zfs+A_gU;c3?}p!`>{Aa~e|uq3K`y8|Z~5zHT11(I;#_%3_~&_HITuCcL^pSkjQ?in ztEszYrV1|BT+|)h_wl$3#Q==5SNJ}x>h%9^@7lZDxN&{|&3uZf)_dhiEy+&YWGk(< za&5)&ZDRZQ(Kc6gz41-R}7y0(8MdVKqco$f9m`%l^ z;C^aelqUy$&itDi>E#AW7;I1t(nkIrk*RwG9{q>zee`2_yt&{i$28vG6p!4C@f>!G zx$*J=qVUWdGj}s5Us=JsLg$}gq2x;h&s|9 zPS*H%!UZ-BSrKCw9#l*jeM|UmJZHNu^8)wYjLqx1Z~HOGxsCuMptqt2<2FHhh!io; zC&Zj9k4~1x7aS}Wd`3=r9-G?R)oeDYRw|b`WDw)gqtU2+RmSO@@_2el!0X<5<=aVJ zh|2)f+V%6n_`Ee4V1ZG)&=Ag++SPged2?$gz-sH$v4*K)!Z_ID#Aw<$o2GLtbXL|Q z&Y{5+tCe?7HmrpcHpdNObTLeOLCx_R*-GJUxgvc;M;PRQqOv73%{SqY9-zeHCO`q9 ze9-KP@!v(X(nL;ZG)$`g0VZ-SwH#6$zZE0N9ya}YxcV({;{e7L;vV!UwrO&QR^Vo6 zm{gyz?$o6qP@N#aXRGS*=FBwNbnh8HQ<|wuGrb#4?9#+{qj}3T>bZp`$UIQV)E1hr zlkx4g@nb3vnxY7jwTS&God)Gc(x*Dt^C`TbG?~gyJMLlWjYF0WN>gf3R>UMIMUr^{ z%#x&o(vnd^cia=m}^re@&3Q6;; z7YjayG-{yywfe5~*Y!t3`gBuB=zf5~q)j-3FFybNsK5T@aDv|Z=3QyMyis}Ce$%6h zQtppFVI1rDJ=xr(zZmeT9;A&mKKJVam!E1?aZL|I&{LD9GydQ_s<>W{FJXvi#o@@~pg ziPi0h7LS{2^!=K@Px$+kzklQJH)|p3CiuI--$zht(%;AI+vM-p{C&dTr~CyqzTbo) z-NG6kk1u9yH}hYL0tAm9g>q~tzJ6ey&$q!$mAT>LQdcykIl|UgZ{8j*)yS| z^>J(_HytFICRY`{gdxVl5(iF9AwwC-|5MT z(_V~Ic67|aq(N_cK&TT>R~Kw_`c@{)dc(wdk5*F`^8pD0-0;V}ljjGgC*juqtMJFI zqob|;lUHkc`9$xAHd-ZZGgAo$?dzI~&Vx%&;_444gFaA@RZ}c<-_g|jWfPi1aKwdl zFZNDeQKFyio$O=ZKE$dv+yedK*3rq{_UVhQqww(b2>a1ZB(8DXJi!?HeG~QPhr_Lt z=NR}J@w9{cEE>V&%_YrU;ilnm)wrWd<8W*H`>ow3V;B{QBB?inheP#>17~h{@21yL z9QFEm?P06c=>lPUhlIt}?#gdJA3xVI`m6HCl~oFWiVVr!IypFs_pwft|xl9cv}f7ELdsVE^Fg<<^UqAq8qRI6P{4ew62l3s9QV{WO(AEL{r3`$mwV zk0s5F>H`BBJg0TR~oM*x3Uw-0JX>=TApS^UEeuMTKU2t8Q-+M}SfzYMB>! zBs0i5qp1DE*(6RU2@q*5#1O)hwFgm}k}kzpA$Lc3KWl6I#lbf6{N-j?PYKcP3~0Jo9&U0S zHs027lk-E-voe>VEAaBq;-~m%zHT4vKik`-{ezt*?3H(#``dfXW0Sd7!id=la*GOX z8`I?d)-znlaSZmF<{8BOx_tqO>%4LNP=i<> z<=@q8=-~5G-tlUMpl;Hq(-5DbLaCd}$4|wlV2w9RFzH_8;7{T#Fqb}^0Zy4YP(+O`r(IPE3fhUp9*p&!&;cK z`4wdjBpslyte&<^Yce_GawZnsaPt!q)ozb7^x_4&mPwe3Is8y76hkui zz&j3K#^k`iN-d1nUat}~s_=bq_KqUdQW?RyrUo*x${pNo|0~_L?S)yRJb2fE{&eK_#=idniA!wLcw~Vx z!@u6NlnM&AUbZs5K8u%uRxMTC43#N)^D$@b%Q!sQ+Qp24o!jgNJxPi@VTt)e+fwY{ zPBv%)k!0x+S+FfWVPXcZ)9;YMBCc^q96|$~fSu`91g|^Zk^iLm)878G19mrmIyu_n zVLl2}G-6>U)=_C?Ro^}gXddF?7`IFqroAD~e`~m@eZPst=9jcbRj>pFsp3$>a?2Z~ z0!zH%)g>}o_Jk#@DMKC&F%n~?7S6xA4uAU?7HdT?a?hy}^2OBShHWnVZ$unmf%g`B z9!5MMtk=&b*WI(4R{9oS3RtIW&0nu_UxGfRtQ|^%23`h>aVihj+`vIw0;%UuxMWyh z>8FU5huUo^!u1uJwz;NcM4cpL-QYgbBw6H?F+qcErwvGwn8KOuy@Vq|IYe%;D;xV+ zM#@JctPC3G-y=_i^{fa;A|$9t_#^P}$k&&WYbMz==GI|KVE5;}!&Y$jm+@6kws5*(}bX!sBZ z;{^T;FAcC9U+g5AXPkiTeRuHP|1wOR0#g9_P8=Nd08S-J10R9a4e0mC+SVZh#n}je zZ*q)Xklc)i1TxM92FsA$qvqkk5fh|=mX-}Z6h-|ul#;%`tKk-6F;K0QMGB-i?k-g$ z1pfvCu(6f_TmpI9R|s4Lp}AXYGKGTfhQN+jl!vM`6rWAH^+|{( zT-^dS$rh(#+C)2Egh6v+gcB!Vo}#*;J_)%PD_EQjN4+ax^)-S-k=+m%Lny5ZRUblF zJEu{qN8zL*(=ZF*@L^kP4_pFygFmeagT&bg#)Gb(C<|a3XlhIVTnw>=qvevXawd%Y z5KzR*G-jT$t?J|y*i{?0Wo`mJ2rz7$*0!uGNr9@5Lgcn+TVGs1LbcCus$LrAU>W{? zPviG8ZVzMEVW{^Zpn+XW0l0hkqCC5q(M4NibkikIkXii#G1=@b6Er|&s#+x{mYdWE z(@G6%R&w$v7=^wbEhrzKK6|$JQ}eirey4;G?4-q4)!;#+8szH8t6`Y0QO{S)gAr*W z;AS1pw`L)tZ?zY5iHgA0t7ovb0qkL<{?OcVg$)=h2$pd0=;RCPUwRCySW}urwr+F_ z4N*KuZr`>H1h7$Ki0JXysdL~5u259iOC!;26A7(sX;O}C34KsLgic}a;Pkj^Vd|*n z?{NTXD=LL~+I19{DVJ|;Aw2X@v?#P7z>tUcC@lNDZ2m98(Co~x>~wuGH6!!cgewgx zV5&Vl|A#{D-FYvv5_}?tBCu$2gQXc+UASeW`zb9loqPy_oHiT39LMWG97 zl%(is5?oWf3%WWVjaSoEzD_^T0Jn*#BzI{dDuqgXzuILx>D<^Cm0}n?SY6yz0ASao z5y~ko<7_4uz^Xj2x>NM@B|%jYERAlvxPuRkJ=I)wEb?V#)!$Z5?kRj97JR)f zG3Ft0E=@o(Et~0 z21b&_AX}W5N~Tn5*<;^)DaQ1etNWA-=B#FW0x3qr?%^{+nqf;#=OrK~nCQbIL$X6+ zJMlBJ-6|$#N0(zPErBr|&o8g=*R_ZuA;#uRtJs{k2Xn+czECdK!qhz`i&-=q@++el zW=3?N18aVtNP#Quzb^8uLg)!G(USXa$`swq!y==P}D>BO|k=b7~~kY7H-) zSVMUcJ*tsRk0QDB;kqA_nS48r&1)zzGP;|jcf?R3OwLl1`9L|y*|3SIrqeM8VAhK= z-zz5l#|0(#1_hmrFaAuHs(?Fdt@e@RWB~D=eJkiYR#*J#52JJFZgW@^mBnx86yO@`?XeI zWM=ZoTjrm)5rS2=kyDnp3-riJ8)>|CnzN0FR5A}b(qCa4?6zwYr%qi_ZOW+m^HC{U~||O6$*!@U^greJ@_Ej2s&7yrZkC&6h=Lk z#3*s$*9#!huK~Dygu!mf^Ca~Y6H@@3X)UNi>t(yb&Lv++s3YK_`O5wK@p67IZuJR@ zT%r6ytFkpB?lG@Mfxf9EtgKKbS3KhUVPHwC@eBOFxdp{n{fn7aR@<>lrG@1HYVOL) zLv3BTBePxjDHau`I8j_l9rH& z@%K4v310MNu&IiXSioQG0sM!%p3gP>4mI4V)Z4a1ZC%v~j|q;%;a3bFu$`?KcKiu; zx$Jc;uoHzGy(A43!U3K|8buAiWFy2kh>#{GYKkaY@T_T|Y7^5YfyhPPzf`Cy4)1LOZ7ras43Qr>JS3m)!^d6O zXdAGrqL!ltBWJ!Mj6!N&eHMjSt^s;&R!FLd#evu!T3X9ZWFoLxDq896RuJsqUB#{D ziGy1Z0UrQcvZg{N*WDUq_@D*EvB7%L8ZWv;<0%SxewJR{`59y*%+=>gj#1svIwO!o z#am8vyh)|djzc*qUAN-WYR-Z}tAq(JIBH5SagwXrr)BG~()$rmKR?RF%Nn{q%^12) zuW!iI^|fT8aLW@zQ?JZ*sfBcdf8B4lCv3>;T*A;pufX$hNn-TdOcy=_Jm={w4*PxWSg6tVTm5Bjl+#J z{T-;+*Y8h+D1|8RNVKvLE|PlTT{=QoY9dFj(&hX9B&lbtSEYiqXm%=#Alh{$19OC{ zop}@z2a5h58DsQCvrUQl9CVNF6*W_YrEl_LJAeOZd31yK!}h&mBZ38yQPA?(Zrmz*-{={l)!@ah2*x1A#ZpfBHru;CrBYX+{vjo$(Z1Q8WVaa zPZB%AhbFmdXO_*O`N-r^CW{iI4$g!KixOg}jafOKGlNGy2Sr-ILYt`an2*SpVxdS& zc-&~ZxP5jrFpiEaX8>s9PS-%#WJ$r z74L3L=cBu_%{lXiJYJTs_$gJMNM5_hW21_BOk%M>ynw&OS9I%b;is9tTw z*1JMvDVL?qm`v4uV$I2ai^qKQDYyu&{+5@866IhyDvghFE}3Qm(~DHD)spqWM_a*j zG4E7s(k#*=-|b9PZJVk~}%;*l?HU6p;vcZKCW-@_}6*LYyB=F<8C1D=2t=x3|aOzlY)mApgxVxC>4U25w z;K=XijL(d0B>8niG76My>~#9c!by+qQ zP(gs{#|cX1X3EI*<;cxjG1bMVwNgi=N%@$2;yE&XwbixUg~W$bl=V_9jLx(m(M~xy zDxxfXD1H1{}?Ks`#F`#zI{~of6Uh z*ym%_AB(SmixeyApO~waKwTVzFOGL)#qpUvEJS{{p@iA<78X?`&%e3N$MU1l6j@&$T{eZNk>b;f-@wFr zJRTP8vzWvVO`J;-dlbpgmTfxK(1H9r6>fTwI*Z3w;cm`)a{FMWTKbY`?R4vExTu*2 zZUPg1b5XIOU{& z(~}vZOLcw=J1w^x^yowkxAR*#fl^sh9h=vYc^(e5eOKz%%FyqmtT%R?2v9OxW4+8w z^;7PonJKL|uU~KhnOf*H`@Ak7q(m6uA+!jqwZX5tww+s-N!qd=AV{vN#q`4?a9$K@xFBRbNyyMIc%2>kvHb`h|yqJ=MHab8&{gUNxOCJWp8jt$=p9hRkr<)FNO(EN#R?5PHSsQdqQ+4no%{}1QmrGQ20_#Ud$ZMs1c_et&S9N}1a>lpuDH23pk zYTqHE+haN2N@CdOM|07Qwn2Q^b12OnSH2v)FNsKa7wno0T%q5?I{jhI$wa@1DY z*%xGEoZ)o^%UtG_6VU~oycmgu9$%l4z4B`*4|KZP4c^XAuL#TGIEFKRH#{E?kUS*& z&Jtp#mM`Qz#L_Frn8^=@Y&6%pkS#`o|M^Xt&%e*V&%e*V&%e*V&%e*V&%gi1-~R)a K$1YI-zz6`#%1QwM literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/AUTHORS b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/AUTHORS new file mode 100644 index 0000000..7023323 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/AUTHORS @@ -0,0 +1,9 @@ +Authors and contributors, in alphabetical order: + +Alexey Charkov +Christian Ruppert +Conrad Kostecki +Constantin Baranov +Damjan Cvetko +Johnny Egeland +Martin Djernaes diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/COPYING b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/COPYING new file mode 100644 index 0000000..3d11e36 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/COPYING @@ -0,0 +1,28 @@ +igmpproxy - IGMP proxy based multicast router +Copyright (C) 2005 Johnny Egeland + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +This software is derived work from the following software. The original +source code has been modified from it's original state by the author +of igmpproxy. + +smcroute 0.92 - Copyright (C) 2001 Carsten Schill +- Licensed under the GNU General Public License, version 2 + +mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +Leland Stanford Junior University. +- Original license can be found in the Stanford.txt file. diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/ChangeLog b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/ChangeLog new file mode 100644 index 0000000..e8461bb --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/ChangeLog @@ -0,0 +1,317 @@ +commit 0e8e7fde2d68f9ea9b5095c24231024be281393c +Author: Constantin Baranov +Date: Mon Oct 5 21:31:42 2009 +0500 + + Release 0.1 + +commit 68ba90446e02825073b779bd0628c4f34833665d +Author: Constantin Baranov +Date: Thu Oct 1 00:09:38 2009 +0500 + + Fix building on FreeBSD 8.0 (wrt #2870461) + + Several IGMP_* macroses was deprecated in r189347/v800069 and + removed in r193938/v800098. Redefine them if needed. + +commit 74c2e1aa414f33585562d6783a3290ac63ee6c69 +Author: Martin Djernaes +Date: Sun Sep 6 16:41:22 2009 +0500 + + Fix netmask detection on interfaces with multiple addresses + + When having multiple IP addresses on an interface the netmask retrieved for + each IP address is not correct. The reason is that ioctrl for + SIOCGIFNETMASK will just provide the first netmask when no IP address is + provided in the call. + +commit 64144607195b779396a49179518aade24707cbbc +Author: Constantin Baranov +Date: Fri Sep 4 01:38:27 2009 +0500 + + Generate ChangeLog and AUTHORS by Git + +commit 94dd711318384e7b121924db0177a65b2fc38471 +Author: Constantin Baranov +Date: Sun Aug 16 19:45:04 2009 +0500 + + Release 0.1 beta5 + +commit 3ac424f82ab9f281dd3a0bfccbc92352bd5512c0 +Author: Damjan Cvetko +Date: Sun Aug 16 19:28:30 2009 +0500 + + Improve getIfByAddress() function (wrt #2835052) + + getIfByAddress does not find the best iterface in case of overlaping + networks. This patchs scans through all interfaces (and networks) and picks + the one with the longest subnet. + +commit 8ca5a29b56390020f27d4106643cd623cdb12bb2 +Author: Constantin Baranov +Date: Sun Aug 16 18:37:58 2009 +0500 + + Fix nextConfigToken() function (wrt #2838154) + + The nextConfigToken() returns NULL when EOF reached even if token + was read already. This results in loss of last token in file usually. + Let it return unterminated token if it is non-empty already. + +commit 954674bc4ec6a689b1de2f2a2766e993df1e2705 +Author: Constantin Baranov +Date: Thu May 14 01:14:56 2009 +0500 + + Release 0.1 beta4 + +commit a7908b855ecb6959ea08ef3b374ff2aca9939cf0 +Author: Constantin Baranov +Date: Thu May 14 01:10:35 2009 +0500 + + Update README etc. + +commit 62fa19975ff4daa8e31a9b07bf33ddc8cd0129f8 +Author: Constantin Baranov +Date: Thu May 14 01:06:44 2009 +0500 + + State licenses in the COPYING + +commit 3ac3ae462ca35ec7f1f22d968bf4fab0807d636f +Author: Constantin Baranov +Date: Sun May 10 05:01:21 2009 +0500 + + Remove pointless backslashes in configure.ac + +commit 3c4118949b6a19b384b08e171a5294b0ea307e08 +Author: Constantin Baranov +Date: Sun May 10 02:19:30 2009 +0500 + + Replace bzero() with memset() + +commit ee07cb5bfd2514503d0564d2aee0656203d9a91e +Author: Constantin Baranov +Date: Sat May 9 02:09:28 2009 +0500 + + Remove redundant #include + +commit 56e37ad6ba0c6aade86c1407ea55abb8b445d119 +Author: Constantin Baranov +Date: Sat May 9 02:00:03 2009 +0500 + + Add DragonFly BSD support + +commit eccefd205c3fb326b6ae1b79676238fc349f8be8 +Author: Constantin Baranov +Date: Sat May 9 01:57:07 2009 +0500 + + Add missed format argument in acceptLeaveMessage() + +commit 16c55bd5ab6a9608099252fa320ddbc0a05fca0a +Author: Constantin Baranov +Date: Wed May 6 01:29:04 2009 +0500 + + Avoid inclusion if linux/in.h (wrt #2787118) + + The linux/in.h header conflicts with the netinet/in.h header in + certain Linux distributions. So let's ensure that linux/in.h will + never be included neither directly nor from linux/mroute.h. + +commit e01624e123c5a24310a4fb7f70ab6178278c3b7a +Author: Constantin Baranov +Date: Sun May 3 22:00:33 2009 +0500 + + Release 0.1 beta3 + +commit a3c84e48a1ff32812aac92ca0dba923ca7dd4ca0 +Author: Constantin Baranov +Date: Sun May 3 21:53:56 2009 +0500 + + Show version in help message + + Also remove unused Version constant. + +commit f880a472f6b835d8139adc27908206a11a50846f +Author: Constantin Baranov +Date: Sun May 3 21:43:01 2009 +0500 + + Remove IF_DEBUG macros + + IF_DEBUG macros hides my_log(LOG_DEBUG...) calls. Thus it is redundant. + +commit 6b1a4beb839f41ecc7468e2680f5d0eedbd49b35 +Author: Constantin Baranov +Date: Sun May 3 21:29:16 2009 +0500 + + Break long lines in build scripts + +commit 55dcd57b8cfac25a4eeafae5a18ab85a07484418 +Author: Constantin Baranov +Date: Sun May 3 21:19:19 2009 +0500 + + Remove hardcoded version strings from man pages + +commit e7880c542e38bae8efa16b148a431488456f5594 +Author: Constantin Baranov +Date: Sun May 3 20:52:58 2009 +0500 + + Move mrouted-LICENSE out of doc directory + +commit 9fee127b13336776d2e6019db8c22ee7de9bf36f +Author: Constantin Baranov +Date: Sun May 3 20:32:31 2009 +0500 + + Use strdup() instead of malloc() and strcpy() + +commit d34dee7ea0b03ba98806558a1eebf78061ce8878 +Author: Constantin Baranov +Date: Sun May 3 20:30:44 2009 +0500 + + Eliminate message about IGMP_MEMBERSHIP_QUERY ignored + +commit 32de2bfbad537f6e60edddaefa6c240b2811c567 +Author: Constantin Baranov +Date: Sun May 3 20:25:30 2009 +0500 + + Add OpenBSD support + +commit a85c620eccea244c80a34c3403b2ea7055616703 +Author: Constantin Baranov +Date: Sun May 3 04:16:53 2009 +0500 + + Add NetBSD support + +commit d61d57c50b8b2399ff90e32da687686cf068680a +Author: Constantin Baranov +Date: Sat May 2 05:07:12 2009 +0500 + + Remove outdated bug report email address + +commit 14edc6d6dab34e5e51bc12a61f45bae753235e98 +Author: Constantin Baranov +Date: Sat May 2 04:49:38 2009 +0500 + + Improve OS checking mechanism + + Hide all OS-specific things in os-*.h headers and let autoconf select + proper header. Also add check for struct sockaddr_in.sin_len member. + +commit b23a4c9f9edd43a22759930ae969ee420c270456 +Author: Constantin Baranov +Date: Sat May 2 04:48:23 2009 +0500 + + Do not close std* streams in non-debug mode + +commit 7256cb378db4b839f0138cc9422971f5fb353de1 +Author: Constantin Baranov +Date: Fri Apr 17 21:16:47 2009 +0500 + + Clean up configure.ac and add check for sockaddr.sa_len member + +commit eb6f3eababbca43c517a1407e5af66ed384bf07d +Author: Constantin Baranov +Date: Fri Apr 17 20:04:32 2009 +0500 + + Install igmpproxy to sbin directory + +commit e22427f33150970f6bef3106ac018d7138dfbadb +Author: Constantin Baranov +Date: Fri Apr 17 20:03:46 2009 +0500 + + Add missing igmpproxy.h to list of sources + +commit 68fb7638f36c85c44b2a8a33e28af58c65de8a06 +Author: Christian Ruppert +Date: Thu Apr 9 21:28:04 2009 +0500 + + Add missing 'h' to the getopt() optstring + +commit bae0b7b42ec948442945648878dbc8ef3ee1d2c5 +Author: Constantin Baranov +Date: Sat Apr 4 00:38:37 2009 +0500 + + Rework logging + + Allow to control verbosity with -v option. + Don't write to syslog in debug mode. + Don't fork in background. Let start-stop-deamon do this. + + Also update man-pages and help messages. + +commit df0ffb7998cbbd3ab09c100f48dead6adb93aa2c +Author: Constantin Baranov +Date: Sat Apr 4 00:38:06 2009 +0500 + + Move igmpproxy.conf out of src directory + +commit 4c36c1ea8f9822f96031cff8f40ca3fc7cb93db3 +Author: Constantin Baranov +Date: Mon Mar 9 22:03:46 2009 +0400 + + Initial FreeBSD support + + Based on IGMPproxy port to FreeBSD made by + Pavel Korshunov and gygenot. + +commit fdc5cc59655a59f7f73af78d6606b5c45b9c1071 +Author: Constantin Baranov +Date: Sun Mar 8 20:37:17 2009 +0400 + + Move to C99 and clean up the code + + Listen to compiler's warnings. + Use standard integer and boolean types. + Remove redundant version.h. + +commit b535f70ec3dfc73a767592739c8aa44583e7e833 +Author: Constantin Baranov +Date: Sun Mar 8 17:53:24 2009 +0400 + + Rename defs.h to igmpproxy.h + +commit 2df90756d378de822d6ece6aa0a340cab6a489e4 +Author: Constantin Baranov +Date: Sun Mar 8 16:17:20 2009 +0400 + + Add bootstrap script + +commit 3393d1cd7c0f13cc91fa3ec974eb2cd1409bb720 +Author: Constantin Baranov +Date: Fri Feb 27 22:28:03 2009 +0400 + + Remove stuff generated by autotools + +commit 576b42c7fc71757a33dbac0ebc388f8eebd81fe3 +Author: Constantin Baranov +Date: Mon Feb 23 00:36:39 2009 +0400 + + Fix logging to syslog + + Do not write textual representation of message severity + because syslog can do this itself. Also write only one + string at a time. + +commit 1223d5975a1da679d15120417365582a0054abc4 +Author: Constantin Baranov +Date: Mon Feb 23 00:22:20 2009 +0400 + + chmod -x on appropriate files + +commit 66145eee1d74c9edd23f3d72700911865b7a09bb +Author: Conrad Kostecki +Date: Mon Feb 23 00:18:48 2009 +0400 + + Remove banner + +commit 710d688641ca68d89a7b8958c7d84144d5fb1d9b +Author: Alexey Charkov +Date: Mon Feb 23 00:13:03 2009 +0400 + + Enable autotools + + I've packaged igmpproxy with GNU autotools, which will allow for a better + experience on Gentoo (CFLAGS, directory structure etc). Also, compile-time + warnings are fixed. As the project is dead, this is not even a fork :) + +commit f4c36aa73287b794e2c842564e82d2d4f3c1027f +Author: Johnny Egeland +Date: Mon Feb 23 00:10:48 2009 +0400 + + Initial import diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/GPL.txt b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/GPL.txt new file mode 100644 index 0000000..97d8bc8 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/GPL.txt @@ -0,0 +1,286 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + + + + + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/INSTALL b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/INSTALL new file mode 100644 index 0000000..2550dab --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/INSTALL @@ -0,0 +1,302 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *Note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile new file mode 100644 index 0000000..ab42594 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile @@ -0,0 +1,739 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/igmpproxy +pkgincludedir = $(includedir)/igmpproxy +pkglibdir = $(libdir)/igmpproxy +pkglibexecdir = $(libexecdir)/igmpproxy +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i586-pc-linux-gnu +host_triplet = i586-pc-linux-gnu +subdir = . +DIST_COMMON = README $(am__configure_deps) $(dist_sysconf_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/configure AUTHORS COPYING \ + ChangeLog INSTALL NEWS config.guess config.sub depcomp \ + install-sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(sysconfdir)" +DATA = $(dist_sysconf_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run aclocal-1.11 +AMTAR = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run tar +AUTOCONF = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoconf +AUTOHEADER = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoheader +AUTOMAKE = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EXEEXT = +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBS = +LTLIBOBJS = +MAKEINFO = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +OBJEXT = o +PACKAGE = igmpproxy +PACKAGE_BUGREPORT = +PACKAGE_NAME = igmpproxy +PACKAGE_STRING = igmpproxy 0.1 +PACKAGE_TARNAME = igmpproxy +PACKAGE_VERSION = 0.1 +PATH_SEPARATOR = : +SET_MAKE = +SHELL = /bin/sh +STRIP = +VERSION = 0.1 +abs_builddir = /usr/local/src/igmpproxy-0.1 +abs_srcdir = /usr/local/src/igmpproxy-0.1 +abs_top_builddir = /usr/local/src/igmpproxy-0.1 +abs_top_srcdir = /usr/local/src/igmpproxy-0.1 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i586-pc-linux-gnu +build_alias = +build_cpu = i586 +build_os = linux-gnu +build_vendor = pc +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i586-pc-linux-gnu +host_alias = +host_cpu = i586 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /usr/local/src/igmpproxy-0.1/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local/igmpproxy-0.1 +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +SUBDIRS = doc src +EXTRA_DIST = GPL.txt Stanford.txt +dist_sysconf_DATA = igmpproxy.conf +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-dist_sysconfDATA: $(dist_sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ + done + +uninstall-dist_sysconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sysconfdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sysconfdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-dist_sysconfDATA + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_sysconfDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_sysconfDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am \ + uninstall-dist_sysconfDATA + + +ChangeLog: + git --git-dir=$(srcdir)/.git log > $@ + +AUTHORS: ChangeLog + ( echo "Authors and contributors, in alphabetical order: "; echo; \ + sed -r "s/^Author: (.*)/\1/;t;d" $< | sort -u ) > $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.am b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.am new file mode 100644 index 0000000..b569f48 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.am @@ -0,0 +1,10 @@ +SUBDIRS = doc src +EXTRA_DIST = GPL.txt Stanford.txt +dist_sysconf_DATA = igmpproxy.conf + +ChangeLog: + git --git-dir=$(srcdir)/.git log > $@ + +AUTHORS: ChangeLog + ( echo "Authors and contributors, in alphabetical order: "; echo; \ + sed -r "s/^Author: (.*)/\1/;t;d" $< | sort -u ) > $@ diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.in b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.in new file mode 100644 index 0000000..508f703 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Makefile.in @@ -0,0 +1,739 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(dist_sysconf_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/configure AUTHORS COPYING \ + ChangeLog INSTALL NEWS config.guess config.sub depcomp \ + install-sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(sysconfdir)" +DATA = $(dist_sysconf_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = doc src +EXTRA_DIST = GPL.txt Stanford.txt +dist_sysconf_DATA = igmpproxy.conf +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-dist_sysconfDATA: $(dist_sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ + done + +uninstall-dist_sysconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sysconfdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sysconfdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-dist_sysconfDATA + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_sysconfDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_sysconfDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am \ + uninstall-dist_sysconfDATA + + +ChangeLog: + git --git-dir=$(srcdir)/.git log > $@ + +AUTHORS: ChangeLog + ( echo "Authors and contributors, in alphabetical order: "; echo; \ + sed -r "s/^Author: (.*)/\1/;t;d" $< | sort -u ) > $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/NEWS b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/NEWS new file mode 100644 index 0000000..fa39cb9 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/NEWS @@ -0,0 +1,4 @@ +New releases, the Git repository and the bug tracker are accessible +at project homepage: + + http://sourceforge.net/projects/igmpproxy/ diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/README b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/README new file mode 100644 index 0000000..01add8d --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/README @@ -0,0 +1,10 @@ +IGMPproxy is a simple mulitcast router that only uses the IGMP protocol. + +Supported operating systems: + - Linux + - FreeBSD + - NetBSD + - OpenBSD + - DragonFly BSD + +This software is released under the GNU GPL license v2. See details in COPYING. diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Stanford.txt b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Stanford.txt new file mode 100644 index 0000000..ef7da47 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/Stanford.txt @@ -0,0 +1,48 @@ + +The mrouted program is covered by the following license. Use of the +mrouted program represents acceptance of these terms and conditions. + +1. STANFORD grants to LICENSEE a nonexclusive and nontransferable license +to use, copy and modify the computer software ``mrouted'' (hereinafter +called the ``Program''), upon the terms and conditions hereinafter set +out and until Licensee discontinues use of the Licensed Program. + +2. LICENSEE acknowledges that the Program is a research tool still in +the development state, that it is being supplied ``as is,'' without any +accompanying services from STANFORD, and that this license is entered +into in order to encourage scientific collaboration aimed at further +development and application of the Program. + +3. LICENSEE may copy the Program and may sublicense others to use object +code copies of the Program or any derivative version of the Program. +All copies must contain all copyright and other proprietary notices found +in the Program as provided by STANFORD. Title to copyright to the +Program remains with STANFORD. + +4. LICENSEE may create derivative versions of the Program. LICENSEE +hereby grants STANFORD a royalty-free license to use, copy, modify, +distribute and sublicense any such derivative works. At the time +LICENSEE provides a copy of a derivative version of the Program to a +third party, LICENSEE shall provide STANFORD with one copy of the source +code of the derivative version at no charge to STANFORD. + +5. STANFORD MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. +By way of example, but not limitation, STANFORD MAKES NO REPRESENTATION +OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR +THAT THE USE OF THE LICENSED PROGRAM WILL NOT INFRINGE ANY PATENTS, +COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. STANFORD shall not be held liable +for any liability nor for any direct, indirect or consequential damages +with respect to any claim by LICENSEE or any third party on account of or +arising from this Agreement or use of the Program. + +6. This agreement shall be construed, interpreted and applied in +accordance with the State of California and any legal action arising +out of this Agreement or use of the Program shall be filed in a court +in the State of California. + +7. Nothing in this Agreement shall be construed as conferring rights to +use in advertising, publicity or otherwise any trademark or the name +of ``Stanford''. + +The mrouted program is COPYRIGHT 1989 by The Board of Trustees of +Leland Stanford Junior University. diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/aclocal.m4 b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/aclocal.m4 new file mode 100644 index 0000000..9304f88 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/aclocal.m4 @@ -0,0 +1,951 @@ +# generated automatically by aclocal 1.11 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, +[m4_warning([this file was generated for autoconf 2.63. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.guess b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.guess new file mode 100755 index 0000000..12734a7 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.guess @@ -0,0 +1,1554 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-08-19' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU/*) + eval $set_cc_for_build + cat << EOF > $dummy.c + #include + #ifdef __UCLIBC__ + # ifdef __UCLIBC_CONFIG_VERSION__ + LIBC=uclibc __UCLIBC_CONFIG_VERSION__ + # else + LIBC=uclibc + # endif + #else + LIBC=gnu + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}" + ;; + esac + # This should get integrated into the C code below, but now we hack + if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h new file mode 100644 index 0000000..f438e80 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h @@ -0,0 +1,29 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if `sin_len' is member of `struct sockaddr_in'. */ +/* #undef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ + +/* Define to 1 if `sa_len' is member of `struct sockaddr'. */ +/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ + +/* Name of package */ +#define PACKAGE "igmpproxy" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "igmpproxy" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "igmpproxy 0.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "igmpproxy" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.1" + +/* Version number of package */ +#define VERSION "0.1" diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h.in b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h.in new file mode 100644 index 0000000..bb6a90d --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.h.in @@ -0,0 +1,28 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if `sin_len' is member of `struct sockaddr_in'. */ +#undef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN + +/* Define to 1 if `sa_len' is member of `struct sockaddr'. */ +#undef HAVE_STRUCT_SOCKADDR_SA_LEN + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Version number of package */ +#undef VERSION diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.log b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.log new file mode 100644 index 0000000..11ca199 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.log @@ -0,0 +1,559 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by igmpproxy configure 0.1, which was +generated by GNU Autoconf 2.63. Invocation command line was + + $ ./configure --prefix=/usr/local/igmpproxy-0.1 + +## --------- ## +## Platform. ## +## --------- ## + +hostname = gw-flr +uname -m = i586 +uname -r = 3.2.0-4-486 +uname -s = Linux +uname -v = #1 Debian 3.2.41-2 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /root/bin +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:1839: checking for a BSD-compatible install +configure:1907: result: /usr/bin/install -c +configure:1918: checking whether build environment is sane +configure:1978: result: yes +configure:2119: checking for a thread-safe mkdir -p +configure:2158: result: /bin/mkdir -p +configure:2171: checking for gawk +configure:2187: found /usr/bin/gawk +configure:2198: result: gawk +configure:2209: checking whether make sets $(MAKE) +configure:2231: result: yes +configure:2328: checking for style of include used by make +configure:2356: result: GNU +configure:2426: checking for gcc +configure:2442: found /usr/bin/gcc +configure:2453: result: gcc +configure:2685: checking for C compiler version +configure:2693: gcc --version >&5 +gcc (Debian 4.7.2-5) 4.7.2 +Copyright (C) 2012 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:2697: $? = 0 +configure:2704: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/i486-linux-gnu/4.7/lto-wrapper +Target: i486-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu +Thread model: posix +gcc version 4.7.2 (Debian 4.7.2-5) +configure:2708: $? = 0 +configure:2715: gcc -V >&5 +gcc: error: unrecognized command line option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:2719: $? = 4 +configure:2742: checking for C compiler default output file name +configure:2764: gcc conftest.c >&5 +configure:2768: $? = 0 +configure:2806: result: a.out +configure:2825: checking whether the C compiler works +configure:2835: ./a.out +configure:2839: $? = 0 +configure:2858: result: yes +configure:2865: checking whether we are cross compiling +configure:2867: result: no +configure:2870: checking for suffix of executables +configure:2877: gcc -o conftest conftest.c >&5 +configure:2881: $? = 0 +configure:2907: result: +configure:2913: checking for suffix of object files +configure:2939: gcc -c conftest.c >&5 +configure:2943: $? = 0 +configure:2968: result: o +configure:2972: checking whether we are using the GNU C compiler +configure:3001: gcc -c conftest.c >&5 +configure:3008: $? = 0 +configure:3025: result: yes +configure:3034: checking whether gcc accepts -g +configure:3064: gcc -c -g conftest.c >&5 +configure:3071: $? = 0 +configure:3172: result: yes +configure:3189: checking for gcc option to accept ISO C89 +configure:3263: gcc -c -g -O2 conftest.c >&5 +configure:3270: $? = 0 +configure:3293: result: none needed +configure:3313: checking dependency style of gcc +configure:3423: result: gcc3 +configure:3438: checking for gcc option to accept ISO C99 +configure:3597: gcc -c -g -O2 conftest.c >&5 +conftest.c:60:29: error: expected ';', ',' or ')' before 'text' +conftest.c: In function 'main': +conftest.c:114:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'newvar' +conftest.c:114:18: error: 'newvar' undeclared (first use in this function) +conftest.c:114:18: note: each undeclared identifier is reported only once for each function it appears in +conftest.c:124:3: error: 'for' loop initial declarations are only allowed in C99 mode +conftest.c:124:3: note: use option -std=c99 or -std=gnu99 to compile your code +configure:3604: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "igmpproxy" +| #define PACKAGE_TARNAME "igmpproxy" +| #define PACKAGE_VERSION "0.1" +| #define PACKAGE_STRING "igmpproxy 0.1" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE "igmpproxy" +| #define VERSION "0.1" +| /* end confdefs.h. */ +| #include +| #include +| #include +| #include +| #include +| +| // Check varargs macros. These examples are taken from C99 6.10.3.5. +| #define debug(...) fprintf (stderr, __VA_ARGS__) +| #define showlist(...) puts (#__VA_ARGS__) +| #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +| static void +| test_varargs_macros (void) +| { +| int x = 1234; +| int y = 5678; +| debug ("Flag"); +| debug ("X = %d\n", x); +| showlist (The first, second, and third items.); +| report (x>y, "x is %d but y is %d", x, y); +| } +| +| // Check long long types. +| #define BIG64 18446744073709551615ull +| #define BIG32 4294967295ul +| #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +| #if !BIG_OK +| your preprocessor is broken; +| #endif +| #if BIG_OK +| #else +| your preprocessor is broken; +| #endif +| static long long int bignum = -9223372036854775807LL; +| static unsigned long long int ubignum = BIG64; +| +| struct incomplete_array +| { +| int datasize; +| double data[]; +| }; +| +| struct named_init { +| int number; +| const wchar_t *name; +| double average; +| }; +| +| typedef const char *ccp; +| +| static inline int +| test_restrict (ccp restrict text) +| { +| // See if C++-style comments work. +| // Iterate through items via the restricted pointer. +| // Also check for declarations in for loops. +| for (unsigned int i = 0; *(text+i) != '\0'; ++i) +| continue; +| return 0; +| } +| +| // Check varargs and va_copy. +| static void +| test_varargs (const char *format, ...) +| { +| va_list args; +| va_start (args, format); +| va_list args_copy; +| va_copy (args_copy, args); +| +| const char *str; +| int number; +| float fnumber; +| +| while (*format) +| { +| switch (*format++) +| { +| case 's': // string +| str = va_arg (args_copy, const char *); +| break; +| case 'd': // int +| number = va_arg (args_copy, int); +| break; +| case 'f': // float +| fnumber = va_arg (args_copy, double); +| break; +| default: +| break; +| } +| } +| va_end (args_copy); +| va_end (args); +| } +| +| int +| main () +| { +| +| // Check bool. +| _Bool success = false; +| +| // Check restrict. +| if (test_restrict ("String literal") == 0) +| success = true; +| char *restrict newvar = "Another string"; +| +| // Check varargs. +| test_varargs ("s, d' f .", "string", 65, 34.234); +| test_varargs_macros (); +| +| // Check flexible array members. +| struct incomplete_array *ia = +| malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); +| ia->datasize = 10; +| for (int i = 0; i < ia->datasize; ++i) +| ia->data[i] = i * 1.234; +| +| // Check named initializers. +| struct named_init ni = { +| .number = 34, +| .name = L"Test wide string", +| .average = 543.34343, +| }; +| +| ni.number = 58; +| +| int dynamic_array[ni.number]; +| dynamic_array[ni.number - 1] = 543; +| +| // work around unused variable warnings +| return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' +| || dynamic_array[ni.number - 1] != 543); +| +| ; +| return 0; +| } +configure:3597: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:3604: $? = 0 +configure:3634: result: -std=gnu99 +configure:3647: checking build system type +configure:3665: result: i586-pc-linux-gnu +configure:3687: checking host system type +configure:3702: result: i586-pc-linux-gnu +configure:3738: checking for struct sockaddr.sa_len +configure:3770: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:19:12: error: 'struct sockaddr' has no member named 'sa_len' +configure:3777: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "igmpproxy" +| #define PACKAGE_TARNAME "igmpproxy" +| #define PACKAGE_VERSION "0.1" +| #define PACKAGE_STRING "igmpproxy 0.1" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE "igmpproxy" +| #define VERSION "0.1" +| /* end confdefs.h. */ +| +| #include +| #include +| +| +| int +| main () +| { +| static struct sockaddr ac_aggr; +| if (ac_aggr.sa_len) +| return 0; +| ; +| return 0; +| } +configure:3814: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:19:19: error: 'struct sockaddr' has no member named 'sa_len' +configure:3821: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "igmpproxy" +| #define PACKAGE_TARNAME "igmpproxy" +| #define PACKAGE_VERSION "0.1" +| #define PACKAGE_STRING "igmpproxy 0.1" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE "igmpproxy" +| #define VERSION "0.1" +| /* end confdefs.h. */ +| +| #include +| #include +| +| +| int +| main () +| { +| static struct sockaddr ac_aggr; +| if (sizeof ac_aggr.sa_len) +| return 0; +| ; +| return 0; +| } +configure:3839: result: no +configure:3850: checking for struct sockaddr_in.sin_len +configure:3882: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:19:12: error: 'struct sockaddr_in' has no member named 'sin_len' +configure:3889: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "igmpproxy" +| #define PACKAGE_TARNAME "igmpproxy" +| #define PACKAGE_VERSION "0.1" +| #define PACKAGE_STRING "igmpproxy 0.1" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE "igmpproxy" +| #define VERSION "0.1" +| /* end confdefs.h. */ +| +| #include +| #include +| +| +| int +| main () +| { +| static struct sockaddr_in ac_aggr; +| if (ac_aggr.sin_len) +| return 0; +| ; +| return 0; +| } +configure:3926: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:19:19: error: 'struct sockaddr_in' has no member named 'sin_len' +configure:3933: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "igmpproxy" +| #define PACKAGE_TARNAME "igmpproxy" +| #define PACKAGE_VERSION "0.1" +| #define PACKAGE_STRING "igmpproxy 0.1" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE "igmpproxy" +| #define VERSION "0.1" +| /* end confdefs.h. */ +| +| #include +| #include +| +| +| int +| main () +| { +| static struct sockaddr_in ac_aggr; +| if (sizeof ac_aggr.sin_len) +| return 0; +| ; +| return 0; +| } +configure:3951: result: no +configure:4089: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by igmpproxy config.status 0.1, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on gw-flr + +config.status:776: creating Makefile +config.status:776: creating doc/Makefile +config.status:776: creating src/Makefile +config.status:776: creating doc/igmpproxy.8 +config.status:776: creating doc/igmpproxy.conf.5 +config.status:776: creating config.h +config.status:1062: linking src/os-linux.h to src/os.h +config.status:1085: executing depfiles commands + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=i586-pc-linux-gnu +ac_cv_c_compiler_gnu=yes +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_host=i586-pc-linux-gnu +ac_cv_member_struct_sockaddr_in_sin_len=no +ac_cv_member_struct_sockaddr_sa_len=no +ac_cv_objext=o +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=gawk +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_cc_c89= +ac_cv_prog_cc_c99=-std=gnu99 +ac_cv_prog_cc_g=yes +ac_cv_prog_make_make_set=yes +am_cv_CC_dependencies_compiler_type=gcc3 + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /usr/local/src/igmpproxy-0.1/missing --run aclocal-1.11' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='${SHELL} /usr/local/src/igmpproxy-0.1/missing --run tar' +AUTOCONF='${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoconf' +AUTOHEADER='${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoheader' +AUTOMAKE='${SHELL} /usr/local/src/igmpproxy-0.1/missing --run automake-1.11' +AWK='gawk' +CC='gcc -std=gnu99' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2' +CPPFLAGS='' +CYGPATH_W='echo' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EXEEXT='' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +LDFLAGS='' +LIBOBJS='' +LIBS='' +LTLIBOBJS='' +MAKEINFO='${SHELL} /usr/local/src/igmpproxy-0.1/missing --run makeinfo' +MKDIR_P='/bin/mkdir -p' +OBJEXT='o' +PACKAGE='igmpproxy' +PACKAGE_BUGREPORT='' +PACKAGE_NAME='igmpproxy' +PACKAGE_STRING='igmpproxy 0.1' +PACKAGE_TARNAME='igmpproxy' +PACKAGE_VERSION='0.1' +PATH_SEPARATOR=':' +SET_MAKE='' +SHELL='/bin/sh' +STRIP='' +VERSION='0.1' +ac_ct_CC='gcc' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__quote='' +am__tar='${AMTAR} chof - "$$tardir"' +am__untar='${AMTAR} xf -' +bindir='${exec_prefix}/bin' +build='i586-pc-linux-gnu' +build_alias='' +build_cpu='i586' +build_os='linux-gnu' +build_vendor='pc' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='i586-pc-linux-gnu' +host_alias='' +host_cpu='i586' +host_os='linux-gnu' +host_vendor='pc' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /usr/local/src/igmpproxy-0.1/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='/bin/mkdir -p' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local/igmpproxy-0.1' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +#define PACKAGE_NAME "igmpproxy" +#define PACKAGE_TARNAME "igmpproxy" +#define PACKAGE_VERSION "0.1" +#define PACKAGE_STRING "igmpproxy 0.1" +#define PACKAGE_BUGREPORT "" +#define PACKAGE "igmpproxy" +#define VERSION "0.1" + +configure: exit 0 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.status b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.status new file mode 100755 index 0000000..e2e807e --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.status @@ -0,0 +1,1232 @@ +#! /bin/sh +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=${CONFIG_SHELL-/bin/sh} +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by igmpproxy $as_me 0.1, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" Makefile doc/Makefile src/Makefile doc/igmpproxy.8 doc/igmpproxy.conf.5" +config_headers=" config.h" +config_links=" src/os.h:src/os-linux.h" +config_commands=" depfiles" + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to ." + +ac_cs_version="\ +igmpproxy config.status 0.1 +configured by ./configure, generated by GNU Autoconf 2.63, + with options \"'--prefix=/usr/local/igmpproxy-0.1'\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='/usr/local/src/igmpproxy-0.1' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='gawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X '/bin/sh' './configure' '--prefix=/usr/local/igmpproxy-0.1' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 + CONFIG_SHELL='/bin/sh' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="." + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "src/os.h") CONFIG_LINKS="$CONFIG_LINKS src/os.h:src/os-${os}.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "doc/igmpproxy.8") CONFIG_FILES="$CONFIG_FILES doc/igmpproxy.8" ;; + "doc/igmpproxy.conf.5") CONFIG_FILES="$CONFIG_FILES doc/igmpproxy.conf.5" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +cat >>"$tmp/subs1.awk" <<\_ACAWK && +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["host_os"]="linux-gnu" +S["host_vendor"]="pc" +S["host_cpu"]="i586" +S["host"]="i586-pc-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="pc" +S["build_cpu"]="i586" +S["build"]="i586-pc-linux-gnu" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc -std=gnu99" +S["am__untar"]="${AMTAR} xf -" +S["am__tar"]="${AMTAR} chof - \"$$tardir\"" +S["AMTAR"]="${SHELL} /usr/local/src/igmpproxy-0.1/missing --run tar" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="/bin/mkdir -p" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="" +S["install_sh"]="${SHELL} /usr/local/src/igmpproxy-0.1/install-sh" +S["MAKEINFO"]="${SHELL} /usr/local/src/igmpproxy-0.1/missing --run makeinfo" +S["AUTOHEADER"]="${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoheader" +S["AUTOMAKE"]="${SHELL} /usr/local/src/igmpproxy-0.1/missing --run automake-1.11" +S["AUTOCONF"]="${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoconf" +S["ACLOCAL"]="${SHELL} /usr/local/src/igmpproxy-0.1/missing --run aclocal-1.11" +S["VERSION"]="0.1" +S["PACKAGE"]="igmpproxy" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="" +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local/igmpproxy-0.1" +S["exec_prefix"]="${prefix}" +S["PACKAGE_BUGREPORT"]="" +S["PACKAGE_STRING"]="igmpproxy 0.1" +S["PACKAGE_VERSION"]="0.1" +S["PACKAGE_TARNAME"]="igmpproxy" +S["PACKAGE_NAME"]="igmpproxy" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/sh" +_ACAWK +cat >>"$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"igmpproxy\"" +D["PACKAGE_TARNAME"]=" \"igmpproxy\"" +D["PACKAGE_VERSION"]=" \"0.1\"" +D["PACKAGE_STRING"]=" \"igmpproxy 0.1\"" +D["PACKAGE_BUGREPORT"]=" \"\"" +D["PACKAGE"]=" \"igmpproxy\"" +D["VERSION"]=" \"0.1\"" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:$LINENO: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + { { $as_echo "$as_me:$LINENO: error: $ac_source: file not found" >&5 +$as_echo "$as_me: error: $ac_source: file not found" >&2;} + { (exit 1); exit 1; }; } + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + { { $as_echo "$as_me:$LINENO: error: cannot link or copy $ac_source to $ac_file" >&5 +$as_echo "$as_me: error: cannot link or copy $ac_source to $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + ;; + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.sub b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.sub new file mode 100755 index 0000000..3243784 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/config.sub @@ -0,0 +1,1717 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-08-19' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx | dvp \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsEE* | ee | ps2) + basic_machine=mips64r5900el-scei + case $os in + -linux*) + ;; + *) + os=-elf + ;; + esac + ;; + iop) + basic_machine=mipsel-scei + os=-irx + ;; + dvp) + basic_machine=dvp-scei + os=-elf + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -irx*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure new file mode 100755 index 0000000..1314ebf --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure @@ -0,0 +1,5469 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.63 for igmpproxy 0.1. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='igmpproxy' +PACKAGE_TARNAME='igmpproxy' +PACKAGE_VERSION='0.1' +PACKAGE_STRING='igmpproxy 0.1' +PACKAGE_BUGREPORT='' + +ac_unique_file="src/igmpproxy.c" +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures igmpproxy 0.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/igmpproxy] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of igmpproxy 0.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +igmpproxy configure 0.1 +generated by GNU Autoconf 2.63 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by igmpproxy $as_me 0.1, which was +generated by GNU Autoconf 2.63. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 +$as_echo "$as_me: error: unsafe absolute working directory name" >&2;} + { (exit 1); exit 1; }; };; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 +$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} + { (exit 1); exit 1; }; };; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +$as_echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='igmpproxy' + VERSION='0.1' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +ac_config_headers="$ac_config_headers config.h" + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c99=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac + + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +case $host_os in + linux*) os=linux;; + freebsd*) os=freebsd;; + netbsd*) os=netbsd;; + openbsd*) os=openbsd;; + dragonfly*) os=dragonfly;; + *) { { $as_echo "$as_me:$LINENO: error: OS $host_os is not supported" >&5 +$as_echo "$as_me: error: OS $host_os is not supported" >&2;} + { (exit 1); exit 1; }; };; +esac +ac_config_links="$ac_config_links src/os.h:src/os-${os}.h" + + + +{ $as_echo "$as_me:$LINENO: checking for struct sockaddr.sa_len" >&5 +$as_echo_n "checking for struct sockaddr.sa_len... " >&6; } +if test "${ac_cv_member_struct_sockaddr_sa_len+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + + +int +main () +{ +static struct sockaddr ac_aggr; +if (ac_aggr.sa_len) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_sockaddr_sa_len=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + + +int +main () +{ +static struct sockaddr ac_aggr; +if (sizeof ac_aggr.sa_len) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_sockaddr_sa_len=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_member_struct_sockaddr_sa_len=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_sa_len" >&5 +$as_echo "$ac_cv_member_struct_sockaddr_sa_len" >&6; } +if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_SA_LEN 1 +_ACEOF + + +fi + +{ $as_echo "$as_me:$LINENO: checking for struct sockaddr_in.sin_len" >&5 +$as_echo_n "checking for struct sockaddr_in.sin_len... " >&6; } +if test "${ac_cv_member_struct_sockaddr_in_sin_len+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + + +int +main () +{ +static struct sockaddr_in ac_aggr; +if (ac_aggr.sin_len) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_sockaddr_in_sin_len=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + + +int +main () +{ +static struct sockaddr_in ac_aggr; +if (sizeof ac_aggr.sin_len) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_sockaddr_in_sin_len=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_member_struct_sockaddr_in_sin_len=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_in_sin_len" >&5 +$as_echo "$ac_cv_member_struct_sockaddr_in_sin_len" >&6; } +if test "x$ac_cv_member_struct_sockaddr_in_sin_len" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1 +_ACEOF + + +fi + + +ac_config_files="$ac_config_files Makefile doc/Makefile src/Makefile doc/igmpproxy.8 doc/igmpproxy.conf.5" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by igmpproxy $as_me 0.1, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_links="$ac_config_links" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +igmpproxy config.status 0.1 +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "src/os.h") CONFIG_LINKS="$CONFIG_LINKS src/os.h:src/os-${os}.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "doc/igmpproxy.8") CONFIG_FILES="$CONFIG_FILES doc/igmpproxy.8" ;; + "doc/igmpproxy.conf.5") CONFIG_FILES="$CONFIG_FILES doc/igmpproxy.conf.5" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:$LINENO: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + { { $as_echo "$as_me:$LINENO: error: $ac_source: file not found" >&5 +$as_echo "$as_me: error: $ac_source: file not found" >&2;} + { (exit 1); exit 1; }; } + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + { { $as_echo "$as_me:$LINENO: error: cannot link or copy $ac_source to $ac_file" >&5 +$as_echo "$as_me: error: cannot link or copy $ac_source to $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + ;; + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure.ac b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure.ac new file mode 100644 index 0000000..85beb08 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/configure.ac @@ -0,0 +1,35 @@ +AC_PREREQ([2.63]) +AC_INIT([igmpproxy], [0.1]) +AM_INIT_AUTOMAKE +AC_CONFIG_SRCDIR([src/igmpproxy.c]) +AC_CONFIG_HEADERS([config.h]) +AC_PROG_CC_C99 + +AC_CANONICAL_HOST +case $host_os in + linux*) os=linux;; + freebsd*) os=freebsd;; + netbsd*) os=netbsd;; + openbsd*) os=openbsd;; + dragonfly*) os=dragonfly;; + *) AC_MSG_ERROR([OS $host_os is not supported]);; +esac +AC_CONFIG_LINKS([src/os.h:src/os-${os}.h]) + +AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [[ +#include +#include +]]) +AC_CHECK_MEMBERS([struct sockaddr_in.sin_len], [], [], [[ +#include +#include +]]) + +AC_CONFIG_FILES([ + Makefile + doc/Makefile + src/Makefile + doc/igmpproxy.8 + doc/igmpproxy.conf.5 +]) +AC_OUTPUT diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/depcomp b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile new file mode 100644 index 0000000..27b6736 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile @@ -0,0 +1,447 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# doc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/igmpproxy +pkgincludedir = $(includedir)/igmpproxy +pkglibdir = $(libdir)/igmpproxy +pkglibexecdir = $(libexecdir)/igmpproxy +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i586-pc-linux-gnu +host_triplet = i586-pc-linux-gnu +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/igmpproxy.8.in $(srcdir)/igmpproxy.conf.5.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = igmpproxy.8 igmpproxy.conf.5 +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man5dir = $(mandir)/man5 +am__installdirs = "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run aclocal-1.11 +AMTAR = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run tar +AUTOCONF = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoconf +AUTOHEADER = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoheader +AUTOMAKE = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EXEEXT = +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBS = +LTLIBOBJS = +MAKEINFO = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +OBJEXT = o +PACKAGE = igmpproxy +PACKAGE_BUGREPORT = +PACKAGE_NAME = igmpproxy +PACKAGE_STRING = igmpproxy 0.1 +PACKAGE_TARNAME = igmpproxy +PACKAGE_VERSION = 0.1 +PATH_SEPARATOR = : +SET_MAKE = +SHELL = /bin/sh +STRIP = +VERSION = 0.1 +abs_builddir = /usr/local/src/igmpproxy-0.1/doc +abs_srcdir = /usr/local/src/igmpproxy-0.1/doc +abs_top_builddir = /usr/local/src/igmpproxy-0.1 +abs_top_srcdir = /usr/local/src/igmpproxy-0.1 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i586-pc-linux-gnu +build_alias = +build_cpu = i586 +build_os = linux-gnu +build_vendor = pc +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i586-pc-linux-gnu +host_alias = +host_cpu = i586 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /usr/local/src/igmpproxy-0.1/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local/igmpproxy-0.1 +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +man_MANS = igmpproxy.8 igmpproxy.conf.5 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +igmpproxy.8: $(top_builddir)/config.status $(srcdir)/igmpproxy.8.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +igmpproxy.conf.5: $(top_builddir)/config.status $(srcdir)/igmpproxy.conf.5.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-man5: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" + @list=''; test -n "$(man5dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.5[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ + done; } + +uninstall-man5: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man5dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.5[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } +install-man8: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" + @list=''; test -n "$(man8dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.8[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ + done; } + +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man8dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.8[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man5 install-man8 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man5 uninstall-man8 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man5 install-man8 install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-man \ + uninstall-man5 uninstall-man8 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.am b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.am new file mode 100644 index 0000000..1d4eb13 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.am @@ -0,0 +1 @@ +man_MANS = igmpproxy.8 igmpproxy.conf.5 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.in b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.in new file mode 100644 index 0000000..8a0c300 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/Makefile.in @@ -0,0 +1,447 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/igmpproxy.8.in $(srcdir)/igmpproxy.conf.5.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = igmpproxy.8 igmpproxy.conf.5 +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man5dir = $(mandir)/man5 +am__installdirs = "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +man_MANS = igmpproxy.8 igmpproxy.conf.5 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +igmpproxy.8: $(top_builddir)/config.status $(srcdir)/igmpproxy.8.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +igmpproxy.conf.5: $(top_builddir)/config.status $(srcdir)/igmpproxy.conf.5.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-man5: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" + @list=''; test -n "$(man5dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.5[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ + done; } + +uninstall-man5: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man5dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.5[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } +install-man8: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" + @list=''; test -n "$(man8dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.8[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ + done; } + +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man8dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.8[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man8dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man5 install-man8 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man5 uninstall-man8 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man5 install-man8 install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-man \ + uninstall-man5 uninstall-man8 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8 b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8 new file mode 100644 index 0000000..10faec5 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8 @@ -0,0 +1,81 @@ +.\" .br - line break (nothing else on the line) +.\" .B - bold +.\" .I - green or kursive (on HTML) +.\" .TP - paragraph ? (header line, followed by indented lines) +.\" +.TH igmpproxy 8 "" "igmpproxy 0.1" +.SH NAME +igmpproxy \- Multicast router utilizing IGMP forwarding + +.SH SYNOPSIS +.B igmpproxy [-h] [-d] [-v [-v]] +.I config-file + + +.SH DESCRIPTION +.B igmpproxy +is a simple multicast routing daemon which uses IGMP forwarding to +dynamically route multicast traffic. Routing is done by defining an +"upstream" interface on which the daemon act as a normal Multicast +client, and one or more "downstream" interfaces that serves clients +on the destination networks. This is useful in situations where other +dynamic multicast routers (like 'mrouted' or 'pimd') cannot be used. + +Since +.B igmpproxy +only uses IGMP signalling, the daemon is only suited for situations +where multicast traffic comes from only one neighbouring network. +In more advanced cases, 'mrouted' or 'pimd' is probably more suited. +The daemon is not designed for cascading, and probably won't scale +very well. + +Currently only IGMPv1 and v2 is supported on downstream interfaces. +On the upstream interface the kernel IGMP client implementation is used, +and supported IGMP versions is therefore limited to that supported by the +kernel. + + +.SH OPTIONS +.IP -h +Display help. +.IP -v +Verbose logging. Set logging level to INFO instead of WARNING used by default. +.IP -vv +More verbose logging. Set logging level to DEBUG. +.IP -d +Output log messages to STDERR instead of to +.BR syslog (3). + + +.SH LIMITS +The current version compiles and runs fine with the Linux kernel version 2.4. The known limits are: + +.B Multicast routes: +more then 200 + +.B Multicast group membership: +max. 20 +.SH FILES +.TP +.B /proc/net/ip_mr_cache +- contains the active multicast routes +.TP +.B /proc/net/ip_mr_vif +- contains the 'virtual' interfaces used by the active multicast routing daemon +.TP +.B /proc/sys/net/ipv4/conf//force_igmp_version +- can be set to control what IGMP version the kernel should use on the upstream interface. +Ex.: 'echo 2 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version' will force the kernel to +use IGMPv2 on eth0 (provided this is the upstream interface). + + +.SH SEE ALSO +.BR igmpproxy.conf (5), +.BR mrouted, +.BR pimd, +.BR smcroute + +.SH BUGS +Currently none (but there probably will be :-/ ) +.SH AUTHOR +Originally written by Johnny Egeland . diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8.in b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8.in new file mode 100644 index 0000000..9d18e42 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.8.in @@ -0,0 +1,81 @@ +.\" .br - line break (nothing else on the line) +.\" .B - bold +.\" .I - green or kursive (on HTML) +.\" .TP - paragraph ? (header line, followed by indented lines) +.\" +.TH igmpproxy 8 "" "@PACKAGE_STRING@" +.SH NAME +igmpproxy \- Multicast router utilizing IGMP forwarding + +.SH SYNOPSIS +.B igmpproxy [-h] [-d] [-v [-v]] +.I config-file + + +.SH DESCRIPTION +.B igmpproxy +is a simple multicast routing daemon which uses IGMP forwarding to +dynamically route multicast traffic. Routing is done by defining an +"upstream" interface on which the daemon act as a normal Multicast +client, and one or more "downstream" interfaces that serves clients +on the destination networks. This is useful in situations where other +dynamic multicast routers (like 'mrouted' or 'pimd') cannot be used. + +Since +.B igmpproxy +only uses IGMP signalling, the daemon is only suited for situations +where multicast traffic comes from only one neighbouring network. +In more advanced cases, 'mrouted' or 'pimd' is probably more suited. +The daemon is not designed for cascading, and probably won't scale +very well. + +Currently only IGMPv1 and v2 is supported on downstream interfaces. +On the upstream interface the kernel IGMP client implementation is used, +and supported IGMP versions is therefore limited to that supported by the +kernel. + + +.SH OPTIONS +.IP -h +Display help. +.IP -v +Verbose logging. Set logging level to INFO instead of WARNING used by default. +.IP -vv +More verbose logging. Set logging level to DEBUG. +.IP -d +Output log messages to STDERR instead of to +.BR syslog (3). + + +.SH LIMITS +The current version compiles and runs fine with the Linux kernel version 2.4. The known limits are: + +.B Multicast routes: +more then 200 + +.B Multicast group membership: +max. 20 +.SH FILES +.TP +.B /proc/net/ip_mr_cache +- contains the active multicast routes +.TP +.B /proc/net/ip_mr_vif +- contains the 'virtual' interfaces used by the active multicast routing daemon +.TP +.B /proc/sys/net/ipv4/conf//force_igmp_version +- can be set to control what IGMP version the kernel should use on the upstream interface. +Ex.: 'echo 2 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version' will force the kernel to +use IGMPv2 on eth0 (provided this is the upstream interface). + + +.SH SEE ALSO +.BR igmpproxy.conf (5), +.BR mrouted, +.BR pimd, +.BR smcroute + +.SH BUGS +Currently none (but there probably will be :-/ ) +.SH AUTHOR +Originally written by Johnny Egeland . diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5 b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5 new file mode 100644 index 0000000..176de46 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5 @@ -0,0 +1,146 @@ +.\" .br - line break (nothing else on the line) +.\" .B - bold +.\" .I - green or kursive (on HTML) +.\" .TP - paragraph ? (header line, followed by indented lines) +.\" +.TH igmpproxy.conf 5 "" "igmpproxy 0.1" +.SH NAME +igmpproxy.conf \- Configuration file for +.BR igmpproxy (8) +multicast daemon + +.SH DESCRIPTION +.B igmpproxy.conf +contains the configuration for the +.B igmpproxy +multicast daemon. It defines which network interfaces should be +used by the routing daemon. Each interface must be give one of the following roles: +.B upstream +, +.B downstream +or +.B disabled +. + +The +.B upstream +network interface is the outgoing interface which is responsible for communicating +to availible multicast data sources. There can only be one upstream interface. + +.B Downstream +network interfaces are the distribution interfaces to the destination networks, +where multicast clients can join groups and receive multicast data. One or more +downstream interfaces must be configured. + +On +.B disabled +network interfaces all IGMP or multicast traffic is ignored altogether. If multiple +IP addresses is used on one single interface (ae. eth0:1 ...), all interface +aliases not in use should be configured as disabled. + +Any line in the configuration file starting with +.B # +is treated as a comment. Keywords and parameters can be distributed over many lines. +The configuration file has two main keywords: + +.B quickleave +.RS +Enables quickleave mode. In this mode the daemon will send a Leave IGMP message +upstream as soon as it recieves a Leave message for any downstream interface. +The daemon will then ask for Membership reports on the downstream interfaces, +and if a report is recieved the group is joined again upstream. Normally this +is not noticed at all by clients on the downstream networks. If it's vital +that the daemon should act exactly as a real multicast client on the upstream +interface, this function should not be used. Disabling this function increases +the risk of bandwidth saturation. +.RE + + +.B phyint +.I interface +.I role +[ ratelimit +.I limit +] [ threshold +.I ttl +] [ altnet +.I networkaddr ... +] +.RS +Defines the state and settings of a network interface. +.RE + +.SH PHYINT OPTIONS + +.B interface +.RS +The name of the interface the settings are for. This option is required for +phyint settings. +.RE + +.B role +.RS +The role of the interface. This should be either +.B upstream +(only one interface), +.B downstream +(one or more interfaces) or +.B disabled +. This option is required. +.RE + +.B ratelimit +.I limit +.RS +Defines a ratelimit for the network interface. If ratelimit is set to 0 (default), +no ratelimit will be applied. This setting is optional. +.RE + +.B threshold +.I ttl +.RS +Defines the TTL threshold for the network interface. Packets with a lower TTL than the +threshols value will be ignored. This setting is optional, and by default the threshold is 1. +.RE + +.B altnet +.I networkaddr +... +.RS +Defines alternate sources for multicasting and IGMP data. The network address must be on the +following format 'a.b.c.d/n'. By default the router will accept data from sources on the same +network as configured on an interface. If the multicast source lies on a remote network, one +must define from where traffic should be accepted. + +This is especially useful for the upstream interface, since the source for multicast +traffic is often from a remote location. Any number of altnet parameters can be specified. +.RE + + +.SH EXAMPLE +## Enable quickleave +quickleave +.br +## Define settings for eth0 (upstream) +.br +phyint eth0 upstream + altnet 10.0.0.0/8 + +## Disable alternate IP on eth0 (eth0:0) +.br +phyint eth0:0 disabled + +## Define settings for eth1 (downstream) +.br +phyint eth1 downstream ratelimit 0 threshold 1 + +## Define settings for eth2 (also downstream) +.br +phyint eth2 downstream + + +.SH SEE ALSO +.BR igmpproxy (8) + +.SH AUTHOR +Originally written by Johnny Egeland diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5.in b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5.in new file mode 100644 index 0000000..a4ea7d0 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/doc/igmpproxy.conf.5.in @@ -0,0 +1,146 @@ +.\" .br - line break (nothing else on the line) +.\" .B - bold +.\" .I - green or kursive (on HTML) +.\" .TP - paragraph ? (header line, followed by indented lines) +.\" +.TH igmpproxy.conf 5 "" "@PACKAGE_STRING@" +.SH NAME +igmpproxy.conf \- Configuration file for +.BR igmpproxy (8) +multicast daemon + +.SH DESCRIPTION +.B igmpproxy.conf +contains the configuration for the +.B igmpproxy +multicast daemon. It defines which network interfaces should be +used by the routing daemon. Each interface must be give one of the following roles: +.B upstream +, +.B downstream +or +.B disabled +. + +The +.B upstream +network interface is the outgoing interface which is responsible for communicating +to availible multicast data sources. There can only be one upstream interface. + +.B Downstream +network interfaces are the distribution interfaces to the destination networks, +where multicast clients can join groups and receive multicast data. One or more +downstream interfaces must be configured. + +On +.B disabled +network interfaces all IGMP or multicast traffic is ignored altogether. If multiple +IP addresses is used on one single interface (ae. eth0:1 ...), all interface +aliases not in use should be configured as disabled. + +Any line in the configuration file starting with +.B # +is treated as a comment. Keywords and parameters can be distributed over many lines. +The configuration file has two main keywords: + +.B quickleave +.RS +Enables quickleave mode. In this mode the daemon will send a Leave IGMP message +upstream as soon as it recieves a Leave message for any downstream interface. +The daemon will then ask for Membership reports on the downstream interfaces, +and if a report is recieved the group is joined again upstream. Normally this +is not noticed at all by clients on the downstream networks. If it's vital +that the daemon should act exactly as a real multicast client on the upstream +interface, this function should not be used. Disabling this function increases +the risk of bandwidth saturation. +.RE + + +.B phyint +.I interface +.I role +[ ratelimit +.I limit +] [ threshold +.I ttl +] [ altnet +.I networkaddr ... +] +.RS +Defines the state and settings of a network interface. +.RE + +.SH PHYINT OPTIONS + +.B interface +.RS +The name of the interface the settings are for. This option is required for +phyint settings. +.RE + +.B role +.RS +The role of the interface. This should be either +.B upstream +(only one interface), +.B downstream +(one or more interfaces) or +.B disabled +. This option is required. +.RE + +.B ratelimit +.I limit +.RS +Defines a ratelimit for the network interface. If ratelimit is set to 0 (default), +no ratelimit will be applied. This setting is optional. +.RE + +.B threshold +.I ttl +.RS +Defines the TTL threshold for the network interface. Packets with a lower TTL than the +threshols value will be ignored. This setting is optional, and by default the threshold is 1. +.RE + +.B altnet +.I networkaddr +... +.RS +Defines alternate sources for multicasting and IGMP data. The network address must be on the +following format 'a.b.c.d/n'. By default the router will accept data from sources on the same +network as configured on an interface. If the multicast source lies on a remote network, one +must define from where traffic should be accepted. + +This is especially useful for the upstream interface, since the source for multicast +traffic is often from a remote location. Any number of altnet parameters can be specified. +.RE + + +.SH EXAMPLE +## Enable quickleave +quickleave +.br +## Define settings for eth0 (upstream) +.br +phyint eth0 upstream + altnet 10.0.0.0/8 + +## Disable alternate IP on eth0 (eth0:0) +.br +phyint eth0:0 disabled + +## Define settings for eth1 (downstream) +.br +phyint eth1 downstream ratelimit 0 threshold 1 + +## Define settings for eth2 (also downstream) +.br +phyint eth2 downstream + + +.SH SEE ALSO +.BR igmpproxy (8) + +.SH AUTHOR +Originally written by Johnny Egeland diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/igmpproxy.conf b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/igmpproxy.conf new file mode 100644 index 0000000..197ca30 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/igmpproxy.conf @@ -0,0 +1,46 @@ +######################################################## +# +# Example configuration file for the IgmpProxy +# -------------------------------------------- +# +# The configuration file must define one upstream +# interface, and one or more downstream interfaces. +# +# If multicast traffic originates outside the +# upstream subnet, the "altnet" option can be +# used in order to define legal multicast sources. +# (Se example...) +# +# The "quickleave" should be used to avoid saturation +# of the upstream link. The option should only +# be used if it's absolutely nessecary to +# accurately imitate just one Client. +# +######################################################## + +##------------------------------------------------------ +## Enable Quickleave mode (Sends Leave instantly) +##------------------------------------------------------ +quickleave + + +##------------------------------------------------------ +## Configuration for eth0 (Upstream Interface) +##------------------------------------------------------ +phyint eth0 upstream ratelimit 0 threshold 1 + altnet 10.0.0.0/8 + altnet 192.168.0.0/24 + + +##------------------------------------------------------ +## Configuration for eth1 (Downstream Interface) +##------------------------------------------------------ +phyint eth1 downstream ratelimit 0 threshold 1 + + +##------------------------------------------------------ +## Configuration for eth2 (Disabled Interface) +##------------------------------------------------------ +phyint eth2 disabled + + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/install-sh b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/missing b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/missing new file mode 100755 index 0000000..28055d2 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/callout.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/callout.Po new file mode 100644 index 0000000..cc79cb5 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/callout.Po @@ -0,0 +1,320 @@ +callout.o: callout.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/config.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/config.Po new file mode 100644 index 0000000..54f5dd6 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/config.Po @@ -0,0 +1,320 @@ +config.o: config.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/confread.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/confread.Po new file mode 100644 index 0000000..7d81b02 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/confread.Po @@ -0,0 +1,320 @@ +confread.o: confread.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/ifvc.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/ifvc.Po new file mode 100644 index 0000000..836dafa --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/ifvc.Po @@ -0,0 +1,320 @@ +ifvc.o: ifvc.c igmpproxy.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmp.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmp.Po new file mode 100644 index 0000000..a29d6fc --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmp.Po @@ -0,0 +1,320 @@ +igmp.o: igmp.c igmpproxy.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmpproxy.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmpproxy.Po new file mode 100644 index 0000000..589a7b5 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/igmpproxy.Po @@ -0,0 +1,320 @@ +igmpproxy.o: igmpproxy.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/kern.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/kern.Po new file mode 100644 index 0000000..b092adf --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/kern.Po @@ -0,0 +1,320 @@ +kern.o: kern.c igmpproxy.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/lib.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/lib.Po new file mode 100644 index 0000000..139d0e9 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/lib.Po @@ -0,0 +1,320 @@ +lib.o: lib.c igmpproxy.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mcgroup.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mcgroup.Po new file mode 100644 index 0000000..b9f6109 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mcgroup.Po @@ -0,0 +1,320 @@ +mcgroup.o: mcgroup.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mroute-api.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mroute-api.Po new file mode 100644 index 0000000..bd9baa2 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/mroute-api.Po @@ -0,0 +1,320 @@ +mroute-api.o: mroute-api.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/request.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/request.Po new file mode 100644 index 0000000..08e93a8 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/request.Po @@ -0,0 +1,320 @@ +request.o: request.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/rttable.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/rttable.Po new file mode 100644 index 0000000..c1ccab5 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/rttable.Po @@ -0,0 +1,320 @@ +rttable.o: rttable.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/syslog.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/syslog.Po new file mode 100644 index 0000000..293c2e7 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/syslog.Po @@ -0,0 +1,320 @@ +syslog.o: syslog.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/udpsock.Po b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/udpsock.Po new file mode 100644 index 0000000..770c0e2 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/.deps/udpsock.Po @@ -0,0 +1,320 @@ +udpsock.o: udpsock.c igmpproxy.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/bits/predefs.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/syslog.h /usr/include/i386-linux-gnu/sys/syslog.h \ + /usr/include/i386-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/asm/sigcontext.h /usr/include/linux/types.h \ + /usr/include/i386-linux-gnu/asm/types.h /usr/include/asm-generic/types.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/i386-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/i386-linux-gnu/asm/posix_types.h \ + /usr/include/i386-linux-gnu/asm/posix_types_32.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h \ + /usr/include/i386-linux-gnu/sys/socket.h \ + /usr/include/i386-linux-gnu/sys/uio.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/socket.h \ + /usr/include/i386-linux-gnu/bits/sockaddr.h \ + /usr/include/i386-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/i386-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/i386-linux-gnu/sys/un.h \ + /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctls.h \ + /usr/include/i386-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/i386-linux-gnu/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ + /usr/include/i386-linux-gnu/bits/ioctl-types.h \ + /usr/include/i386-linux-gnu/sys/ttydefaults.h \ + /usr/include/i386-linux-gnu/sys/param.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + /usr/include/net/if.h /usr/include/netinet/in.h \ + /usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/in.h /usr/include/arpa/inet.h os.h \ + /usr/include/linux/mroute.h /usr/include/linux/sockios.h \ + /usr/include/netinet/ip.h /usr/include/netinet/igmp.h ../config.h + +igmpproxy.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/bits/predefs.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/syslog.h: + +/usr/include/i386-linux-gnu/sys/syslog.h: + +/usr/include/i386-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/asm/sigcontext.h: + +/usr/include/linux/types.h: + +/usr/include/i386-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/i386-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/i386-linux-gnu/asm/posix_types.h: + +/usr/include/i386-linux-gnu/asm/posix_types_32.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdbool.h: + +/usr/include/i386-linux-gnu/sys/socket.h: + +/usr/include/i386-linux-gnu/sys/uio.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/socket.h: + +/usr/include/i386-linux-gnu/bits/sockaddr.h: + +/usr/include/i386-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/i386-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/i386-linux-gnu/sys/un.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctls.h: + +/usr/include/i386-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/i386-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/i386-linux-gnu/bits/ioctl-types.h: + +/usr/include/i386-linux-gnu/sys/ttydefaults.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/net/if.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/i486-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/in.h: + +/usr/include/arpa/inet.h: + +os.h: + +/usr/include/linux/mroute.h: + +/usr/include/linux/sockios.h: + +/usr/include/netinet/ip.h: + +/usr/include/netinet/igmp.h: + +../config.h: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile new file mode 100644 index 0000000..1118be8 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile @@ -0,0 +1,493 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# src/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/igmpproxy +pkgincludedir = $(includedir)/igmpproxy +pkglibdir = $(libdir)/igmpproxy +pkglibexecdir = $(libexecdir)/igmpproxy +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i586-pc-linux-gnu +host_triplet = i586-pc-linux-gnu +sbin_PROGRAMS = igmpproxy$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = os.h +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(sbindir)" +PROGRAMS = $(sbin_PROGRAMS) +am_igmpproxy_OBJECTS = callout.$(OBJEXT) config.$(OBJEXT) \ + confread.$(OBJEXT) ifvc.$(OBJEXT) igmp.$(OBJEXT) \ + igmpproxy.$(OBJEXT) kern.$(OBJEXT) lib.$(OBJEXT) \ + mcgroup.$(OBJEXT) mroute-api.$(OBJEXT) request.$(OBJEXT) \ + rttable.$(OBJEXT) syslog.$(OBJEXT) udpsock.$(OBJEXT) +igmpproxy_OBJECTS = $(am_igmpproxy_OBJECTS) +igmpproxy_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(igmpproxy_SOURCES) +DIST_SOURCES = $(igmpproxy_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run aclocal-1.11 +AMTAR = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run tar +AUTOCONF = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoconf +AUTOHEADER = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run autoheader +AUTOMAKE = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run automake-1.11 +AWK = gawk +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EXEEXT = +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBS = +LTLIBOBJS = +MAKEINFO = ${SHELL} /usr/local/src/igmpproxy-0.1/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +OBJEXT = o +PACKAGE = igmpproxy +PACKAGE_BUGREPORT = +PACKAGE_NAME = igmpproxy +PACKAGE_STRING = igmpproxy 0.1 +PACKAGE_TARNAME = igmpproxy +PACKAGE_VERSION = 0.1 +PATH_SEPARATOR = : +SET_MAKE = +SHELL = /bin/sh +STRIP = +VERSION = 0.1 +abs_builddir = /usr/local/src/igmpproxy-0.1/src +abs_srcdir = /usr/local/src/igmpproxy-0.1/src +abs_top_builddir = /usr/local/src/igmpproxy-0.1 +abs_top_srcdir = /usr/local/src/igmpproxy-0.1 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i586-pc-linux-gnu +build_alias = +build_cpu = i586 +build_os = linux-gnu +build_vendor = pc +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i586-pc-linux-gnu +host_alias = +host_cpu = i586 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /usr/local/src/igmpproxy-0.1/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local/igmpproxy-0.1 +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +igmpproxy_SOURCES = \ + callout.c \ + config.c \ + confread.c \ + ifvc.c \ + igmp.c \ + igmpproxy.c \ + igmpproxy.h \ + kern.c \ + lib.c \ + mcgroup.c \ + mroute-api.c \ + os-dragonfly.h \ + os-freebsd.h \ + os-linux.h \ + os-netbsd.h \ + os-openbsd.h \ + request.c \ + rttable.c \ + syslog.c \ + udpsock.c + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) +igmpproxy$(EXEEXT): $(igmpproxy_OBJECTS) $(igmpproxy_DEPENDENCIES) + @rm -f igmpproxy$(EXEEXT) + $(LINK) $(igmpproxy_OBJECTS) $(igmpproxy_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/callout.Po +include ./$(DEPDIR)/config.Po +include ./$(DEPDIR)/confread.Po +include ./$(DEPDIR)/ifvc.Po +include ./$(DEPDIR)/igmp.Po +include ./$(DEPDIR)/igmpproxy.Po +include ./$(DEPDIR)/kern.Po +include ./$(DEPDIR)/lib.Po +include ./$(DEPDIR)/mcgroup.Po +include ./$(DEPDIR)/mroute-api.Po +include ./$(DEPDIR)/request.Po +include ./$(DEPDIR)/rttable.Po +include ./$(DEPDIR)/syslog.Po +include ./$(DEPDIR)/udpsock.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(sbindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-sbinPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sbinPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-sbinPROGRAMS ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-sbinPROGRAMS install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-sbinPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.am b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.am new file mode 100644 index 0000000..fb63ff3 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.am @@ -0,0 +1,22 @@ +sbin_PROGRAMS = igmpproxy +igmpproxy_SOURCES = \ + callout.c \ + config.c \ + confread.c \ + ifvc.c \ + igmp.c \ + igmpproxy.c \ + igmpproxy.h \ + kern.c \ + lib.c \ + mcgroup.c \ + mroute-api.c \ + os-dragonfly.h \ + os-freebsd.h \ + os-linux.h \ + os-netbsd.h \ + os-openbsd.h \ + request.c \ + rttable.c \ + syslog.c \ + udpsock.c diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.in b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.in new file mode 100644 index 0000000..ab670af --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/Makefile.in @@ -0,0 +1,493 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +sbin_PROGRAMS = igmpproxy$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = os.h +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(sbindir)" +PROGRAMS = $(sbin_PROGRAMS) +am_igmpproxy_OBJECTS = callout.$(OBJEXT) config.$(OBJEXT) \ + confread.$(OBJEXT) ifvc.$(OBJEXT) igmp.$(OBJEXT) \ + igmpproxy.$(OBJEXT) kern.$(OBJEXT) lib.$(OBJEXT) \ + mcgroup.$(OBJEXT) mroute-api.$(OBJEXT) request.$(OBJEXT) \ + rttable.$(OBJEXT) syslog.$(OBJEXT) udpsock.$(OBJEXT) +igmpproxy_OBJECTS = $(am_igmpproxy_OBJECTS) +igmpproxy_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(igmpproxy_SOURCES) +DIST_SOURCES = $(igmpproxy_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +igmpproxy_SOURCES = \ + callout.c \ + config.c \ + confread.c \ + ifvc.c \ + igmp.c \ + igmpproxy.c \ + igmpproxy.h \ + kern.c \ + lib.c \ + mcgroup.c \ + mroute-api.c \ + os-dragonfly.h \ + os-freebsd.h \ + os-linux.h \ + os-netbsd.h \ + os-openbsd.h \ + request.c \ + rttable.c \ + syslog.c \ + udpsock.c + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) +igmpproxy$(EXEEXT): $(igmpproxy_OBJECTS) $(igmpproxy_DEPENDENCIES) + @rm -f igmpproxy$(EXEEXT) + $(LINK) $(igmpproxy_OBJECTS) $(igmpproxy_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/confread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ifvc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/igmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/igmpproxy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kern.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mcgroup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mroute-api.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/request.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rttable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syslog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udpsock.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(sbindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-sbinPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sbinPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-sbinPROGRAMS ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-sbinPROGRAMS install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-sbinPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.c new file mode 100644 index 0000000..4edfe5e --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.c @@ -0,0 +1,255 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ + + +#include "igmpproxy.h" + +/* the code below implements a callout queue */ +static int id = 0; +static struct timeOutQueue *queue = 0; /* pointer to the beginning of timeout queue */ + +struct timeOutQueue { + struct timeOutQueue *next; // Next event in queue + int id; + timer_f func; // function to call + void *data; // Data for function + int time; // Time offset for next event +}; + +// Method for dumping the Queue to the log. +static void debugQueue(void); + +/** +* Initializes the callout queue +*/ +void callout_init() { + queue = NULL; +} + +/** +* Clears all scheduled timeouts... +*/ +void free_all_callouts() { + struct timeOutQueue *p; + + while (queue) { + p = queue; + queue = queue->next; + free(p); + } +} + + +/** + * elapsed_time seconds have passed; perform all the events that should + * happen. + */ +void age_callout_queue(int elapsed_time) { + struct timeOutQueue *ptr; + int i = 0; + + for (ptr = queue; ptr; ptr = queue, i++) { + if (ptr->time > elapsed_time) { + ptr->time -= elapsed_time; + return; + } else { + elapsed_time -= ptr->time; + queue = queue->next; + my_log(LOG_DEBUG, 0, "About to call timeout %d (#%d)", ptr->id, i); + + if (ptr->func) + ptr->func(ptr->data); + free(ptr); + } + } +} + +/** + * Return in how many seconds age_callout_queue() would like to be called. + * Return -1 if there are no events pending. + */ +int timer_nextTimer() { + if (queue) { + if (queue->time < 0) { + my_log(LOG_WARNING, 0, "timer_nextTimer top of queue says %d", + queue->time); + return 0; + } + return queue->time; + } + return -1; +} + +/** + * Inserts a timer in queue. + * @param delay - Number of seconds the timeout should happen in. + * @param action - The function to call on timeout. + * @param data - Pointer to the function data to supply... + */ +int timer_setTimer(int delay, timer_f action, void *data) { + struct timeOutQueue *ptr, *node, *prev; + int i = 0; + + /* create a node */ + node = (struct timeOutQueue *)malloc(sizeof(struct timeOutQueue)); + if (node == 0) { + my_log(LOG_WARNING, 0, "Malloc Failed in timer_settimer\n"); + return -1; + } + node->func = action; + node->data = data; + node->time = delay; + node->next = 0; + node->id = ++id; + + prev = ptr = queue; + + /* insert node in the queue */ + + /* if the queue is empty, insert the node and return */ + if (!queue) { + queue = node; + } + else { + /* chase the pointer looking for the right place */ + while (ptr) { + if (delay < ptr->time) { + // We found the correct node + node->next = ptr; + if (ptr == queue) { + queue = node; + } + else { + prev->next = node; + } + ptr->time -= node->time; + my_log(LOG_DEBUG, 0, + "Created timeout %d (#%d) - delay %d secs", + node->id, i, node->time); + debugQueue(); + return node->id; + } else { + // Continur to check nodes. + delay -= ptr->time; node->time = delay; + prev = ptr; + ptr = ptr->next; + } + i++; + } + prev->next = node; + } + my_log(LOG_DEBUG, 0, "Created timeout %d (#%d) - delay %d secs", + node->id, i, node->time); + debugQueue(); + + return node->id; +} + +/** +* returns the time until the timer is scheduled +*/ +int timer_leftTimer(int timer_id) { + struct timeOutQueue *ptr; + int left = 0; + + if (!timer_id) + return -1; + + for (ptr = queue; ptr; ptr = ptr->next) { + left += ptr->time; + if (ptr->id == timer_id) { + return left; + } + } + return -1; +} + +/** +* clears the associated timer. Returns 1 if succeeded. +*/ +int timer_clearTimer(int timer_id) { + struct timeOutQueue *ptr, *prev; + int i = 0; + + if (!timer_id) + return 0; + + prev = ptr = queue; + + /* + * find the right node, delete it. the subsequent node's time + * gets bumped up + */ + + debugQueue(); + while (ptr) { + if (ptr->id == timer_id) { + /* got the right node */ + + /* unlink it from the queue */ + if (ptr == queue) + queue = queue->next; + else + prev->next = ptr->next; + + /* increment next node if any */ + if (ptr->next != 0) + (ptr->next)->time += ptr->time; + + if (ptr->data) + free(ptr->data); + my_log(LOG_DEBUG, 0, "deleted timer %d (#%d)", ptr->id, i); + free(ptr); + debugQueue(); + return 1; + } + prev = ptr; + ptr = ptr->next; + i++; + } + // If we get here, the timer was not deleted. + my_log(LOG_DEBUG, 0, "failed to delete timer %d (#%d)", timer_id, i); + debugQueue(); + return 0; +} + +/** + * debugging utility + */ +static void debugQueue() { + struct timeOutQueue *ptr; + + for (ptr = queue; ptr; ptr = ptr->next) { + my_log(LOG_DEBUG, 0, "(Id:%d, Time:%d) ", ptr->id, ptr->time); + } +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/callout.o new file mode 100644 index 0000000000000000000000000000000000000000..d5933315af499fa6181f11924c311cd977cf8c43 GIT binary patch literal 10160 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 +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* config.c - Contains functions to load and parse config +* file, and functions to configure the daemon. +*/ + +#include "igmpproxy.h" + +// Structure to keep configuration for VIFs... +struct vifconfig { + char* name; + short state; + int ratelimit; + int threshold; + + // Keep allowed nets for VIF. + struct SubnetList* allowednets; + + // Next config in list... + struct vifconfig* next; +}; + +// Structure to keep vif configuration +struct vifconfig* vifconf; + +// Keeps common settings... +static struct Config commonConfig; + +// Prototypes... +struct vifconfig *parsePhyintToken(); +struct SubnetList *parseSubnetAddress(char *addrstr); + + +/** +* Initializes common config.. +*/ +void initCommonConfig() { + commonConfig.robustnessValue = DEFAULT_ROBUSTNESS; + commonConfig.queryInterval = INTERVAL_QUERY; + commonConfig.queryResponseInterval = INTERVAL_QUERY_RESPONSE; + + // The defaults are calculated from other settings. + commonConfig.startupQueryInterval = (unsigned int)(INTERVAL_QUERY / 4); + commonConfig.startupQueryCount = DEFAULT_ROBUSTNESS; + + // Default values for leave intervals... + commonConfig.lastMemberQueryInterval = INTERVAL_QUERY_RESPONSE; + commonConfig.lastMemberQueryCount = DEFAULT_ROBUSTNESS; + + // If 1, a leave message is sent upstream on leave messages from downstream. + commonConfig.fastUpstreamLeave = 0; + +} + +/** +* Returns a pointer to the common config... +*/ +struct Config *getCommonConfig() { + return &commonConfig; +} + +/** +* Loads the configuration from file, and stores the config in +* respective holders... +*/ +int loadConfig(char *configFile) { + struct vifconfig *tmpPtr; + struct vifconfig **currPtr = &vifconf; + char *token; + + // Initialize common config + initCommonConfig(); + + // Test config file reader... + if(!openConfigFile(configFile)) { + my_log(LOG_ERR, 0, "Unable to open configfile from %s", configFile); + } + + // Get first token... + token = nextConfigToken(); + if(token == NULL) { + my_log(LOG_ERR, 0, "Config file was empty."); + } + + // Loop until all configuration is read. + while ( token != NULL ) { + // Check token... + if(strcmp("phyint", token)==0) { + // Got a phyint token... Call phyint parser + my_log(LOG_DEBUG, 0, "Config: Got a phyint token."); + tmpPtr = parsePhyintToken(); + if(tmpPtr == NULL) { + // Unparsable token... Exit... + closeConfigFile(); + my_log(LOG_WARNING, 0, "Unknown token '%s' in configfile", token); + return 0; + } else { + + my_log(LOG_DEBUG, 0, "IF name : %s", tmpPtr->name); + my_log(LOG_DEBUG, 0, "Next ptr : %x", tmpPtr->next); + my_log(LOG_DEBUG, 0, "Ratelimit : %d", tmpPtr->ratelimit); + my_log(LOG_DEBUG, 0, "Threshold : %d", tmpPtr->threshold); + my_log(LOG_DEBUG, 0, "State : %d", tmpPtr->state); + my_log(LOG_DEBUG, 0, "Allowednet ptr : %x", tmpPtr->allowednets); + + // Insert config, and move temppointer to next location... + *currPtr = tmpPtr; + currPtr = &tmpPtr->next; + } + } + else if(strcmp("quickleave", token)==0) { + // Got a quickleave token.... + my_log(LOG_DEBUG, 0, "Config: Quick leave mode enabled."); + commonConfig.fastUpstreamLeave = 1; + + // Read next token... + token = nextConfigToken(); + continue; + } else { + // Unparsable token... Exit... + closeConfigFile(); + my_log(LOG_WARNING, 0, "Unknown token '%s' in configfile", token); + return 0; + } + // Get token that was not recognized by phyint parser. + token = getCurrentConfigToken(); + } + + // Close the configfile... + closeConfigFile(); + + return 1; +} + +/** +* Appends extra VIF configuration from config file. +*/ +void configureVifs() { + unsigned Ix; + struct IfDesc *Dp; + struct vifconfig *confPtr; + + // If no config is availible, just return... + if(vifconf == NULL) { + return; + } + + // Loop through all VIFs... + for ( Ix = 0; (Dp = getIfByIx(Ix)); Ix++ ) { + if ( Dp->InAdr.s_addr && ! (Dp->Flags & IFF_LOOPBACK) ) { + + // Now try to find a matching config... + for( confPtr = vifconf; confPtr; confPtr = confPtr->next) { + + // I the VIF names match... + if(strcmp(Dp->Name, confPtr->name)==0) { + struct SubnetList *vifLast; + + my_log(LOG_DEBUG, 0, "Found config for %s", Dp->Name); + + + // Set the VIF state + Dp->state = confPtr->state; + + Dp->threshold = confPtr->threshold; + Dp->ratelimit = confPtr->ratelimit; + + // Go to last allowed net on VIF... + for(vifLast = Dp->allowednets; vifLast->next; vifLast = vifLast->next); + + // Insert the configured nets... + vifLast->next = confPtr->allowednets; + + break; + } + } + } + } +} + + +/** +* Internal function to parse phyint config +*/ +struct vifconfig *parsePhyintToken() { + struct vifconfig *tmpPtr; + struct SubnetList **anetPtr; + char *token; + short parseError = 0; + + // First token should be the interface name.... + token = nextConfigToken(); + + // Sanitycheck the name... + if(token == NULL) return NULL; + if(strlen(token) >= IF_NAMESIZE) return NULL; + my_log(LOG_DEBUG, 0, "Config: IF: Config for interface %s.", token); + + // Allocate memory for configuration... + tmpPtr = (struct vifconfig*)malloc(sizeof(struct vifconfig)); + if(tmpPtr == NULL) { + my_log(LOG_ERR, 0, "Out of memory."); + } + + // Set default values... + tmpPtr->next = NULL; // Important to avoid seg fault... + tmpPtr->ratelimit = 0; + tmpPtr->threshold = 1; + tmpPtr->state = IF_STATE_DOWNSTREAM; + tmpPtr->allowednets = NULL; + + // Make a copy of the token to store the IF name + tmpPtr->name = strdup( token ); + if(tmpPtr->name == NULL) { + my_log(LOG_ERR, 0, "Out of memory."); + } + + // Set the altnet pointer to the allowednets pointer. + anetPtr = &tmpPtr->allowednets; + + // Parse the rest of the config.. + token = nextConfigToken(); + while(token != NULL) { + if(strcmp("altnet", token)==0) { + // Altnet... + token = nextConfigToken(); + my_log(LOG_DEBUG, 0, "Config: IF: Got altnet token %s.",token); + + *anetPtr = parseSubnetAddress(token); + if(*anetPtr == NULL) { + parseError = 1; + my_log(LOG_WARNING, 0, "Unable to parse subnet address."); + break; + } else { + anetPtr = &(*anetPtr)->next; + } + } + else if(strcmp("upstream", token)==0) { + // Upstream + my_log(LOG_DEBUG, 0, "Config: IF: Got upstream token."); + tmpPtr->state = IF_STATE_UPSTREAM; + } + else if(strcmp("downstream", token)==0) { + // Downstream + my_log(LOG_DEBUG, 0, "Config: IF: Got downstream token."); + tmpPtr->state = IF_STATE_DOWNSTREAM; + } + else if(strcmp("disabled", token)==0) { + // Disabled + my_log(LOG_DEBUG, 0, "Config: IF: Got disabled token."); + tmpPtr->state = IF_STATE_DISABLED; + } + else if(strcmp("ratelimit", token)==0) { + // Ratelimit + token = nextConfigToken(); + my_log(LOG_DEBUG, 0, "Config: IF: Got ratelimit token '%s'.", token); + tmpPtr->ratelimit = atoi( token ); + if(tmpPtr->ratelimit < 0) { + my_log(LOG_WARNING, 0, "Ratelimit must be 0 or more."); + parseError = 1; + break; + } + } + else if(strcmp("threshold", token)==0) { + // Threshold + token = nextConfigToken(); + my_log(LOG_DEBUG, 0, "Config: IF: Got threshold token '%s'.", token); + tmpPtr->threshold = atoi( token ); + if(tmpPtr->threshold <= 0 || tmpPtr->threshold > 255) { + my_log(LOG_WARNING, 0, "Threshold must be between 1 and 255."); + parseError = 1; + break; + } + } + else { + // Unknown token. Break... + break; + } + token = nextConfigToken(); + } + + // Clean up after a parseerror... + if(parseError) { + free(tmpPtr); + tmpPtr = NULL; + } + + return tmpPtr; +} + +/** +* Parses a subnet address string on the format +* a.b.c.d/n into a SubnetList entry. +*/ +struct SubnetList *parseSubnetAddress(char *addrstr) { + struct SubnetList *tmpSubnet; + char *tmpStr; + uint32_t addr = 0x00000000; + uint32_t mask = 0xFFFFFFFF; + + // First get the network part of the address... + tmpStr = strtok(addrstr, "/"); + addr = inet_addr(tmpStr); + + tmpStr = strtok(NULL, "/"); + if(tmpStr != NULL) { + int bitcnt = atoi(tmpStr); + if(bitcnt <= 0 || bitcnt > 32) { + my_log(LOG_WARNING, 0, "The bits part of the address is invalid : %d.",tmpStr); + return NULL; + } + + mask <<= (32 - bitcnt); + } + + if(addr == -1 || addr == 0) { + my_log(LOG_WARNING, 0, "Unable to parse address token '%s'.", addrstr); + return NULL; + } + + tmpSubnet = (struct SubnetList*) malloc(sizeof(struct SubnetList)); + tmpSubnet->subnet_addr = addr; + tmpSubnet->subnet_mask = ntohl(mask); + tmpSubnet->next = NULL; + + my_log(LOG_DEBUG, 0, "Config: IF: Altnet: Parsed altnet to %s.", + inetFmts(tmpSubnet->subnet_addr, tmpSubnet->subnet_mask,s1)); + + return tmpSubnet; +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/config.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/config.o new file mode 100644 index 0000000000000000000000000000000000000000..82093f4a20074b2485ca1818aaae0bc51a5fd3e4 GIT binary patch literal 18692 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.c new file mode 100644 index 0000000..6e267dc --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.c @@ -0,0 +1,213 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* confread.c +* +* Generic config file reader. Used to open a config file, +* and read the tokens from it. The parser is really simple, +* and does no backlogging. This means that no form of +* text escaping and qouting is currently supported. +* '#' chars are read as comments, and the comment lasts until +* a newline or EOF +* +*/ + +#include "igmpproxy.h" + +#define READ_BUFFER_SIZE 512 // Inputbuffer size... + +#ifndef MAX_TOKEN_LENGTH + #define MAX_TOKEN_LENGTH 30 // Default max token length +#endif + +FILE *confFilePtr; // File handle pointer +char *iBuffer; // Inputbuffer for reading... +unsigned int bufPtr; // Buffer position pointer. +unsigned int readSize; // Number of bytes in buffer after last read... +char cToken[MAX_TOKEN_LENGTH]; // Token buffer... +short validToken; + +/** +* Opens config file specified by filename. +*/ +int openConfigFile(char *filename) { + + // Set the buffer to null initially... + iBuffer = NULL; + + // Open the file for reading... + confFilePtr = fopen(filename, "r"); + + // On error, return false + if(confFilePtr == NULL) { + return 0; + } + + // Allocate memory for inputbuffer... + iBuffer = (char*) malloc( sizeof(char) * READ_BUFFER_SIZE ); + + if(iBuffer == NULL) { + closeConfigFile(); + return 0; + } + + // Reset bufferpointer and readsize + bufPtr = 0; + readSize = 0; + + return 1; +} + +/** +* Closes the currently open config file. +*/ +void closeConfigFile() { + // Close the file. + if(confFilePtr!=NULL) { + fclose(confFilePtr); + } + // Free input buffer memory... + if(iBuffer != NULL) { + free(iBuffer); + } +} + +/** +* Returns the next token from the configfile. The function +* return NULL if there are no more tokens in the file. +*/ +char *nextConfigToken() { + + validToken = 0; + + // If no file or buffer, return NULL + if(confFilePtr == NULL || iBuffer == NULL) { + return NULL; + } + + { + unsigned int tokenPtr = 0; + unsigned short finished = 0; + unsigned short commentFound = 0; + + // Outer buffer fill loop... + while ( !finished ) { + // If readpointer is at the end of the buffer, we should read next chunk... + if(bufPtr == readSize) { + // Fill up the buffer... + readSize = fread (iBuffer, sizeof(char), READ_BUFFER_SIZE, confFilePtr); + bufPtr = 0; + + // If the readsize is 0, we should just return... + if(readSize == 0) { + return NULL; + } + } + + // Inner char loop... + while ( bufPtr < readSize && !finished ) { + + //printf("Char %s", iBuffer[bufPtr]); + + // Break loop on \0 + if(iBuffer[bufPtr] == '\0') { + break; + } + + if( commentFound ) { + if( iBuffer[bufPtr] == '\n' ) { + commentFound = 0; + } + } else { + + // Check current char... + switch(iBuffer[bufPtr]) { + case '#': + // Found a comment start... + commentFound = 1; + break; + + case '\n': + case '\r': + case '\t': + case ' ': + // Newline, CR, Tab and space are end of token, or ignored. + if(tokenPtr > 0) { + cToken[tokenPtr] = '\0'; // EOL + finished = 1; + } + break; + + default: + // Append char to token... + cToken[tokenPtr++] = iBuffer[bufPtr]; + break; + } + + } + + // Check end of token buffer !!! + if(tokenPtr == MAX_TOKEN_LENGTH - 1) { + // Prevent buffer overrun... + cToken[tokenPtr] = '\0'; + finished = 1; + } + + // Next char... + bufPtr++; + } + // If the readsize is less than buffersize, we assume EOF. + if(readSize < READ_BUFFER_SIZE && bufPtr == readSize) { + if (tokenPtr > 0) + finished = 1; + else + return NULL; + } + } + if(tokenPtr>0) { + validToken = 1; + return cToken; + } + } + return NULL; +} + + +/** +* Returns the currently active token, or null +* if no tokens are availible. +*/ +char *getCurrentConfigToken() { + return validToken ? cToken : NULL; +} + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/confread.o new file mode 100644 index 0000000000000000000000000000000000000000..8c5ac54965f6631c81ad78a0200aedc6934aa865 GIT binary patch literal 7260 zcma)A3vg7`89rz4-Ehr@O&~xZEV4>KP}r~#5HNz607g+no(j6%BzKdQ&2GAn@MxzZ zNeU5TVbp4;KA^rvM_XI1PgFGWs_m4)syNzdtJSK&)Yp`Dkfz^v?zzc^I@6w+bHD#} z{_~&z{O8`Yd((o&3#F98ZBiJbpA+KoA&#a>!9-CehPkE++m8o!ljz)=wYtoTPrm8x z?fox7`|E+8?x!cvZdv%f_TwYB*H#1%)K-|39PskV=8o^&`vBQ&=zv)vJVGd^u5d!X z{fi8=pKX7AWY^I(J>Ac6uo`ph_>S$v$;Di&&LhPgA7PjdvAE+Xm=)m@tHQl2m$e_S z*7iz0`?cbZ9Mr(}F~IFJ=&Jacz=*DF#l(*HiaQ4NN!wqO5KcZeKYVEOslwtrdWxTU zul<-j=TGgY$7I*cKHR0kXuC1id8oMabGX?K7u}ajc$-E~FHuxmF}dqE-Ra&~XD^%u za!++NXD854;CX~0_It-r-Mvyeb6wmE z>3WNc*a0~w?ih>B={!-~xfO!;*Q>*O*W3`fzDN0anLgh9_~ialu~}gDU~c%$A46nj zx4lAD_|T_ejNZ|CA{TI%Q@nL1L{7fLhmLhKp8cIL7D9#eY45+GcJ|#7H1*jdjE;@q z^v+1e^BhO2kYYP_lSYYHEC7}YgXpTQC{hZyQrvB2{i&KM?x=v%@R3g!Ve0VSo*l9F zi|I*@+I#Zwcv3w=q{SzwJorU3R z+uD?5&{BZcEHD|eaS9qU%bsO1p<+CvIjGJn$r*VaRNwHPdS7ayX70t4qCwsnTt1Z5YyptuP z@r=8~`hx6Kxj?bC7R%oomdg~o&`L7MX|hLoUSz#T?M(TmVlT6bZUY4W0z5#bw5ZjX}?(|4M2?u{znmMAbcV?cq)QYd0+a5;nT z13@WkLP3Aj`X?gk6q%TxK zIF{w_)8DK-iOPNxe5pMdBg#MHnAxlPy_b79-yD{o_B&d>#o#_usg}%sfYFFC@PiQg4fXad!-Hu`F$(JrtEq5q8Op)KMY4qZh2twWa(fA7%4h&;!J$R1V%uN81KjJVgKONg&JbP@42hqj0Z9oi%= zM$IcnB(6cHBjPfLE+H;==py0@hqj2T9oi(`gRUHr;G2g_L!_z&@Pr7hPt`hyuPxjp`kKfHEZUS zL_C?>Fr_J(tE>uLSQ$??Byx?mP*shxE0AQJ>w^hpJWV)kui#_&{og*G9&nW8T*P+ zwk2mYSVN5&Uv}L&YpwC?o3fq>rMu5xYorbuM@48xsa5Kc$Z=i{VyRX;DI%#vVN2TN24c+w6#)Y!sR1R5}~vH7*n1WJj{1C7MX28WhL$!I5@?QR~z3 ztQ~31rbR5Cu#?diTf{HT#bS0^M4+zE#Ul05492uX)9dVXMoGCfYO01rDr47Rv*Jw) zFYPw3>HukWk#ZG1yrgDfWkxDiN)q`6pLzV z<^(6!+V$~h(%GmfGbZUBl4*0)No6y3lXc^!Uw1zO@jqM&E_r3tz(aTb-U7f6-Q>#$WP7bH0CAySK)F zwdX{ke;9_8%-`=Xnt#A=&EMxY7y3LM5HCDKT;uc9`puqw`w!r*0GGTP@50M!C{VRf zW@8J^xCmvkX$PBKDs3l1SyoA?F`A8vP<vK(!cruoPrJ|$t z^=Z4!<@i#_GmNIA$tD}F99x&`_k>rw?P@WP2eyhnr$weBT4@ zjsYpE;g7j;o2%=Fz@@26z^*M%;F4X?<pm=yM49W0RrMACYtB`>VqFco;Ibx&B<<#eBIbzUX!3 z#DV{=lFy%kyt`^=lp(zN!=ZOiwX5fj_BUfdrs$6q*53?)&CP3us)T-lA+V`=%@E9L ze>3{utV(DgQ?AEJkPO9+VtdpoxRN2_%if8~(s?kimFU#Ddj5iT8}-%bQ_)lC^mhf& zZPYJy86bInQ}X>q&fuHD??UG{hyFHzX3eoPzIGt@>}<{70(2Yw??B%LW7ZnS=U=PO zyt(CHLG(x3y$7n>+!^-)=SHe8mipG$_fbFdUXpi@(^oxpxfkDlsc>>4v3*>F2f_2a z@VDkUyy1 zMA#o8!u}m1>`!R9ffSOTM1;PDh@#o9@lGxOr^cbkJ@qw2_`g!~*AfwDnuz%}0X=vj zZ6*)D+liQm|44G&6GZso36gmCvu-6GaG_A;2Rw!d30uC~i02UTj%6Lweu~C98s}@g zOyd%bD>YuPah=Ar#`PMvX#A1JJ2dXr_;ZcVYuvB#EscNG_?1Td>~YqmF{rUp<6Mnb zYFw+4-#D&slg2KMcWZn^<1-rhhdJ&4pz%YEUutCTs4vktR%1xx#Txm0nRaV5-l&oL zN%_qh)t`Idf2#RMHS%6SyKji-e5Dfk|A@5k7nA18G@eU@{S?iIHO?TyexBA}spU;X zoRb#Kw`;tO2tRjg{vM6Hi170m5wG805Mj4R;~|ajYW$Fhc>kvHb1gruu@EmejxQsk zSkKjbB@uOBrTO_p)cr!uFC(Iun>C*!qW(8&ek&2@qFeJ1X?#KBQH|=n;KBC@ +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ + +#include "igmpproxy.h" + +struct IfDesc IfDescVc[ MAX_IF ], *IfDescEp = IfDescVc; + +/* +** Builds up a vector with the interface of the machine. Calls to the other functions of +** the module will fail if they are called before the vector is build. +** +*/ +void buildIfVc() { + struct ifreq IfVc[ sizeof( IfDescVc ) / sizeof( IfDescVc[ 0 ] ) ]; + struct ifreq *IfEp; + + int Sock; + + if ( (Sock = socket( AF_INET, SOCK_DGRAM, 0 )) < 0 ) + my_log( LOG_ERR, errno, "RAW socket open" ); + + /* get If vector + */ + { + struct ifconf IoCtlReq; + + IoCtlReq.ifc_buf = (void *)IfVc; + IoCtlReq.ifc_len = sizeof( IfVc ); + + if ( ioctl( Sock, SIOCGIFCONF, &IoCtlReq ) < 0 ) + my_log( LOG_ERR, errno, "ioctl SIOCGIFCONF" ); + + IfEp = (void *)((char *)IfVc + IoCtlReq.ifc_len); + } + + /* loop over interfaces and copy interface info to IfDescVc + */ + { + struct ifreq *IfPt, *IfNext; + + // Temp keepers of interface params... + uint32_t addr, subnet, mask; + + for ( IfPt = IfVc; IfPt < IfEp; IfPt = IfNext ) { + struct ifreq IfReq; + char FmtBu[ 32 ]; + + IfNext = (struct ifreq *)((char *)&IfPt->ifr_addr + +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN + IfPt->ifr_addr.sa_len +#else + sizeof(struct sockaddr_in) +#endif + ); + if (IfNext < IfPt + 1) + IfNext = IfPt + 1; + + strncpy( IfDescEp->Name, IfPt->ifr_name, sizeof( IfDescEp->Name ) ); + + // Currently don't set any allowed nets... + //IfDescEp->allowednets = NULL; + + // Set the index to -1 by default. + IfDescEp->index = -1; + + /* don't retrieve more info for non-IP interfaces + */ + if ( IfPt->ifr_addr.sa_family != AF_INET ) { + IfDescEp->InAdr.s_addr = 0; /* mark as non-IP interface */ + IfDescEp++; + continue; + } + + // Get the interface adress... + IfDescEp->InAdr = ((struct sockaddr_in *)&IfPt->ifr_addr)->sin_addr; + addr = IfDescEp->InAdr.s_addr; + + memcpy( IfReq.ifr_name, IfDescEp->Name, sizeof( IfReq.ifr_name ) ); + IfReq.ifr_addr.sa_family = AF_INET; + ((struct sockaddr_in *)&IfReq.ifr_addr)->sin_addr.s_addr = addr; + + // Get the subnet mask... + if (ioctl(Sock, SIOCGIFNETMASK, &IfReq ) < 0) + my_log(LOG_ERR, errno, "ioctl SIOCGIFNETMASK for %s", IfReq.ifr_name); + mask = ((struct sockaddr_in *)&IfReq.ifr_addr)->sin_addr.s_addr; + subnet = addr & mask; + + /* get if flags + ** + ** typical flags: + ** lo 0x0049 -> Running, Loopback, Up + ** ethx 0x1043 -> Multicast, Running, Broadcast, Up + ** ipppx 0x0091 -> NoArp, PointToPoint, Up + ** grex 0x00C1 -> NoArp, Running, Up + ** ipipx 0x00C1 -> NoArp, Running, Up + */ + if ( ioctl( Sock, SIOCGIFFLAGS, &IfReq ) < 0 ) + my_log( LOG_ERR, errno, "ioctl SIOCGIFFLAGS" ); + + IfDescEp->Flags = IfReq.ifr_flags; + + // Insert the verified subnet as an allowed net... + IfDescEp->allowednets = (struct SubnetList *)malloc(sizeof(struct SubnetList)); + if(IfDescEp->allowednets == NULL) my_log(LOG_ERR, 0, "Out of memory !"); + + // Create the network address for the IF.. + IfDescEp->allowednets->next = NULL; + IfDescEp->allowednets->subnet_mask = mask; + IfDescEp->allowednets->subnet_addr = subnet; + + // Set the default params for the IF... + IfDescEp->state = IF_STATE_DOWNSTREAM; + IfDescEp->robustness = DEFAULT_ROBUSTNESS; + IfDescEp->threshold = DEFAULT_THRESHOLD; /* ttl limit */ + IfDescEp->ratelimit = DEFAULT_RATELIMIT; + + + // Debug log the result... + my_log( LOG_DEBUG, 0, "buildIfVc: Interface %s Addr: %s, Flags: 0x%04x, Network: %s", + IfDescEp->Name, + fmtInAdr( FmtBu, IfDescEp->InAdr ), + IfDescEp->Flags, + inetFmts(subnet,mask, s1)); + + IfDescEp++; + } + } + + close( Sock ); +} + +/* +** Returns a pointer to the IfDesc of the interface 'IfName' +** +** returns: - pointer to the IfDesc of the requested interface +** - NULL if no interface 'IfName' exists +** +*/ +struct IfDesc *getIfByName( const char *IfName ) { + struct IfDesc *Dp; + + for ( Dp = IfDescVc; Dp < IfDescEp; Dp++ ) + if ( ! strcmp( IfName, Dp->Name ) ) + return Dp; + + return NULL; +} + +/* +** Returns a pointer to the IfDesc of the interface 'Ix' +** +** returns: - pointer to the IfDesc of the requested interface +** - NULL if no interface 'Ix' exists +** +*/ +struct IfDesc *getIfByIx( unsigned Ix ) { + struct IfDesc *Dp = &IfDescVc[ Ix ]; + return Dp < IfDescEp ? Dp : NULL; +} + +/** +* Returns a pointer to the IfDesc whose subnet matches +* the supplied IP adress. The IP must match a interfaces +* subnet, or any configured allowed subnet on a interface. +*/ +struct IfDesc *getIfByAddress( uint32_t ipaddr ) { + + struct IfDesc *Dp; + struct SubnetList *currsubnet; + struct IfDesc *res = NULL; + uint32_t last_subnet_mask = 0; + + for ( Dp = IfDescVc; Dp < IfDescEp; Dp++ ) { + // Loop through all registered allowed nets of the VIF... + for(currsubnet = Dp->allowednets; currsubnet != NULL; currsubnet = currsubnet->next) { + // Check if the ip falls in under the subnet.... + if(currsubnet->subnet_mask > last_subnet_mask && (ipaddr & currsubnet->subnet_mask) == currsubnet->subnet_addr) { + res = Dp; + last_subnet_mask = currsubnet->subnet_mask; + } + } + } + return res; +} + + +/** +* Returns a pointer to the IfDesc whose subnet matches +* the supplied IP adress. The IP must match a interfaces +* subnet, or any configured allowed subnet on a interface. +*/ +struct IfDesc *getIfByVifIndex( unsigned vifindex ) { + struct IfDesc *Dp; + if(vifindex>0) { + for ( Dp = IfDescVc; Dp < IfDescEp; Dp++ ) { + if(Dp->index == vifindex) { + return Dp; + } + } + } + return NULL; +} + + +/** +* Function that checks if a given ipaddress is a valid +* address for the supplied VIF. +*/ +int isAdressValidForIf( struct IfDesc* intrface, uint32_t ipaddr ) { + struct SubnetList *currsubnet; + + if(intrface == NULL) { + return 0; + } + // Loop through all registered allowed nets of the VIF... + for(currsubnet = intrface->allowednets; currsubnet != NULL; currsubnet = currsubnet->next) { + // Check if the ip falls in under the subnet.... + if((ipaddr & currsubnet->subnet_mask) == currsubnet->subnet_addr) { + return 1; + } + } + return 0; +} + + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/ifvc.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/ifvc.o new file mode 100644 index 0000000000000000000000000000000000000000..33bd40eaf94d26c7d11ca8dc3849bf7decb6d261 GIT binary patch literal 13592 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 +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* igmp.h - Recieves IGMP requests, and handle them +* appropriately... +*/ + +#include "igmpproxy.h" + +// Globals +uint32_t allhosts_group; /* All hosts addr in net order */ +uint32_t allrouters_group; /* All hosts addr in net order */ + +extern int MRouterFD; + +/* + * Open and initialize the igmp socket, and fill in the non-changing + * IP header fields in the output packet buffer. + */ +void initIgmp() { + struct ip *ip; + + recv_buf = malloc(RECV_BUF_SIZE); + send_buf = malloc(RECV_BUF_SIZE); + + k_hdr_include(true); /* include IP header when sending */ + k_set_rcvbuf(256*1024,48*1024); /* lots of input buffering */ + k_set_ttl(1); /* restrict multicasts to one hop */ + k_set_loop(false); /* disable multicast loopback */ + + ip = (struct ip *)send_buf; + memset(ip, 0, sizeof(struct ip)); + /* + * Fields zeroed that aren't filled in later: + * - IP ID (let the kernel fill it in) + * - Offset (we don't send fragments) + * - Checksum (let the kernel fill it in) + */ + ip->ip_v = IPVERSION; + ip->ip_hl = sizeof(struct ip) >> 2; + ip->ip_tos = 0xc0; /* Internet Control */ + ip->ip_ttl = MAXTTL; /* applies to unicasts only */ + ip->ip_p = IPPROTO_IGMP; + + allhosts_group = htonl(INADDR_ALLHOSTS_GROUP); + allrouters_group = htonl(INADDR_ALLRTRS_GROUP); +} + +/** +* Finds the textual name of the supplied IGMP request. +*/ +char *igmpPacketKind(u_int type, u_int code) { + static char unknown[20]; + + switch (type) { + case IGMP_MEMBERSHIP_QUERY: return "Membership query "; + case IGMP_V1_MEMBERSHIP_REPORT: return "V1 member report "; + case IGMP_V2_MEMBERSHIP_REPORT: return "V2 member report "; + case IGMP_V2_LEAVE_GROUP: return "Leave message "; + + default: + sprintf(unknown, "unk: 0x%02x/0x%02x ", type, code); + return unknown; + } +} + + +/** + * Process a newly received IGMP packet that is sitting in the input + * packet buffer. + */ +void acceptIgmp(int recvlen) { + register uint32_t src, dst, group; + struct ip *ip; + struct igmp *igmp; + int ipdatalen, iphdrlen, igmpdatalen; + + if (recvlen < sizeof(struct ip)) { + my_log(LOG_WARNING, 0, + "received packet too short (%u bytes) for IP header", recvlen); + return; + } + + ip = (struct ip *)recv_buf; + src = ip->ip_src.s_addr; + dst = ip->ip_dst.s_addr; + + /* + * this is most likely a message from the kernel indicating that + * a new src grp pair message has arrived and so, it would be + * necessary to install a route into the kernel for this. + */ + if (ip->ip_p == 0) { + if (src == 0 || dst == 0) { + my_log(LOG_WARNING, 0, "kernel request not accurate"); + } + else { + struct IfDesc *checkVIF; + + // Check if the source address matches a valid address on upstream vif. + checkVIF = getIfByIx( upStreamVif ); + if(checkVIF == 0) { + my_log(LOG_ERR, 0, "Upstream VIF was null."); + return; + } + else if(src == checkVIF->InAdr.s_addr) { + my_log(LOG_NOTICE, 0, "Route activation request from %s for %s is from myself. Ignoring.", + inetFmt(src, s1), inetFmt(dst, s2)); + return; + } + else if(!isAdressValidForIf(checkVIF, src)) { + my_log(LOG_WARNING, 0, "The source address %s for group %s, is not in any valid net for upstream VIF.", + inetFmt(src, s1), inetFmt(dst, s2)); + return; + } + + // Activate the route. + my_log(LOG_DEBUG, 0, "Route activate request from %s to %s", + inetFmt(src,s1), inetFmt(dst,s2)); + activateRoute(dst, src); + + + } + return; + } + + iphdrlen = ip->ip_hl << 2; + ipdatalen = ip_data_len(ip); + + if (iphdrlen + ipdatalen != recvlen) { + my_log(LOG_WARNING, 0, + "received packet from %s shorter (%u bytes) than hdr+data length (%u+%u)", + inetFmt(src, s1), recvlen, iphdrlen, ipdatalen); + return; + } + + igmp = (struct igmp *)(recv_buf + iphdrlen); + group = igmp->igmp_group.s_addr; + igmpdatalen = ipdatalen - IGMP_MINLEN; + if (igmpdatalen < 0) { + my_log(LOG_WARNING, 0, + "received IP data field too short (%u bytes) for IGMP, from %s", + ipdatalen, inetFmt(src, s1)); + return; + } + + my_log(LOG_NOTICE, 0, "RECV %s from %-15s to %s", + igmpPacketKind(igmp->igmp_type, igmp->igmp_code), + inetFmt(src, s1), inetFmt(dst, s2) ); + + switch (igmp->igmp_type) { + case IGMP_V1_MEMBERSHIP_REPORT: + case IGMP_V2_MEMBERSHIP_REPORT: + acceptGroupReport(src, group, igmp->igmp_type); + return; + + case IGMP_V2_LEAVE_GROUP: + acceptLeaveMessage(src, group); + return; + + case IGMP_MEMBERSHIP_QUERY: + return; + + default: + my_log(LOG_INFO, 0, + "ignoring unknown IGMP message type %x from %s to %s", + igmp->igmp_type, inetFmt(src, s1), + inetFmt(dst, s2)); + return; + } +} + + +/* + * Construct an IGMP message in the output packet buffer. The caller may + * have already placed data in that buffer, of length 'datalen'. + */ +void buildIgmp(uint32_t src, uint32_t dst, int type, int code, uint32_t group, int datalen) { + struct ip *ip; + struct igmp *igmp; + extern int curttl; + + ip = (struct ip *)send_buf; + ip->ip_src.s_addr = src; + ip->ip_dst.s_addr = dst; + ip_set_len(ip, MIN_IP_HEADER_LEN + IGMP_MINLEN + datalen); + + if (IN_MULTICAST(ntohl(dst))) { + ip->ip_ttl = curttl; + } else { + ip->ip_ttl = MAXTTL; + } + + igmp = (struct igmp *)(send_buf + MIN_IP_HEADER_LEN); + igmp->igmp_type = type; + igmp->igmp_code = code; + igmp->igmp_group.s_addr = group; + igmp->igmp_cksum = 0; + igmp->igmp_cksum = inetChksum((u_short *)igmp, + IGMP_MINLEN + datalen); +} + +/* + * Call build_igmp() to build an IGMP message in the output packet buffer. + * Then send the message from the interface with IP address 'src' to + * destination 'dst'. + */ +void sendIgmp(uint32_t src, uint32_t dst, int type, int code, uint32_t group, int datalen) { + struct sockaddr_in sdst; + int setloop = 0, setigmpsource = 0; + + buildIgmp(src, dst, type, code, group, datalen); + + if (IN_MULTICAST(ntohl(dst))) { + k_set_if(src); + setigmpsource = 1; + if (type != IGMP_DVMRP || dst == allhosts_group) { + setloop = 1; + k_set_loop(true); + } + } + + memset(&sdst, 0, sizeof(sdst)); + sdst.sin_family = AF_INET; +#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN + sdst.sin_len = sizeof(sdst); +#endif + sdst.sin_addr.s_addr = dst; + if (sendto(MRouterFD, send_buf, + MIN_IP_HEADER_LEN + IGMP_MINLEN + datalen, 0, + (struct sockaddr *)&sdst, sizeof(sdst)) < 0) { + if (errno == ENETDOWN) + my_log(LOG_ERR, errno, "Sender VIF was down."); + else + my_log(LOG_INFO, errno, + "sendto to %s on %s", + inetFmt(dst, s1), inetFmt(src, s2)); + } + + if(setigmpsource) { + if (setloop) { + k_set_loop(false); + } + // Restore original... + k_set_if(INADDR_ANY); + } + + my_log(LOG_DEBUG, 0, "SENT %s from %-15s to %s", + igmpPacketKind(type, code), src == INADDR_ANY ? "INADDR_ANY" : + inetFmt(src, s1), inetFmt(dst, s2)); +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmp.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmp.o new file mode 100644 index 0000000000000000000000000000000000000000..3320ba56d5240e84292ce47be7fa07350faf3fb9 GIT binary patch literal 18396 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 Kq_+y*A^5*7=#ISr literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy new file mode 100755 index 0000000000000000000000000000000000000000..c81fa835f88a6ea49e74a8d35d48cde86a306337 GIT binary patch literal 116949 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.c new file mode 100644 index 0000000..1ece15a --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.c @@ -0,0 +1,357 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* igmpproxy.c - The main file for the IGMP proxy application. +* +* February 2005 - Johnny Egeland +*/ + +#include "igmpproxy.h" + +static const char Usage[] = +"Usage: igmpproxy [-h] [-d] [-v [-v]] \n" +"\n" +" -h Display this help screen\n" +" -d Run in debug mode. Output all messages on stderr\n" +" -v Be verbose. Give twice to see even debug messages.\n" +"\n" +PACKAGE_STRING "\n" +; + +// Local function Prototypes +static void signalHandler(int); +int igmpProxyInit(); +void igmpProxyCleanUp(); +void igmpProxyRun(); + +// Global vars... +static int sighandled = 0; +#define GOT_SIGINT 0x01 +#define GOT_SIGHUP 0x02 +#define GOT_SIGUSR1 0x04 +#define GOT_SIGUSR2 0x08 + +// The upstream VIF index +int upStreamVif; + +/** +* Program main method. Is invoked when the program is started +* on commandline. The number of commandline arguments, and a +* pointer to the arguments are recieved on the line... +*/ +int main( int ArgCn, char *ArgVc[] ) { + + // Parse the commandline options and setup basic settings.. + for (int c; (c = getopt(ArgCn, ArgVc, "vdh")) != -1;) { + switch (c) { + case 'd': + Log2Stderr = true; + break; + case 'v': + if (LogLevel == LOG_INFO) + LogLevel = LOG_DEBUG; + else + LogLevel = LOG_INFO; + break; + case 'h': + fputs(Usage, stderr); + exit(0); + break; + default: + exit(1); + break; + } + } + + if (optind != ArgCn - 1) { + fputs("You must specify the configuration file.\n", stderr); + exit(1); + } + char *configFilePath = ArgVc[optind]; + + // Chech that we are root + if (geteuid() != 0) { + fprintf(stderr, "igmpproxy: must be root\n"); + exit(1); + } + + openlog("igmpproxy", LOG_PID, LOG_USER); + + // Write debug notice with file path... + my_log(LOG_DEBUG, 0, "Searching for config file at '%s'" , configFilePath); + + do { + + // Loads the config file... + if( ! loadConfig( configFilePath ) ) { + my_log(LOG_ERR, 0, "Unable to load config file..."); + break; + } + + // Initializes the deamon. + if ( !igmpProxyInit() ) { + my_log(LOG_ERR, 0, "Unable to initialize IGMPproxy."); + break; + } + + // Go to the main loop. + igmpProxyRun(); + + // Clean up + igmpProxyCleanUp(); + + } while ( false ); + + // Inform that we are exiting. + my_log(LOG_INFO, 0, "Shutdown complete...."); + + exit(0); +} + + + +/** +* Handles the initial startup of the daemon. +*/ +int igmpProxyInit() { + struct sigaction sa; + int Err; + + + sa.sa_handler = signalHandler; + sa.sa_flags = 0; /* Interrupt system calls */ + sigemptyset(&sa.sa_mask); + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + + // Loads configuration for Physical interfaces... + buildIfVc(); + + // Configures IF states and settings + configureVifs(); + + switch ( Err = enableMRouter() ) { + case 0: break; + case EADDRINUSE: my_log( LOG_ERR, EADDRINUSE, "MC-Router API already in use" ); break; + default: my_log( LOG_ERR, Err, "MRT_INIT failed" ); + } + + /* create VIFs for all IP, non-loop interfaces + */ + { + unsigned Ix; + struct IfDesc *Dp; + int vifcount = 0; + upStreamVif = -1; + + for ( Ix = 0; (Dp = getIfByIx(Ix)); Ix++ ) { + + if ( Dp->InAdr.s_addr && ! (Dp->Flags & IFF_LOOPBACK) ) { + if(Dp->state == IF_STATE_UPSTREAM) { + if(upStreamVif == -1) { + upStreamVif = Ix; + } else { + my_log(LOG_ERR, 0, "Vif #%d was already upstream. Cannot set VIF #%d as upstream as well.", + upStreamVif, Ix); + } + } + + addVIF( Dp ); + vifcount++; + } + } + + // If there is only one VIF, or no defined upstream VIF, we send an error. + if(vifcount < 2 || upStreamVif < 0) { + my_log(LOG_ERR, 0, "There must be at least 2 Vif's where one is upstream."); + } + } + + // Initialize IGMP + initIgmp(); + // Initialize Routing table + initRouteTable(); + // Initialize timer + callout_init(); + + + return 1; +} + +/** +* Clean up all on exit... +*/ +void igmpProxyCleanUp() { + + my_log( LOG_DEBUG, 0, "clean handler called" ); + + free_all_callouts(); // No more timeouts. + clearAllRoutes(); // Remove all routes. + disableMRouter(); // Disable the multirout API + +} + +/** +* Main daemon loop. +*/ +void igmpProxyRun() { + // Get the config. + //struct Config *config = getCommonConfig(); + // Set some needed values. + register int recvlen; + int MaxFD, Rt, secs; + fd_set ReadFDS; + socklen_t dummy = 0; + struct timeval curtime, lasttime, difftime, tv; + // The timeout is a pointer in order to set it to NULL if nessecary. + struct timeval *timeout = &tv; + + // Initialize timer vars + difftime.tv_usec = 0; + gettimeofday(&curtime, NULL); + lasttime = curtime; + + // First thing we send a membership query in downstream VIF's... + sendGeneralMembershipQuery(); + + // Loop until the end... + for (;;) { + + // Process signaling... + if (sighandled) { + if (sighandled & GOT_SIGINT) { + sighandled &= ~GOT_SIGINT; + my_log(LOG_NOTICE, 0, "Got a interupt signal. Exiting."); + break; + } + } + + // Prepare timeout... + secs = timer_nextTimer(); + if(secs == -1) { + timeout = NULL; + } else { + timeout->tv_usec = 0; + timeout->tv_sec = secs; + } + + // Prepare for select. + MaxFD = MRouterFD; + + FD_ZERO( &ReadFDS ); + FD_SET( MRouterFD, &ReadFDS ); + + // wait for input + Rt = select( MaxFD +1, &ReadFDS, NULL, NULL, timeout ); + + // log and ignore failures + if( Rt < 0 ) { + my_log( LOG_WARNING, errno, "select() failure" ); + continue; + } + else if( Rt > 0 ) { + + // Read IGMP request, and handle it... + if( FD_ISSET( MRouterFD, &ReadFDS ) ) { + + recvlen = recvfrom(MRouterFD, recv_buf, RECV_BUF_SIZE, + 0, NULL, &dummy); + if (recvlen < 0) { + if (errno != EINTR) my_log(LOG_ERR, errno, "recvfrom"); + continue; + } + + + acceptIgmp(recvlen); + } + } + + // At this point, we can handle timeouts... + do { + /* + * If the select timed out, then there's no other + * activity to account for and we don't need to + * call gettimeofday. + */ + if (Rt == 0) { + curtime.tv_sec = lasttime.tv_sec + secs; + curtime.tv_usec = lasttime.tv_usec; + Rt = -1; /* don't do this next time through the loop */ + } else { + gettimeofday(&curtime, NULL); + } + difftime.tv_sec = curtime.tv_sec - lasttime.tv_sec; + difftime.tv_usec += curtime.tv_usec - lasttime.tv_usec; + while (difftime.tv_usec > 1000000) { + difftime.tv_sec++; + difftime.tv_usec -= 1000000; + } + if (difftime.tv_usec < 0) { + difftime.tv_sec--; + difftime.tv_usec += 1000000; + } + lasttime = curtime; + if (secs == 0 || difftime.tv_sec > 0) + age_callout_queue(difftime.tv_sec); + secs = -1; + } while (difftime.tv_sec > 0); + + } + +} + +/* + * Signal handler. Take note of the fact that the signal arrived + * so that the main loop can take care of it. + */ +static void signalHandler(int sig) { + switch (sig) { + case SIGINT: + case SIGTERM: + sighandled |= GOT_SIGINT; + break; + /* XXX: Not in use. + case SIGHUP: + sighandled |= GOT_SIGHUP; + break; + + case SIGUSR1: + sighandled |= GOT_SIGUSR1; + break; + + case SIGUSR2: + sighandled |= GOT_SIGUSR2; + break; + */ + } +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.h new file mode 100644 index 0000000..4dabd1c --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.h @@ -0,0 +1,279 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* igmpproxy.h - Header file for common includes. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "os.h" +#include "config.h" + +/* + * Limit on length of route data + */ +#define MAX_IP_PACKET_LEN 576 +#define MIN_IP_HEADER_LEN 20 +#define MAX_IP_HEADER_LEN 60 + +#define MAX_MC_VIFS 32 // !!! check this const in the specific includes + +// Useful macros.. +#define VCMC( Vc ) (sizeof( Vc ) / sizeof( (Vc)[ 0 ] )) +#define VCEP( Vc ) (&(Vc)[ VCMC( Vc ) ]) + +// Bit manipulation macros... +#define BIT_ZERO(X) ((X) = 0) +#define BIT_SET(X,n) ((X) |= 1 << (n)) +#define BIT_CLR(X,n) ((X) &= ~(1 << (n))) +#define BIT_TST(X,n) ((X) & 1 << (n)) + + +//################################################################################# +// Globals +//################################################################################# + +/* + * External declarations for global variables and functions. + */ +#define RECV_BUF_SIZE 8192 +extern char *recv_buf; +extern char *send_buf; + +extern char s1[]; +extern char s2[]; +extern char s3[]; +extern char s4[]; + + + +//################################################################################# +// Lib function prototypes. +//################################################################################# + +/* syslog.c + */ +extern bool Log2Stderr; // Log to stderr instead of to syslog +extern int LogLevel; // Log threshold, LOG_WARNING .... LOG_DEBUG + +void my_log( int Serverity, int Errno, const char *FmtSt, ... ); + +/* ifvc.c + */ +#define MAX_IF 40 // max. number of interfaces recognized + +// Interface states +#define IF_STATE_DISABLED 0 // Interface should be ignored. +#define IF_STATE_UPSTREAM 1 // Interface is the upstream interface +#define IF_STATE_DOWNSTREAM 2 // Interface is a downstream interface + +// Multicast default values... +#define DEFAULT_ROBUSTNESS 2 +#define DEFAULT_THRESHOLD 1 +#define DEFAULT_RATELIMIT 0 + +// Define timer constants (in seconds...) +#define INTERVAL_QUERY 125 +#define INTERVAL_QUERY_RESPONSE 10 +//#define INTERVAL_QUERY_RESPONSE 10 + +#define ROUTESTATE_NOTJOINED 0 // The group corresponding to route is not joined +#define ROUTESTATE_JOINED 1 // The group corresponding to route is joined +#define ROUTESTATE_CHECK_LAST_MEMBER 2 // The router is checking for hosts + + + +// Linked list of networks... +struct SubnetList { + uint32_t subnet_addr; + uint32_t subnet_mask; + struct SubnetList* next; +}; + +struct IfDesc { + char Name[IF_NAMESIZE]; + struct in_addr InAdr; /* == 0 for non IP interfaces */ + short Flags; + short state; + struct SubnetList* allowednets; + unsigned int robustness; + unsigned char threshold; /* ttl limit */ + unsigned int ratelimit; + unsigned int index; +}; + +// Keeps common configuration settings +struct Config { + unsigned int robustnessValue; + unsigned int queryInterval; + unsigned int queryResponseInterval; + // Used on startup.. + unsigned int startupQueryInterval; + unsigned int startupQueryCount; + // Last member probe... + unsigned int lastMemberQueryInterval; + unsigned int lastMemberQueryCount; + // Set if upstream leave messages should be sent instantly.. + unsigned short fastUpstreamLeave; +}; + +// Defines the Index of the upstream VIF... +extern int upStreamVif; + +/* ifvc.c + */ +void buildIfVc( void ); +struct IfDesc *getIfByName( const char *IfName ); +struct IfDesc *getIfByIx( unsigned Ix ); +struct IfDesc *getIfByAddress( uint32_t Ix ); +int isAdressValidForIf(struct IfDesc* intrface, uint32_t ipaddr); + +/* mroute-api.c + */ +struct MRouteDesc { + struct in_addr OriginAdr, McAdr; + short InVif; + uint8_t TtlVc[ MAX_MC_VIFS ]; +}; + +// IGMP socket as interface for the mrouted API +// - receives the IGMP messages +extern int MRouterFD; + +int enableMRouter( void ); +void disableMRouter( void ); +void addVIF( struct IfDesc *Dp ); +int addMRoute( struct MRouteDesc * Dp ); +int delMRoute( struct MRouteDesc * Dp ); +int getVifIx( struct IfDesc *IfDp ); + +/* config.c + */ +int loadConfig(char *configFile); +void configureVifs(); +struct Config *getCommonConfig(); + +/* igmp.c +*/ +extern uint32_t allhosts_group; +extern uint32_t allrouters_group; +void initIgmp(void); +void acceptIgmp(int); +void sendIgmp (uint32_t, uint32_t, int, int, uint32_t,int); + +/* lib.c + */ +char *fmtInAdr( char *St, struct in_addr InAdr ); +char *inetFmt(uint32_t addr, char *s); +char *inetFmts(uint32_t addr, uint32_t mask, char *s); +uint16_t inetChksum(uint16_t *addr, int len); + +/* kern.c + */ +void k_set_rcvbuf(int bufsize, int minsize); +void k_hdr_include(int hdrincl); +void k_set_ttl(int t); +void k_set_loop(int l); +void k_set_if(uint32_t ifa); +/* +void k_join(uint32_t grp, uint32_t ifa); +void k_leave(uint32_t grp, uint32_t ifa); +*/ + +/* udpsock.c + */ +int openUdpSocket( uint32_t PeerInAdr, uint16_t PeerPort ); + +/* mcgroup.c + */ +int joinMcGroup( int UdpSock, struct IfDesc *IfDp, uint32_t mcastaddr ); +int leaveMcGroup( int UdpSock, struct IfDesc *IfDp, uint32_t mcastaddr ); + + +/* rttable.c + */ +void initRouteTable(); +void clearAllRoutes(); +int insertRoute(uint32_t group, int ifx); +int activateRoute(uint32_t group, uint32_t originAddr); +void ageActiveRoutes(); +void setRouteLastMemberMode(uint32_t group); +int lastMemberGroupAge(uint32_t group); + +/* request.c + */ +void acceptGroupReport(uint32_t src, uint32_t group, uint8_t type); +void acceptLeaveMessage(uint32_t src, uint32_t group); +void sendGeneralMembershipQuery(); + +/* callout.c +*/ +typedef void (*timer_f)(void *); + +void callout_init(); +void free_all_callouts(); +void age_callout_queue(int); +int timer_nextTimer(); +int timer_setTimer(int, timer_f, void *); +int timer_clearTimer(int); +int timer_leftTimer(int); + +/* confread.c + */ +#define MAX_TOKEN_LENGTH 30 + +int openConfigFile(char *filename); +void closeConfigFile(); +char* nextConfigToken(); +char* getCurrentConfigToken(); + + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/igmpproxy.o new file mode 100644 index 0000000000000000000000000000000000000000..f7f42f4b49534124560bba6080e97bd26c98642a GIT binary patch literal 20492 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 +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ + + +#include "igmpproxy.h" + +int curttl = 0; + +void k_set_rcvbuf(int bufsize, int minsize) { + int delta = bufsize / 2; + int iter = 0; + + /* + * Set the socket buffer. If we can't set it as large as we + * want, search around to try to find the highest acceptable + * value. The highest acceptable value being smaller than + * minsize is a fatal error. + */ + if (setsockopt(MRouterFD, SOL_SOCKET, SO_RCVBUF, + (char *)&bufsize, sizeof(bufsize)) < 0) { + bufsize -= delta; + while (1) { + iter++; + if (delta > 1) + delta /= 2; + + if (setsockopt(MRouterFD, SOL_SOCKET, SO_RCVBUF, + (char *)&bufsize, sizeof(bufsize)) < 0) { + bufsize -= delta; + } else { + if (delta < 1024) + break; + bufsize += delta; + } + } + if (bufsize < minsize) { + my_log(LOG_ERR, 0, "OS-allowed buffer size %u < app min %u", + bufsize, minsize); + /*NOTREACHED*/ + } + } + my_log(LOG_DEBUG, 0, "Got %d byte buffer size in %d iterations", bufsize, iter); +} + + +void k_hdr_include(int hdrincl) { + if (setsockopt(MRouterFD, IPPROTO_IP, IP_HDRINCL, + (char *)&hdrincl, sizeof(hdrincl)) < 0) + my_log(LOG_ERR, errno, "setsockopt IP_HDRINCL %u", hdrincl); +} + + +void k_set_ttl(int t) { +#ifndef RAW_OUTPUT_IS_RAW + u_char ttl; + + ttl = t; + if (setsockopt(MRouterFD, IPPROTO_IP, IP_MULTICAST_TTL, + (char *)&ttl, sizeof(ttl)) < 0) + my_log(LOG_ERR, errno, "setsockopt IP_MULTICAST_TTL %u", ttl); +#endif + curttl = t; +} + + +void k_set_loop(int l) { + u_char loop; + + loop = l; + if (setsockopt(MRouterFD, IPPROTO_IP, IP_MULTICAST_LOOP, + (char *)&loop, sizeof(loop)) < 0) + my_log(LOG_ERR, errno, "setsockopt IP_MULTICAST_LOOP %u", loop); +} + +void k_set_if(uint32_t ifa) { + struct in_addr adr; + + adr.s_addr = ifa; + if (setsockopt(MRouterFD, IPPROTO_IP, IP_MULTICAST_IF, + (char *)&adr, sizeof(adr)) < 0) + my_log(LOG_ERR, errno, "setsockopt IP_MULTICAST_IF %s", + inetFmt(ifa, s1)); +} + +/* +void k_join(uint32_t grp, uint32_t ifa) { + struct ip_mreq mreq; + + mreq.imr_multiaddr.s_addr = grp; + mreq.imr_interface.s_addr = ifa; + + if (setsockopt(MRouterFD, IPPROTO_IP, IP_ADD_MEMBERSHIP, + (char *)&mreq, sizeof(mreq)) < 0) + my_log(LOG_WARNING, errno, "can't join group %s on interface %s", + inetFmt(grp, s1), inetFmt(ifa, s2)); +} + + +void k_leave(uint32_t grp, uint32_t ifa) { + struct ip_mreq mreq; + + mreq.imr_multiaddr.s_addr = grp; + mreq.imr_interface.s_addr = ifa; + + if (setsockopt(MRouterFD, IPPROTO_IP, IP_DROP_MEMBERSHIP, + (char *)&mreq, sizeof(mreq)) < 0) + my_log(LOG_WARNING, errno, "can't leave group %s on interface %s", + inetFmt(grp, s1), inetFmt(ifa, s2)); +} +*/ diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/kern.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/kern.o new file mode 100644 index 0000000000000000000000000000000000000000..09f1de3bafb3ac9096c6a255416fc9f5ae94a15d GIT binary patch literal 9564 zcmb7KeQ*@#d4J!%l~|-hh!Y4fU=DEt8G}ARV1luckU$&=Nk+mZhWa>3CvoO4)Tb#K;MEAP-Mph}ujopW7JtAPeJTg~*S25;^^ zaxrqUGtzuwPo#OGGZK7~=GQwT)wYX{8BZN~O&__W@7ZS3o*alY zd#Nv6niz1y{^0_qAD=+D`!8J%D0NS}Ml3hfyfl+HhgSBj8hC<8rsSu z=Nop*c$op@+hn*w^F~^B=jm9)r?`M%7-%I$y@)D2?S6 zOPeTl+dguB{S|rhADfq4Uw@Z>q`%(s4g0bq8HR6pvA?FLvM%RGP_r2ov*-N z41ySV4Ran?7^Ou!L0Bwn%HyEIe}~2aPo|aU-l-Q&(Qhc{l+roAwZd3Zr78`l^ZzATBdve=EL@MeH3KpUtzJUbqZiD zR?a`dX3x^k8r62%K(%W{b)4&w(4H-7(0PgEIiglOZ!*+eQD-`DpkMY?qRw$O?9ED4bB~m92RxCa~(s~=~ofLTHNgXhKVBjdq!<_@@%_A zdbHMAL3Np^>zx@4wOl`7I@spC%}~v{�Y_MYToWX4K8jT`Y2?e#1oWa(+nf8vV9W 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.c new file mode 100644 index 0000000..70a730a --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.c @@ -0,0 +1,148 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ + +#include "igmpproxy.h" + +/* + * Exported variables. + */ +char s1[19]; /* buffers to hold the string representations */ +char s2[19]; /* of IP addresses, to be passed to inet_fmt() */ +char s3[19]; /* or inet_fmts(). */ +char s4[19]; + +/* +** Formats 'InAdr' into a dotted decimal string. +** +** returns: - pointer to 'St' +** +*/ +char *fmtInAdr( char *St, struct in_addr InAdr ) { + sprintf( St, "%u.%u.%u.%u", + ((uint8_t *)&InAdr.s_addr)[ 0 ], + ((uint8_t *)&InAdr.s_addr)[ 1 ], + ((uint8_t *)&InAdr.s_addr)[ 2 ], + ((uint8_t *)&InAdr.s_addr)[ 3 ] ); + + return St; +} + +/* + * Convert an IP address in u_long (network) format into a printable string. + */ +char *inetFmt(uint32_t addr, char *s) { + register u_char *a; + + a = (u_char *)&addr; + sprintf(s, "%u.%u.%u.%u", a[0], a[1], a[2], a[3]); + return(s); +} + + +/* + * Convert an IP subnet number in u_long (network) format into a printable + * string including the netmask as a number of bits. + */ +char *inetFmts(uint32_t addr, uint32_t mask, char *s) { + register u_char *a, *m; + int bits; + + if ((addr == 0) && (mask == 0)) { + sprintf(s, "default"); + return(s); + } + a = (u_char *)&addr; + m = (u_char *)&mask; + bits = 33 - ffs(ntohl(mask)); + + if (m[3] != 0) sprintf(s, "%u.%u.%u.%u/%d", a[0], a[1], a[2], a[3], + bits); + else if (m[2] != 0) sprintf(s, "%u.%u.%u/%d", a[0], a[1], a[2], bits); + else if (m[1] != 0) sprintf(s, "%u.%u/%d", a[0], a[1], bits); + else sprintf(s, "%u/%d", a[0], bits); + + return(s); +} + +/* + * inet_cksum extracted from: + * P I N G . C + * + * Author - + * Mike Muuss + * U. S. Army Ballistic Research Laboratory + * December, 1983 + * Modified at Uc Berkeley + * + * (ping.c) Status - + * Public Domain. Distribution Unlimited. + * + * I N _ C K S U M + * + * Checksum routine for Internet Protocol family headers (C Version) + * + */ +uint16_t inetChksum(uint16_t *addr, int len) { + register int nleft = len; + register uint16_t *w = addr; + uint16_t answer = 0; + register int32_t sum = 0; + + /* + * Our algorithm is simple, using a 32 bit accumulator (sum), + * we add sequential 16 bit words to it, and at the end, fold + * back all the carry bits from the top 16 bits into the lower + * 16 bits. + */ + while (nleft > 1) { + sum += *w++; + nleft -= 2; + } + + /* mop up an odd byte, if necessary */ + if (nleft == 1) { + *(uint8_t *) (&answer) = *(uint8_t *)w ; + sum += answer; + } + + /* + * add back carry outs from top 16 bits to low 16 bits + */ + sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */ + sum += (sum >> 16); /* add carry */ + answer = ~sum; /* truncate to 16 bits */ + return(answer); +} + + + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/lib.o new file mode 100644 index 0000000000000000000000000000000000000000..22f3c01ff238e6a6ea8027a618c48d30dac5d7a0 GIT binary patch literal 7800 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 z +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* mcgroup contains functions for joining and leaving multicast groups. +* +*/ + +#include "igmpproxy.h" + + +/** +* Common function for joining or leaving a MCast group. +*/ +static int joinleave( int Cmd, int UdpSock, struct IfDesc *IfDp, uint32_t mcastaddr ) { + struct ip_mreq CtlReq; + const char *CmdSt = Cmd == 'j' ? "join" : "leave"; + + memset(&CtlReq, 0, sizeof(CtlReq)); + CtlReq.imr_multiaddr.s_addr = mcastaddr; + CtlReq.imr_interface.s_addr = IfDp->InAdr.s_addr; + + { + my_log( LOG_NOTICE, 0, "%sMcGroup: %s on %s", CmdSt, + inetFmt( mcastaddr, s1 ), IfDp ? IfDp->Name : "" ); + } + + if( setsockopt( UdpSock, IPPROTO_IP, + Cmd == 'j' ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP, + (void *)&CtlReq, sizeof( CtlReq ) ) ) + { + my_log( LOG_WARNING, errno, "MRT_%s_MEMBERSHIP failed", Cmd == 'j' ? "ADD" : "DROP" ); + return 1; + } + + return 0; +} + +/** +* Joins the MC group with the address 'McAdr' on the interface 'IfName'. +* The join is bound to the UDP socket 'UdpSock', so if this socket is +* closed the membership is dropped. +* +* @return 0 if the function succeeds, 1 if parameters are wrong or the join fails +*/ +int joinMcGroup( int UdpSock, struct IfDesc *IfDp, uint32_t mcastaddr ) { + return joinleave( 'j', UdpSock, IfDp, mcastaddr ); +} + +/** +* Leaves the MC group with the address 'McAdr' on the interface 'IfName'. +* +* @return 0 if the function succeeds, 1 if parameters are wrong or the join fails +*/ +int leaveMcGroup( int UdpSock, struct IfDesc *IfDp, uint32_t mcastaddr ) { + return joinleave( 'l', UdpSock, IfDp, mcastaddr ); +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mcgroup.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mcgroup.o new file mode 100644 index 0000000000000000000000000000000000000000..2fdb2f900f3708b424e5c5f15ce9ace796f4780c GIT binary patch literal 8804 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 V@a1!X`L3fJSP$L;P6{3u{6BsKBn1Ef literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.c new file mode 100644 index 0000000..7c2be3e --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.c @@ -0,0 +1,242 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* mroute-api.c +* +* This module contains the interface routines to the Linux mrouted API +*/ + + +#include "igmpproxy.h" + +// MAX_MC_VIFS from mclab.h must have same value as MAXVIFS from mroute.h +#if MAX_MC_VIFS != MAXVIFS +# error "constants don't match, correct mclab.h" +#endif + +// need an IGMP socket as interface for the mrouted API +// - receives the IGMP messages +int MRouterFD; /* socket for all network I/O */ +char *recv_buf; /* input packet buffer */ +char *send_buf; /* output packet buffer */ + + +// my internal virtual interfaces descriptor vector +static struct VifDesc { + struct IfDesc *IfDp; +} VifDescVc[ MAXVIFS ]; + + + +/* +** Initialises the mrouted API and locks it by this exclusively. +** +** returns: - 0 if the functions succeeds +** - the errno value for non-fatal failure condition +*/ +int enableMRouter() +{ + int Va = 1; + + if ( (MRouterFD = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP)) < 0 ) + my_log( LOG_ERR, errno, "IGMP socket open" ); + + if ( setsockopt( MRouterFD, IPPROTO_IP, MRT_INIT, + (void *)&Va, sizeof( Va ) ) ) + return errno; + + return 0; +} + +/* +** Diables the mrouted API and relases by this the lock. +** +*/ +void disableMRouter() +{ + if ( setsockopt( MRouterFD, IPPROTO_IP, MRT_DONE, NULL, 0 ) + || close( MRouterFD ) + ) { + MRouterFD = 0; + my_log( LOG_ERR, errno, "MRT_DONE/close" ); + } + + MRouterFD = 0; +} + +/* +** Adds the interface '*IfDp' as virtual interface to the mrouted API +** +*/ +void addVIF( struct IfDesc *IfDp ) +{ + struct vifctl VifCtl; + struct VifDesc *VifDp; + + /* search free VifDesc + */ + for ( VifDp = VifDescVc; VifDp < VCEP( VifDescVc ); VifDp++ ) { + if ( ! VifDp->IfDp ) + break; + } + + /* no more space + */ + if ( VifDp >= VCEP( VifDescVc ) ) + my_log( LOG_ERR, ENOMEM, "addVIF, out of VIF space" ); + + VifDp->IfDp = IfDp; + + VifCtl.vifc_vifi = VifDp - VifDescVc; + VifCtl.vifc_flags = 0; /* no tunnel, no source routing, register ? */ + VifCtl.vifc_threshold = VifDp->IfDp->threshold; // Packet TTL must be at least 1 to pass them + VifCtl.vifc_rate_limit = VifDp->IfDp->ratelimit; // Ratelimit + + VifCtl.vifc_lcl_addr.s_addr = VifDp->IfDp->InAdr.s_addr; + VifCtl.vifc_rmt_addr.s_addr = INADDR_ANY; + + // Set the index... + VifDp->IfDp->index = VifCtl.vifc_vifi; + + my_log( LOG_NOTICE, 0, "adding VIF, Ix %d Fl 0x%x IP 0x%08x %s, Threshold: %d, Ratelimit: %d", + VifCtl.vifc_vifi, VifCtl.vifc_flags, VifCtl.vifc_lcl_addr.s_addr, VifDp->IfDp->Name, + VifCtl.vifc_threshold, VifCtl.vifc_rate_limit); + + struct SubnetList *currSubnet; + for(currSubnet = IfDp->allowednets; currSubnet; currSubnet = currSubnet->next) { + my_log(LOG_DEBUG, 0, " Network for [%s] : %s", + IfDp->Name, + inetFmts(currSubnet->subnet_addr, currSubnet->subnet_mask, s1)); + } + + if ( setsockopt( MRouterFD, IPPROTO_IP, MRT_ADD_VIF, + (char *)&VifCtl, sizeof( VifCtl ) ) ) + my_log( LOG_ERR, errno, "MRT_ADD_VIF" ); + +} + +/* +** Adds the multicast routed '*Dp' to the kernel routes +** +** returns: - 0 if the function succeeds +** - the errno value for non-fatal failure condition +*/ +int addMRoute( struct MRouteDesc *Dp ) +{ + struct mfcctl CtlReq; + int rc; + + CtlReq.mfcc_origin = Dp->OriginAdr; + CtlReq.mfcc_mcastgrp = Dp->McAdr; + CtlReq.mfcc_parent = Dp->InVif; + + /* copy the TTL vector + */ + + memcpy( CtlReq.mfcc_ttls, Dp->TtlVc, sizeof( CtlReq.mfcc_ttls ) ); + + { + char FmtBuO[ 32 ], FmtBuM[ 32 ]; + + my_log( LOG_NOTICE, 0, "Adding MFC: %s -> %s, InpVIf: %d", + fmtInAdr( FmtBuO, CtlReq.mfcc_origin ), + fmtInAdr( FmtBuM, CtlReq.mfcc_mcastgrp ), + (int)CtlReq.mfcc_parent + ); + } + + rc = setsockopt( MRouterFD, IPPROTO_IP, MRT_ADD_MFC, + (void *)&CtlReq, sizeof( CtlReq ) ); + if (rc) + my_log( LOG_WARNING, errno, "MRT_ADD_MFC" ); + + return rc; +} + +/* +** Removes the multicast routed '*Dp' from the kernel routes +** +** returns: - 0 if the function succeeds +** - the errno value for non-fatal failure condition +*/ +int delMRoute( struct MRouteDesc *Dp ) +{ + struct mfcctl CtlReq; + int rc; + + CtlReq.mfcc_origin = Dp->OriginAdr; + CtlReq.mfcc_mcastgrp = Dp->McAdr; + CtlReq.mfcc_parent = Dp->InVif; + + /* clear the TTL vector + */ + memset( CtlReq.mfcc_ttls, 0, sizeof( CtlReq.mfcc_ttls ) ); + + { + char FmtBuO[ 32 ], FmtBuM[ 32 ]; + + my_log( LOG_NOTICE, 0, "Removing MFC: %s -> %s, InpVIf: %d", + fmtInAdr( FmtBuO, CtlReq.mfcc_origin ), + fmtInAdr( FmtBuM, CtlReq.mfcc_mcastgrp ), + (int)CtlReq.mfcc_parent + ); + } + + rc = setsockopt( MRouterFD, IPPROTO_IP, MRT_DEL_MFC, + (void *)&CtlReq, sizeof( CtlReq ) ); + if (rc) + my_log( LOG_WARNING, errno, "MRT_DEL_MFC" ); + + return rc; +} + +/* +** Returns for the virtual interface index for '*IfDp' +** +** returns: - the vitrual interface index if the interface is registered +** - -1 if no virtual interface exists for the interface +** +*/ +int getVifIx( struct IfDesc *IfDp ) +{ + struct VifDesc *Dp; + + for ( Dp = VifDescVc; Dp < VCEP( VifDescVc ); Dp++ ) + if ( Dp->IfDp == IfDp ) + return Dp - VifDescVc; + + return -1; +} + + + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/mroute-api.o new file mode 100644 index 0000000000000000000000000000000000000000..d9b483ee06bc68207abb609e870af11060fd0dbe GIT binary patch literal 13236 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

RB=qC>3P;#So6np7c6F`jMA~2I?wtL6Tttp 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 E1A+aW-~a#s literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-dragonfly.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-dragonfly.h new file mode 100644 index 0000000..735401c --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-dragonfly.h @@ -0,0 +1,14 @@ +#include +#include +#include +#include + +static inline u_short ip_data_len(const struct ip *ip) +{ + return ip->ip_len; +} + +static inline void ip_set_len(struct ip *ip, u_short len) +{ + ip->ip_len = len; +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-freebsd.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-freebsd.h new file mode 100644 index 0000000..ca01cc5 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-freebsd.h @@ -0,0 +1,23 @@ +#include +#include +#include +#include +#include + +#if __FreeBSD_version >= 800069 && defined BURN_BRIDGES \ + || __FreeBSD_version >= 800098 +#define IGMP_MEMBERSHIP_QUERY IGMP_HOST_MEMBERSHIP_QUERY +#define IGMP_V1_MEMBERSHIP_REPORT IGMP_v1_HOST_MEMBERSHIP_REPORT +#define IGMP_V2_MEMBERSHIP_REPORT IGMP_v2_HOST_MEMBERSHIP_REPORT +#define IGMP_V2_LEAVE_GROUP IGMP_HOST_LEAVE_MESSAGE +#endif + +static inline u_short ip_data_len(const struct ip *ip) +{ + return ip->ip_len; +} + +static inline void ip_set_len(struct ip *ip, u_short len) +{ + ip->ip_len = len; +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-linux.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-linux.h new file mode 100644 index 0000000..7504b1f --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-linux.h @@ -0,0 +1,15 @@ +#define _LINUX_IN_H +#include +#include +#include +#include + +static inline u_short ip_data_len(const struct ip *ip) +{ + return ntohs(ip->ip_len) - (ip->ip_hl << 2); +} + +static inline void ip_set_len(struct ip *ip, u_short len) +{ + ip->ip_len = htons(len); +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-netbsd.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-netbsd.h new file mode 100644 index 0000000..17bd5fa --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-netbsd.h @@ -0,0 +1,19 @@ +#include +#include +#include +#include + +#define IGMP_MEMBERSHIP_QUERY IGMP_HOST_MEMBERSHIP_QUERY +#define IGMP_V1_MEMBERSHIP_REPORT IGMP_v1_HOST_MEMBERSHIP_REPORT +#define IGMP_V2_MEMBERSHIP_REPORT IGMP_v2_HOST_MEMBERSHIP_REPORT +#define IGMP_V2_LEAVE_GROUP IGMP_HOST_LEAVE_MESSAGE + +static inline u_short ip_data_len(const struct ip *ip) +{ + return ip->ip_len; +} + +static inline void ip_set_len(struct ip *ip, u_short len) +{ + ip->ip_len = len; +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-openbsd.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-openbsd.h new file mode 100644 index 0000000..873e5fb --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os-openbsd.h @@ -0,0 +1,21 @@ +#include +#include +#include +#include + +#define IGMP_MEMBERSHIP_QUERY IGMP_HOST_MEMBERSHIP_QUERY +#define IGMP_V1_MEMBERSHIP_REPORT IGMP_v1_HOST_MEMBERSHIP_REPORT +#define IGMP_V2_MEMBERSHIP_REPORT IGMP_v2_HOST_MEMBERSHIP_REPORT +#define IGMP_V2_LEAVE_GROUP IGMP_HOST_LEAVE_MESSAGE + +#define INADDR_ALLRTRS_GROUP INADDR_ALLROUTERS_GROUP + +static inline u_short ip_data_len(const struct ip *ip) +{ + return ntohs(ip->ip_len) - (ip->ip_hl << 2); +} + +static inline void ip_set_len(struct ip *ip, u_short len) +{ + ip->ip_len = htons(len); +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os.h b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os.h new file mode 120000 index 0000000..142e404 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/os.h @@ -0,0 +1 @@ +../src/os-linux.h \ No newline at end of file diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.c new file mode 100644 index 0000000..e3589f6 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.c @@ -0,0 +1,222 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* request.c +* +* Functions for recieveing and processing IGMP requests. +* +*/ + +#include "igmpproxy.h" + +// Prototypes... +void sendGroupSpecificMemberQuery(void *argument); + +typedef struct { + uint32_t group; + uint32_t vifAddr; + short started; +} GroupVifDesc; + + +/** +* Handles incoming membership reports, and +* appends them to the routing table. +*/ +void acceptGroupReport(uint32_t src, uint32_t group, uint8_t type) { + struct IfDesc *sourceVif; + + // Sanitycheck the group adress... + if(!IN_MULTICAST( ntohl(group) )) { + my_log(LOG_WARNING, 0, "The group address %s is not a valid Multicast group.", + inetFmt(group, s1)); + return; + } + + // Find the interface on which the report was recieved. + sourceVif = getIfByAddress( src ); + if(sourceVif == NULL) { + my_log(LOG_WARNING, 0, "No interfaces found for source %s", + inetFmt(src,s1)); + return; + } + + if(sourceVif->InAdr.s_addr == src) { + my_log(LOG_NOTICE, 0, "The IGMP message was from myself. Ignoring."); + return; + } + + // We have a IF so check that it's an downstream IF. + if(sourceVif->state == IF_STATE_DOWNSTREAM) { + + my_log(LOG_DEBUG, 0, "Should insert group %s (from: %s) to route table. Vif Ix : %d", + inetFmt(group,s1), inetFmt(src,s2), sourceVif->index); + + // The membership report was OK... Insert it into the route table.. + insertRoute(group, sourceVif->index); + + + } else { + // Log the state of the interface the report was recieved on. + my_log(LOG_INFO, 0, "Mebership report was recieved on %s. Ignoring.", + sourceVif->state==IF_STATE_UPSTREAM?"the upstream interface":"a disabled interface"); + } + +} + +/** +* Recieves and handles a group leave message. +*/ +void acceptLeaveMessage(uint32_t src, uint32_t group) { + struct IfDesc *sourceVif; + + my_log(LOG_DEBUG, 0, + "Got leave message from %s to %s. Starting last member detection.", + inetFmt(src, s1), inetFmt(group, s2)); + + // Sanitycheck the group adress... + if(!IN_MULTICAST( ntohl(group) )) { + my_log(LOG_WARNING, 0, "The group address %s is not a valid Multicast group.", + inetFmt(group, s1)); + return; + } + + // Find the interface on which the report was recieved. + sourceVif = getIfByAddress( src ); + if(sourceVif == NULL) { + my_log(LOG_WARNING, 0, "No interfaces found for source %s", + inetFmt(src,s1)); + return; + } + + // We have a IF so check that it's an downstream IF. + if(sourceVif->state == IF_STATE_DOWNSTREAM) { + + GroupVifDesc *gvDesc; + gvDesc = (GroupVifDesc*) malloc(sizeof(GroupVifDesc)); + + // Tell the route table that we are checking for remaining members... + setRouteLastMemberMode(group); + + // Call the group spesific membership querier... + gvDesc->group = group; + gvDesc->vifAddr = sourceVif->InAdr.s_addr; + gvDesc->started = 0; + + sendGroupSpecificMemberQuery(gvDesc); + + } else { + // just ignore the leave request... + my_log(LOG_DEBUG, 0, "The found if for %s was not downstream. Ignoring leave request.", inetFmt(src, s1)); + } +} + +/** +* Sends a group specific member report query until the +* group times out... +*/ +void sendGroupSpecificMemberQuery(void *argument) { + struct Config *conf = getCommonConfig(); + + // Cast argument to correct type... + GroupVifDesc *gvDesc = (GroupVifDesc*) argument; + + if(gvDesc->started) { + // If aging returns false, we don't do any further action... + if(!lastMemberGroupAge(gvDesc->group)) { + return; + } + } else { + gvDesc->started = 1; + } + + // Send a group specific membership query... + sendIgmp(gvDesc->vifAddr, gvDesc->group, + IGMP_MEMBERSHIP_QUERY, + conf->lastMemberQueryInterval * IGMP_TIMER_SCALE, + gvDesc->group, 0); + + my_log(LOG_DEBUG, 0, "Sent membership query from %s to %s. Delay: %d", + inetFmt(gvDesc->vifAddr,s1), inetFmt(gvDesc->group,s2), + conf->lastMemberQueryInterval); + + // Set timeout for next round... + timer_setTimer(conf->lastMemberQueryInterval, sendGroupSpecificMemberQuery, gvDesc); + +} + + +/** +* Sends a general membership query on downstream VIFs +*/ +void sendGeneralMembershipQuery() { + struct Config *conf = getCommonConfig(); + struct IfDesc *Dp; + int Ix; + + // Loop through all downstream vifs... + for ( Ix = 0; (Dp = getIfByIx(Ix)); Ix++ ) { + if ( Dp->InAdr.s_addr && ! (Dp->Flags & IFF_LOOPBACK) ) { + if(Dp->state == IF_STATE_DOWNSTREAM) { + // Send the membership query... + sendIgmp(Dp->InAdr.s_addr, allhosts_group, + IGMP_MEMBERSHIP_QUERY, + conf->queryResponseInterval * IGMP_TIMER_SCALE, 0, 0); + + my_log(LOG_DEBUG, 0, + "Sent membership query from %s to %s. Delay: %d", + inetFmt(Dp->InAdr.s_addr,s1), + inetFmt(allhosts_group,s2), + conf->queryResponseInterval); + } + } + } + + // Install timer for aging active routes. + timer_setTimer(conf->queryResponseInterval, ageActiveRoutes, NULL); + + // Install timer for next general query... + if(conf->startupQueryCount>0) { + // Use quick timer... + timer_setTimer(conf->startupQueryInterval, sendGeneralMembershipQuery, NULL); + // Decrease startup counter... + conf->startupQueryCount--; + } + else { + // Use slow timer... + timer_setTimer(conf->queryInterval, sendGeneralMembershipQuery, NULL); + } + + +} + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/request.o new file mode 100644 index 0000000000000000000000000000000000000000..8c28a703f0d3be39861d222469589f5b8ab1f449 GIT binary patch literal 13448 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 P1n&WE7rayO6~X@loAv<} literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.c new file mode 100644 index 0000000..f0701a8 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.c @@ -0,0 +1,662 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* rttable.c +* +* Updates the routingtable according to +* recieved request. +*/ + +#include "igmpproxy.h" + +/** +* Routing table structure definition. Double linked list... +*/ +struct RouteTable { + struct RouteTable *nextroute; // Pointer to the next group in line. + struct RouteTable *prevroute; // Pointer to the previous group in line. + uint32_t group; // The group to route + uint32_t originAddr; // The origin adress (only set on activated routes) + uint32_t vifBits; // Bits representing recieving VIFs. + + // Keeps the upstream membership state... + short upstrState; // Upstream membership state. + + // These parameters contain aging details. + uint32_t ageVifBits; // Bits representing aging VIFs. + int ageValue; // Downcounter for death. + int ageActivity; // Records any acitivity that notes there are still listeners. +}; + + +// Keeper for the routing table... +static struct RouteTable *routing_table; + +// Prototypes +void logRouteTable(char *header); +int internAgeRoute(struct RouteTable* croute); +int internUpdateKernelRoute(struct RouteTable *route, int activate); + +// Socket for sending join or leave requests. +int mcGroupSock = 0; + + +/** +* Function for retrieving the Multicast Group socket. +*/ +int getMcGroupSock() { + if( ! mcGroupSock ) { + mcGroupSock = openUdpSocket( INADDR_ANY, 0 );; + } + return mcGroupSock; +} + +/** +* Initializes the routing table. +*/ +void initRouteTable() { + unsigned Ix; + struct IfDesc *Dp; + + // Clear routing table... + routing_table = NULL; + + // Join the all routers group on downstream vifs... + for ( Ix = 0; (Dp = getIfByIx(Ix)); Ix++ ) { + // If this is a downstream vif, we should join the All routers group... + if( Dp->InAdr.s_addr && ! (Dp->Flags & IFF_LOOPBACK) && Dp->state == IF_STATE_DOWNSTREAM) { + my_log(LOG_DEBUG, 0, "Joining all-routers group %s on vif %s", + inetFmt(allrouters_group,s1),inetFmt(Dp->InAdr.s_addr,s2)); + + //k_join(allrouters_group, Dp->InAdr.s_addr); + joinMcGroup( getMcGroupSock(), Dp, allrouters_group ); + } + } +} + +/** +* Internal function to send join or leave requests for +* a specified route upstream... +*/ +void sendJoinLeaveUpstream(struct RouteTable* route, int join) { + struct IfDesc* upstrIf; + + // Get the upstream VIF... + upstrIf = getIfByIx( upStreamVif ); + if(upstrIf == NULL) { + my_log(LOG_ERR, 0 ,"FATAL: Unable to get Upstream IF."); + } + + // Send join or leave request... + if(join) { + + // Only join a group if there are listeners downstream... + if(route->vifBits > 0) { + my_log(LOG_DEBUG, 0, "Joining group %s upstream on IF address %s", + inetFmt(route->group, s1), + inetFmt(upstrIf->InAdr.s_addr, s2)); + + //k_join(route->group, upstrIf->InAdr.s_addr); + joinMcGroup( getMcGroupSock(), upstrIf, route->group ); + + route->upstrState = ROUTESTATE_JOINED; + } else { + my_log(LOG_DEBUG, 0, "No downstream listeners for group %s. No join sent.", + inetFmt(route->group, s1)); + } + + } else { + // Only leave if group is not left already... + if(route->upstrState != ROUTESTATE_NOTJOINED) { + my_log(LOG_DEBUG, 0, "Leaving group %s upstream on IF address %s", + inetFmt(route->group, s1), + inetFmt(upstrIf->InAdr.s_addr, s2)); + + //k_leave(route->group, upstrIf->InAdr.s_addr); + leaveMcGroup( getMcGroupSock(), upstrIf, route->group ); + + route->upstrState = ROUTESTATE_NOTJOINED; + } + } +} + +/** +* Clear all routes from routing table, and alerts Leaves upstream. +*/ +void clearAllRoutes() { + struct RouteTable *croute, *remainroute; + + // Loop through all routes... + for(croute = routing_table; croute; croute = remainroute) { + + remainroute = croute->nextroute; + + // Log the cleanup in debugmode... + my_log(LOG_DEBUG, 0, "Removing route entry for %s", + inetFmt(croute->group, s1)); + + // Uninstall current route + if(!internUpdateKernelRoute(croute, 0)) { + my_log(LOG_WARNING, 0, "The removal from Kernel failed."); + } + + // Send Leave message upstream. + sendJoinLeaveUpstream(croute, 0); + + // Clear memory, and set pointer to next route... + free(croute); + } + routing_table = NULL; + + // Send a notice that the routing table is empty... + my_log(LOG_NOTICE, 0, "All routes removed. Routing table is empty."); +} + +/** +* Private access function to find a route from a given +* Route Descriptor. +*/ +struct RouteTable *findRoute(uint32_t group) { + struct RouteTable* croute; + + for(croute = routing_table; croute; croute = croute->nextroute) { + if(croute->group == group) { + return croute; + } + } + + return NULL; +} + +/** +* Adds a specified route to the routingtable. +* If the route already exists, the existing route +* is updated... +*/ +int insertRoute(uint32_t group, int ifx) { + + struct Config *conf = getCommonConfig(); + struct RouteTable* croute; + + // Sanitycheck the group adress... + if( ! IN_MULTICAST( ntohl(group) )) { + my_log(LOG_WARNING, 0, "The group address %s is not a valid Multicast group. Table insert failed.", + inetFmt(group, s1)); + return 0; + } + + // Santiycheck the VIF index... + //if(ifx < 0 || ifx >= MAX_MC_VIFS) { + if(ifx >= MAX_MC_VIFS) { + my_log(LOG_WARNING, 0, "The VIF Ix %d is out of range (0-%d). Table insert failed.",ifx,MAX_MC_VIFS); + return 0; + } + + // Try to find an existing route for this group... + croute = findRoute(group); + if(croute==NULL) { + struct RouteTable* newroute; + + my_log(LOG_DEBUG, 0, "No existing route for %s. Create new.", + inetFmt(group, s1)); + + + // Create and initialize the new route table entry.. + newroute = (struct RouteTable*)malloc(sizeof(struct RouteTable)); + // Insert the route desc and clear all pointers... + newroute->group = group; + newroute->originAddr = 0; + newroute->nextroute = NULL; + newroute->prevroute = NULL; + + // The group is not joined initially. + newroute->upstrState = ROUTESTATE_NOTJOINED; + + // The route is not active yet, so the age is unimportant. + newroute->ageValue = conf->robustnessValue; + newroute->ageActivity = 0; + + BIT_ZERO(newroute->ageVifBits); // Initially we assume no listeners. + + // Set the listener flag... + BIT_ZERO(newroute->vifBits); // Initially no listeners... + if(ifx >= 0) { + BIT_SET(newroute->vifBits, ifx); + } + + // Check if there is a table already.... + if(routing_table == NULL) { + // No location set, so insert in on the table top. + routing_table = newroute; + my_log(LOG_DEBUG, 0, "No routes in table. Insert at beginning."); + } else { + + my_log(LOG_DEBUG, 0, "Found existing routes. Find insert location."); + + // Check if the route could be inserted at the beginning... + if(routing_table->group > group) { + my_log(LOG_DEBUG, 0, "Inserting at beginning, before route %s",inetFmt(routing_table->group,s1)); + + // Insert at beginning... + newroute->nextroute = routing_table; + newroute->prevroute = NULL; + routing_table = newroute; + + // If the route has a next node, the previous pointer must be updated. + if(newroute->nextroute != NULL) { + newroute->nextroute->prevroute = newroute; + } + + } else { + + // Find the location which is closest to the route. + for( croute = routing_table; croute->nextroute != NULL; croute = croute->nextroute ) { + // Find insert position. + if(croute->nextroute->group > group) { + break; + } + } + + my_log(LOG_DEBUG, 0, "Inserting after route %s",inetFmt(croute->group,s1)); + + // Insert after current... + newroute->nextroute = croute->nextroute; + newroute->prevroute = croute; + if(croute->nextroute != NULL) { + croute->nextroute->prevroute = newroute; + } + croute->nextroute = newroute; + } + } + + // Set the new route as the current... + croute = newroute; + + // Log the cleanup in debugmode... + my_log(LOG_INFO, 0, "Inserted route table entry for %s on VIF #%d", + inetFmt(croute->group, s1),ifx); + + } else if(ifx >= 0) { + + // The route exists already, so just update it. + BIT_SET(croute->vifBits, ifx); + + // Register the VIF activity for the aging routine + BIT_SET(croute->ageVifBits, ifx); + + // Log the cleanup in debugmode... + my_log(LOG_INFO, 0, "Updated route entry for %s on VIF #%d", + inetFmt(croute->group, s1), ifx); + + // If the route is active, it must be reloaded into the Kernel.. + if(croute->originAddr != 0) { + + // Update route in kernel... + if(!internUpdateKernelRoute(croute, 1)) { + my_log(LOG_WARNING, 0, "The insertion into Kernel failed."); + return 0; + } + } + } + + // Send join message upstream, if the route has no joined flag... + if(croute->upstrState != ROUTESTATE_JOINED) { + // Send Join request upstream + sendJoinLeaveUpstream(croute, 1); + } + + logRouteTable("Insert Route"); + + return 1; +} + +/** +* Activates a passive group. If the group is already +* activated, it's reinstalled in the kernel. If +* the route is activated, no originAddr is needed. +*/ +int activateRoute(uint32_t group, uint32_t originAddr) { + struct RouteTable* croute; + int result = 0; + + // Find the requested route. + croute = findRoute(group); + if(croute == NULL) { + my_log(LOG_DEBUG, 0, + "No table entry for %s [From: %s]. Inserting route.", + inetFmt(group, s1),inetFmt(originAddr, s2)); + + // Insert route, but no interfaces have yet requested it downstream. + insertRoute(group, -1); + + // Retrieve the route from table... + croute = findRoute(group); + } + + if(croute != NULL) { + // If the origin address is set, update the route data. + if(originAddr > 0) { + if(croute->originAddr > 0 && croute->originAddr!=originAddr) { + my_log(LOG_WARNING, 0, "The origin for route %s changed from %s to %s", + inetFmt(croute->group, s1), + inetFmt(croute->originAddr, s2), + inetFmt(originAddr, s3)); + } + croute->originAddr = originAddr; + } + + // Only update kernel table if there are listeners ! + if(croute->vifBits > 0) { + result = internUpdateKernelRoute(croute, 1); + } + } + logRouteTable("Activate Route"); + + return result; +} + + +/** +* This function loops through all routes, and updates the age +* of any active routes. +*/ +void ageActiveRoutes() { + struct RouteTable *croute, *nroute; + + my_log(LOG_DEBUG, 0, "Aging routes in table."); + + // Scan all routes... + for( croute = routing_table; croute != NULL; croute = nroute ) { + + // Keep the next route (since current route may be removed)... + nroute = croute->nextroute; + + // Run the aging round algorithm. + if(croute->upstrState != ROUTESTATE_CHECK_LAST_MEMBER) { + // Only age routes if Last member probe is not active... + internAgeRoute(croute); + } + } + logRouteTable("Age active routes"); +} + +/** +* Should be called when a leave message is recieved, to +* mark a route for the last member probe state. +*/ +void setRouteLastMemberMode(uint32_t group) { + struct Config *conf = getCommonConfig(); + struct RouteTable *croute; + + croute = findRoute(group); + if(croute!=NULL) { + // Check for fast leave mode... + if(croute->upstrState == ROUTESTATE_JOINED && conf->fastUpstreamLeave) { + // Send a leave message right away.. + sendJoinLeaveUpstream(croute, 0); + } + // Set the routingstate to Last member check... + croute->upstrState = ROUTESTATE_CHECK_LAST_MEMBER; + // Set the count value for expiring... (-1 since first aging) + croute->ageValue = conf->lastMemberQueryCount; + } +} + + +/** +* Ages groups in the last member check state. If the +* route is not found, or not in this state, 0 is returned. +*/ +int lastMemberGroupAge(uint32_t group) { + struct RouteTable *croute; + + croute = findRoute(group); + if(croute!=NULL) { + if(croute->upstrState == ROUTESTATE_CHECK_LAST_MEMBER) { + return !internAgeRoute(croute); + } else { + return 0; + } + } + return 0; +} + +/** +* Remove a specified route. Returns 1 on success, +* and 0 if route was not found. +*/ +int removeRoute(struct RouteTable* croute) { + struct Config *conf = getCommonConfig(); + int result = 1; + + // If croute is null, no routes was found. + if(croute==NULL) { + return 0; + } + + // Log the cleanup in debugmode... + my_log(LOG_DEBUG, 0, "Removed route entry for %s from table.", + inetFmt(croute->group, s1)); + + //BIT_ZERO(croute->vifBits); + + // Uninstall current route from kernel + if(!internUpdateKernelRoute(croute, 0)) { + my_log(LOG_WARNING, 0, "The removal from Kernel failed."); + result = 0; + } + + // Send Leave request upstream if group is joined + if(croute->upstrState == ROUTESTATE_JOINED || + (croute->upstrState == ROUTESTATE_CHECK_LAST_MEMBER && !conf->fastUpstreamLeave)) + { + sendJoinLeaveUpstream(croute, 0); + } + + // Update pointers... + if(croute->prevroute == NULL) { + // Topmost node... + if(croute->nextroute != NULL) { + croute->nextroute->prevroute = NULL; + } + routing_table = croute->nextroute; + + } else { + croute->prevroute->nextroute = croute->nextroute; + if(croute->nextroute != NULL) { + croute->nextroute->prevroute = croute->prevroute; + } + } + // Free the memory, and set the route to NULL... + free(croute); + croute = NULL; + + logRouteTable("Remove route"); + + return result; +} + + +/** +* Ages a specific route +*/ +int internAgeRoute(struct RouteTable* croute) { + struct Config *conf = getCommonConfig(); + int result = 0; + + // Drop age by 1. + croute->ageValue--; + + // Check if there has been any activity... + if( croute->ageVifBits > 0 && croute->ageActivity == 0 ) { + // There was some activity, check if all registered vifs responded. + if(croute->vifBits == croute->ageVifBits) { + // Everything is in perfect order, so we just update the route age. + croute->ageValue = conf->robustnessValue; + //croute->ageActivity = 0; + } else { + // One or more VIF has not gotten any response. + croute->ageActivity++; + + // Update the actual bits for the route... + croute->vifBits = croute->ageVifBits; + } + } + // Check if there have been activity in aging process... + else if( croute->ageActivity > 0 ) { + + // If the bits are different in this round, we must + if(croute->vifBits != croute->ageVifBits) { + // Or the bits together to insure we don't lose any listeners. + croute->vifBits |= croute->ageVifBits; + + // Register changes in this round as well.. + croute->ageActivity++; + } + } + + // If the aging counter has reached zero, its time for updating... + if(croute->ageValue == 0) { + // Check for activity in the aging process, + if(croute->ageActivity>0) { + + my_log(LOG_DEBUG, 0, "Updating route after aging : %s", + inetFmt(croute->group,s1)); + + // Just update the routing settings in kernel... + internUpdateKernelRoute(croute, 1); + + // We append the activity counter to the age, and continue... + croute->ageValue = croute->ageActivity; + croute->ageActivity = 0; + } else { + + my_log(LOG_DEBUG, 0, "Removing group %s. Died of old age.", + inetFmt(croute->group,s1)); + + // No activity was registered within the timelimit, so remove the route. + removeRoute(croute); + } + // Tell that the route was updated... + result = 1; + } + + // The aging vif bits must be reset for each round... + BIT_ZERO(croute->ageVifBits); + + return result; +} + +/** +* Updates the Kernel routing table. If activate is 1, the route +* is (re-)activated. If activate is false, the route is removed. +*/ +int internUpdateKernelRoute(struct RouteTable *route, int activate) { + struct MRouteDesc mrDesc; + struct IfDesc *Dp; + unsigned Ix; + + if(route->originAddr>0) { + + // Build route descriptor from table entry... + // Set the source address and group address... + mrDesc.McAdr.s_addr = route->group; + mrDesc.OriginAdr.s_addr = route->originAddr; + + // clear output interfaces + memset( mrDesc.TtlVc, 0, sizeof( mrDesc.TtlVc ) ); + + my_log(LOG_DEBUG, 0, "Vif bits : 0x%08x", route->vifBits); + + // Set the TTL's for the route descriptor... + for ( Ix = 0; (Dp = getIfByIx(Ix)); Ix++ ) { + if(Dp->state == IF_STATE_UPSTREAM) { + mrDesc.InVif = Dp->index; + } + else if(BIT_TST(route->vifBits, Dp->index)) { + my_log(LOG_DEBUG, 0, "Setting TTL for Vif %d to %d", Dp->index, Dp->threshold); + mrDesc.TtlVc[ Dp->index ] = Dp->threshold; + } + } + + // Do the actual Kernel route update... + if(activate) { + // Add route in kernel... + addMRoute( &mrDesc ); + + } else { + // Delete the route from Kernel... + delMRoute( &mrDesc ); + } + + } else { + my_log(LOG_NOTICE, 0, "Route is not active. No kernel updates done."); + } + + return 1; +} + +/** +* Debug function that writes the routing table entries +* to the log. +*/ +void logRouteTable(char *header) { + struct RouteTable* croute = routing_table; + unsigned rcount = 0; + + my_log(LOG_DEBUG, 0, ""); + my_log(LOG_DEBUG, 0, "Current routing table (%s):", header); + my_log(LOG_DEBUG, 0, "-----------------------------------------------------"); + if(croute==NULL) { + my_log(LOG_DEBUG, 0, "No routes in table..."); + } else { + do { + /* + my_log(LOG_DEBUG, 0, "#%d: Src: %s, Dst: %s, Age:%d, St: %s, Prev: 0x%08x, T: 0x%08x, Next: 0x%08x", + rcount, inetFmt(croute->originAddr, s1), inetFmt(croute->group, s2), + croute->ageValue,(croute->originAddr>0?"A":"I"), + croute->prevroute, croute, croute->nextroute); + */ + my_log(LOG_DEBUG, 0, "#%d: Src: %s, Dst: %s, Age:%d, St: %s, OutVifs: 0x%08x", + rcount, inetFmt(croute->originAddr, s1), inetFmt(croute->group, s2), + croute->ageValue,(croute->originAddr>0?"A":"I"), + croute->vifBits); + + croute = croute->nextroute; + + rcount++; + } while ( croute != NULL ); + } + + my_log(LOG_DEBUG, 0, "-----------------------------------------------------"); +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/rttable.o new file mode 100644 index 0000000000000000000000000000000000000000..467cfe8e375488bc6ba6d11526037a51785e2d9c GIT binary patch literal 25624 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 h@R%U~=Md$)1obyppn2a +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ + +#include "igmpproxy.h" + +int LogLevel = LOG_WARNING; +bool Log2Stderr = false; + +void my_log( int Severity, int Errno, const char *FmtSt, ... ) +{ + char LogMsg[ 128 ]; + + va_list ArgPt; + unsigned Ln; + va_start( ArgPt, FmtSt ); + Ln = vsnprintf( LogMsg, sizeof( LogMsg ), FmtSt, ArgPt ); + if( Errno > 0 ) + snprintf( LogMsg + Ln, sizeof( LogMsg ) - Ln, + "; Errno(%d): %s", Errno, strerror(Errno) ); + va_end( ArgPt ); + + if (Severity <= LogLevel) { + if (Log2Stderr) + fprintf(stderr, "%s\n", LogMsg); + else { + syslog(Severity, "%s", LogMsg); + } + } + + if( Severity <= LOG_ERR ) + exit( -1 ); +} diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/syslog.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/syslog.o new file mode 100644 index 0000000000000000000000000000000000000000..1a9d31dbf348036b0f751db0caeab2f89393f5d9 GIT binary patch literal 5824 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 RPP}iq9zHD1x_}n={{Y+5TT%c3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.c b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.c new file mode 100644 index 0000000..150130e --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.c @@ -0,0 +1,65 @@ +/* +** igmpproxy - IGMP proxy based multicast router +** Copyright (C) 2005 Johnny Egeland +** +** 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +** +**---------------------------------------------------------------------------- +** +** This software is derived work from the following software. The original +** source code has been modified from it's original state by the author +** of igmpproxy. +** +** smcroute 0.92 - Copyright (C) 2001 Carsten Schill +** - Licensed under the GNU General Public License, version 2 +** +** mrouted 3.9-beta3 - COPYRIGHT 1989 by The Board of Trustees of +** Leland Stanford Junior University. +** - Original license can be found in the Stanford.txt file. +** +*/ +/** +* udpsock.c contains function for creating a UDP socket. +* +*/ + +#include "igmpproxy.h" + +/** +* Creates and connects a simple UDP socket to the target +* 'PeerInAdr':'PeerPort' +* +* @param PeerInAdr - The address to connect to +* @param PeerPort - The port to connect to +* +*/ +int openUdpSocket( uint32_t PeerInAdr, uint16_t PeerPort ) { + int Sock; + struct sockaddr_in SockAdr; + + if( (Sock = socket( AF_INET, SOCK_RAW, IPPROTO_IGMP )) < 0 ) + my_log( LOG_ERR, errno, "UDP socket open" ); + + memset( &SockAdr, 0, sizeof( SockAdr ) ); + SockAdr.sin_family = AF_INET; + SockAdr.sin_port = htons(PeerPort); + SockAdr.sin_addr.s_addr = htonl(PeerInAdr); + + if( bind( Sock, (struct sockaddr *)&SockAdr, sizeof( SockAdr ) ) ) + my_log( LOG_ERR, errno, "UDP socket bind" ); + + return Sock; +} + diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.o b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/src/udpsock.o new file mode 100644 index 0000000000000000000000000000000000000000..c3d35d9187c973597774a3b91b7064f053d7b525 GIT binary patch literal 7220 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 P0~v3G`ve#RZvp=oE22!U literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/stamp-h1 b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/stamp-h1 new file mode 100644 index 0000000..4547fe1 --- /dev/null +++ b/NONE-CKUBU2/src/igmpproxy/igmpproxy-0.1/stamp-h1 @@ -0,0 +1 @@ +timestamp for config.h diff --git a/NONE-CKUBU2/src/ipw2100-fw/LICENSE b/NONE-CKUBU2/src/ipw2100-fw/LICENSE new file mode 100644 index 0000000..a3e83f5 --- /dev/null +++ b/NONE-CKUBU2/src/ipw2100-fw/LICENSE @@ -0,0 +1,207 @@ + TERMS AND CONDITIONS + IMPORTANT - PLEASE READ BEFORE INSTALLING OR USING THIS INTEL(C) SOFTWARE + +Do not use or load this firmware (the "Software") until you have carefully read +the following terms and conditions. By loading or using the Software, you agree +to the terms of this Agreement. If you do not wish to so agree, do not install +or use the Software. + +LICENSEES: + +Please note: + +* If you are an End-User, only Exhibit A, the SOFTWARE LICENSE AGREEMENT, + applies. +* If you are an Original Equipment Manufacturer (OEM), Independent Hardware + Vendor (IHV), or Independent Software Vendor (ISV), this complete Agreement + applies + +-------------------------------------------------------------------------------- + +For OEMs, IHVs, and ISVs: + +LICENSE. This Software is licensed for use only in conjunction with Intel +component products. Use of the Software in conjunction with non-Intel component +products is not licensed hereunder. Subject to the terms of this Agreement, +Intel grants to you a nonexclusive, nontransferable, worldwide, fully paid-up +license under Intel's copyrights to: (i) copy the Software internally for your +own development and maintenance purposes; (ii) copy and distribute the Software +to your end-users, but only under a license agreement with terms at least as +restrictive as those contained in Intel's Final, Single User License Agreement, +attached as Exhibit A; and (iii) modify, copy and distribute the end-user +documentation which may accompany the Software, but only in association with +the Software. + +If you are not the final manufacturer or vendor of a computer system or software +program incorporating the Software, then you may transfer a copy of the +Software, including any related documentation (modified or unmodified) to your +recipient for use in accordance with the terms of this Agreement, provided such +recipient agrees to be fully bound by the terms hereof. You shall not otherwise +assign, sublicense, lease, or in any other way transfer or disclose Software to +any third party. You may not, nor may you assist any other person or entity to +modify, translate, convert to another programming language, decompile, reverse +engineer, or disassemble any portion of the Software or otherwise attempt to +derive source code from any object code modules of the Software or any internal +data files generated by the Software. Your rights to redistribute the Software +shall be contingent upon your installation of this Agreement in its entirety in +the same directory as the Software. + +CONFIDENTIALITY. If you wish to have a third party consultant or subcontractor +("Contractor") perform work on your behalf which involves access to or use of +Software, you shall obtain a written confidentiality agreement from the +Contractor which contains provisions with respect to access to or use of the +Software no less restrictive than those set forth in this Agreement and +excluding any distribution rights, and use for any other purpose. Except as +expressly provided herein, you shall not disclose the terms or existence of +this Agreement or use Intel's name in any publications, advertisements, or +other announcements without Intel's prior written consent. You do not have any +rights to use any Intel trademarks or logos. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Software and accompanying materials, if +any, are owned by Intel or its suppliers and licensors and may be protected by +copyright, trademark, patent and trade secret law and international treaties. +Any rights, express or implied, in the intellectual property embodied in the +foregoing, other than those specified in this Agreement, are reserved by Intel +and its suppliers and licensors or otherwise as set forth in any applicable +open source license agreement. You will keep the Software free of liens, +attachments, and other encumbrances. You agree not to remove any proprietary +notices and/or any labels from the Software and accompanying materials without +prior written approval by Intel + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS AND LICENSORS +BE LIABLE FOR ANY DAMAGES WHATSOEVER FROM ANY CAUSE OF ACTION OF ANY KIND +(INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, OR LOST +INFORMATION) ARISING OUT OF THE USE, MODIFICATION, OR INABILITY TO USE THE +INTEL SOFTWARE, OR OTHERWISE, NOR FOR PUNITIVE, INCIDENTAL, CONSEQUENTIAL, OR +SPECIAL DAMAGES OF ANY KIND, EVEN IF INTEL OR ITS SUPPLIERS AND LICENSORS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS PROHIBIT +EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES, CONSEQUENTIAL OR +INCIDENTAL DAMAGES, SO CERTAIN LIMITATIONS MAY NOT APPLY. YOU MAY ALSO HAVE +OTHER LEGAL RIGHTS THAT VARY BETWEEN JURISDICTIONS. + +EXCLUSION OF WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS" AND POSSIBLY WITH +FAULTS. UNLESS EXPRESSLY AGREED OTHERWISE, INTEL AND ITS SUPPLIERS AND +LICENSORS DISCLAIM ANY AND ALL WARRANTIES AND GUARANTEES, EXPRESS, IMPLIED OR +OTHERWISE, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Intel does not warrant +or assume responsibility for the accuracy or completeness of any information, +text, graphics, links or other items contained within the Software. You assume +all liability, financial or otherwise, associated with Your use or disposition +of the Software. + +APPLICABLE LAW. Claims arising under this Agreement shall be governed by the +laws of State of California], excluding its principles of conflict of laws and +the United Nations Convention on Contracts for the Sale of Goods. + +WAIVER AND AMENDMENT. No modification, amendment or waiver of any provision of +this Agreement shall be effective unless in writing and signed by an officer of +Intel. No failure or delay in exercising any right, power, or remedy under +this Agreement shall operate as a waiver of any such right, power or remedy. +Without limiting the foregoing, terms and conditions on any purchase orders or +similar materials submitted by you to Intel, and any terms contained in IntelÂ’s +standard acknowledgment form that are in conflict with these terms, shall be of +no force or effect. + +SEVERABILITY. If any provision of this Agreement is held by a court of +competent jurisdiction to be contrary to law, such provision shall be changed +and interpreted so as to best accomplish the objectives of the original +provision to the fullest extent allowed by law and the remaining provisions of +this Agreement shall remain in full force and effect. + +EXPORT RESTRICTIONS. Each party acknowledges that the Software is subject to +applicable import and export regulations of the United States and of the +countries in which each party transacts business, specifically including U.S. +Export Administration Act and Export Administration Regulations. Each party +shall comply with such laws and regulations, as well as all other laws and +regulations applicable to the Software. Without limiting the generality of the +foregoing, each party agrees that it will not export, re-export, transfer or +divert any of the Software or the direct programs thereof to any restricted +place or party in accordance with U.S. export regulations. Note that Software +containing encryption may be subject to additional restrictions. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + +TERMINATION OF THE AGREEMENT. Intel may terminate this Agreement if you violate +its terms. Upon termination, you will immediately destroy the Software or +return all copies of the Software to Intel. + +-------------------------------------------------------------------------------- + +EXHIBIT "A" + +SOFTWARE LICENSE AGREEMENT (Final, Single User) + +IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING. + +Do not use or load this firmware image (the "Software") until you have carefully +read the following terms and conditions. By loading or using the Software, you +agree to the terms of this Agreement. If you do not wish to so agree, do not +install or use the Software. + +LICENSE. You may copy and use the Software, subject to these conditions: +1. This Software is licensed for use only in conjunction with Intel component + products. Use of the Software in conjunction with non-Intel component + products is not licensed hereunder. +2. You may not copy, modify, rent, sell, distribute or transfer any part of the + Software except as provided in this Agreement, and you agree to prevent + unauthorized copying of the Software. +3. You may not reverse engineer, decompile, or disassemble the Software. +4. You may not sublicense the Software. +5. The Software may contain the software or other property of third party + suppliers. + +OWNERSHIP OF SOFTWARE AND COPYRIGHTS. Title to all copies of the Software +remains with Intel or its suppliers. The Software is copyrighted and protected +by the laws of the United States and other countries, and international treaty +provisions. You may not remove any copyright notices from the Software. Intel +may make changes to the Software, or items referenced therein, at any time +without notice, but is not obligated to support or update the Software. Except +as otherwise expressly provided, Intel grants no express or implied right under +Intel patents, copyrights, trademarks, or other intellectual property rights. +You may transfer the Software only if a copy of this license accompanies the +Software and the recipient agrees to be fully bound by these terms. + +EXCLUSION OF OTHER WARRANTIES EXCEPT AS PROVIDED ABOVE, THE SOFTWARE IS PROVIDED +"AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING +WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR +PURPOSE. Intel does not warrant or assume responsibility for the accuracy or +completeness of any information, text, graphics, links or other items contained +within the Software. + +LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE FOR +ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS +INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE OF OR INABILITY TO +USE THE SOFTWARE, EVEN IF INTEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. SOME JURISDICTIONS PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR +IMPLIED WARRANTIES OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE +LIMITATION MAY NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY +BETWEEN JURISDICTIONS. + +TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement at any time if +you violate its terms. Upon termination, you will immediately destroy the +Software. + +APPLICABLE LAWS. Claims arising under this Agreement shall be governed by the +laws of California, excluding its principles of conflict of laws and the United +Nations Convention on Contracts for the Sale of Goods. You may not export the +Software in violation of applicable export laws and regulations. Intel is not +obligated under any other agreements unless they are in writing and signed by +an authorized representative +of Intel. + +GOVERNMENT RESTRICTED RIGHTS. The Software is provided with "RESTRICTED RIGHTS." +Use, duplication, or disclosure by the Government is subject to restrictions as +set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use +of the Software by the Government constitutes acknowledgment of Intel's +proprietary rights therein. Contractor or Manufacturer is Intel Corporation, +2200 Mission College Blvd., Santa Clara, CA 95052. + + + + + diff --git a/NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3-i.fw b/NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3-i.fw new file mode 100644 index 0000000000000000000000000000000000000000..85c9ca568c4a60269514089ce918e3fd88772f75 GIT binary patch literal 201138 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%0A)C2DBYlxl=>)zSIQ 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

tcu6Eh14BhwT0t%) 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 Ie7e&A54soMlmGw# literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3.fw b/NONE-CKUBU2/src/ipw2100-fw/ipw2100-1.3.fw new file mode 100644 index 0000000000000000000000000000000000000000..be2a69ca6823f5a0388709f05e748bd387522557 GIT binary patch literal 209190 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU2/src/ipw2100-fw/ipw2100-fw-1.3.tgz b/NONE-CKUBU2/src/ipw2100-fw/ipw2100-fw-1.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ad30eee8f91393db9129f6ba0d4a9615d4048b45 GIT binary patch literal 248471 zcmV)KK)SyliwFQMF<3zW1MFK}Y#Ud09*J^FUE9hyNDDs%&|M=yUuat_-l5CWU^YU_O zq1GtLa<$niRx0J{6j&?;4C=1$6HZK1VNY?OqUcctS7vhSPH^`z|@ z9T{v|zFfDw?zZ8Xawga`<%y=d9?;hlCuQFWEL-lleYt6DnX-+$>wVkak)COE1W~WM zw(V|P&V~$3uj@<0>BzS0bgaN~9X~HG?=T}G0MEY9lz1;&OMUT5Nt+Qzo!Z%Vx4yXy5^^uTi9XSOYvpEuXW}0`Uo^Z9Nsnc( z;uiKbQ(n9ZB792IMY~L>nncBFY`fi_Z3bqd&qPRU{nRu55n=%XU@JbhvUnB$l4C#~ z|6*){yljzVvDEl%TW!pQsvw;An9bli5I)-;qGZCdS3s15J5$%hPQXDGMDI)KcE@4Icwh#gQ2BqoU< zOeG3(K2EQkD!SH8`*WzefGs6H{bK!q-Z6~!L1+%-Jm#f&dzlp$L zb-N(&P*h9-OIaIE4vVjaKAU6bG&$pvtk^q~%k8w%@DPsEw#i-N=nGt-{KE1&h-NR? zQH)95U`si`<1cJ_aHbfD*Y6>epi-A2E3kqcS}yWd=1T@3$91+$k8_gYgl{U_cga?^ z;cWDc4Jwf)`HMxV#zXjf*sbZH9+_O_SboT0c9D!&3OEhhbU2}s_eJ_b?85PS#9biL zDQbO~xlJ+Kff+ovt9GRFCf~#!`nKthT9-(plqEVwU?2#Hbi;IzCCS~^2E&Z?>B%?` zVrK`XDP`?7l}(@-@|iwzze-+V<6tB^PJ100-U0(Mgl7gMB!{qXbWP|DP8hh}j!IYq z9S0h^h4MW5f^xA^Zmq_BOw_<|Yh|Q8gv9gvc7W2s@!Vf)bDw_k;oKs4fD0HV%4W^Pz5%!doQe?BLo`AH;4@c9w^ckA=pG0rD}q2ataA( zkHgkN8W&t?<7^c>1({cQi)u@V^LprcVeqK(mq)p1n>{K@5{va9hEFv)%084xEGMlx zN+fX(NTo2u?+vgwDZOEnVo2C<`%zhQ$fd$O)8iz>K1t$sD9#ad^qS8hE0oBF;~>+u z)dSYFi{cZl*z+v1Okz);JL=V>omO55h9U_hl8J7qRtEO%m|erW?yK=(!$o^5YAe-J zqq$hF%i2QH6RSa{zS<~XS!^})Nr02S<7!Ek=^~^(_!Tx|ty8MZaREewq9R@Kro0Q8 z{62TAo|-dMa(2USltU5OFirsX;+I9-ALSD1Q9Zyi?0NVu{HTqHMw;B_n_>1Ll^e8e z6CcsaOHrhn7dlSp4lG%hgzDs!7pjKKwjo3xuR|V$D1rt_6^UE*FXZI#ICH~=3UZ;- zr5zg)qDtsK$5!eAYt!3GX-Kf(k5SQJ#`Xtehm6d_K%3f70g0U`hwtm!l-F!q@b>Gb z*&EE?>mVWrhXiofu=5IimE=)7MHuwEYaSJQsFl~_ij!|w%Eim&Fo9QPwI)kf zk<(>!5#zU-wrK({x0w!zi&RPyqdT6h%K73_@k*&FR~Cz{ zW(^BAj&P4=>GzgZ zoupSqvtF9R=U7WA4dht+vb^v_nwN`3(mq}&&R>Nn^U>DowPv#%ZiCX-^4wy?4StD@ zES2Q%EJG#pWi~>Sl)8vFTB7s@EYM`bG~@xE!n-Xmkx26r8fg@*wq*ULTq>?YlPy`qR#z!{YRi1DSiuX6#j7R3Dwmbg6|ANbFg9Ck$*aZ2 zs=Qokt&k=LwuRi5-q1oySa2Xs#hJa#I=BjH=jDkae5!eZm911+S!I6|3&rIM<^APq zg&eQ+M!kXGc*-EjeA+9N0cnYS78HpE=gZBxO0ld$gNP~W5-IuCmE|IREs^pt>Og$i1tegnU8>kX!{(ES|kaum%xt`>I6bZBIr^abYhhgDLO{1%78i7oL z`Wo9Zlt?)qNgWKb_CQI=#q({rq-x4TtPw2{`YFZ)#Zb$i7n75Md>P4wQe&mKl9zL~ zVG$_cSqvB|1YxLWihKDD)C$ju=K_H;&WdSb9_3;*hprX+aV+BxsBT9+AyrG%0PLj~ zjw00OqTU5u!Dtm~B1za~$D(~zRU0PfXxwttnBd5$_4Q+OH4U2?Uvb@z&!hcHu}sOG z9TyHWPfnAURaZd|VSfi5VrQMGBiuI7?s}1l<2IVQ_JdSmuCJS_OYS?|IK!}1;8Y8Y zaT#;1Qj|gKfH5;rSQP|?KT6a<{{&5%t>agh0<| z*{BC1YoPHkhBihc{J@gQibzWT`NW}QmxY{)R~N;T4%4lX|M-&Om2aMk7aDb zOLYSnuDa9#uvVy%NB_ajD?&H?a5%^%=7S|L@!-`q>t9(DJ$92igSh*k`El4I_RXq}#X}X- zO0kYnFlvpKMA2w9;;JZ12I+uj^2ES|Fp*^kQC4=P5E&LpGfmS0+HA$_27iR}_U$m0 zgvtmL45uvR&fzEw+rcaZ(pwSWXeKf-1jMOljgD3j@wsSrXfxoO;C0LSW?qz(0L4xh zn!_}#ppIf&i8uObBawDMAt9K;R^Cxw%^nja&h$2^I>>DdMVtUAA8;v(b8K28DbDJv z8Xc7y4LgBSXi*`q)R0=LRE}cTM-vo{?X4jXkC6`+^~C-+PKagd1v>qn9T&9(7Nxop zf_GQAXh*p!C2CqeIt&ZY@3J=Q56c~p829EczS=9v2MTk7L zY_qe4f?TqE&Vq9;(%*(DFWXz4JjMWYhz4~;o`J!kDCKXSD`3Y$(2+5wuxRR_t~EY_ z%!gbU)JK&;qGjh9ED{Qb+_GFkkp=ZbT#=wC!bGF@*oZsP%x`s3nW@b~(09mI?#^&b zAe^yTN2>JDvqs>&QIXAm9Y>F)H+V$Dcya=@^T1Nfi?Chcx zr+@J?;?(IbCi-V`Of1tYJ?^Mj%nqFOupV;pX`{zzo{y@SOCLB==8BKusLeCDdE>f9 zm_#J38AH=?RvrZwLhJEgSdf-`bnc^+(RYkK%Bg4FG&?LCyU@^hCdHY-O@!x0GC4O& z9V!hSAq}l`c5tQSd~KNU+)(LJPQDVzgR>btoEM4`>Q`uW?V9I|#1cNt$YZ*m^Ov8p|Rh zV09mi8kP}3Z+DIBQSa{$cV_Bflz|1LF9ZPEnNCy>b9A`RbClIJMRYQuc&a1vFoayV z!v+Hglyjg&>VYW8dmSSf_7Qb5BjElCtiAt;CMO5}3?OQNzIDf;ixC;paOy5F^hGfq}}sO zDue28w$KlVXtMnV68I&A1R_L0&{>N3|NcAoZ+=GqSiSAp(}lvR)A=*`_3f{R2mk*c z=MVV*KhB>ioIQJ9J6$+Ed%l3r=gxut%VT)wbqQ2iUh7x!Z(Y4}>-h`XJJT{_>~S z@nu4Ne*PMN4yp99nCcd&(iHgoF?i^|J*5{Em95R({ph!5h%>IaTkmUr9meJqeXsrcJ1?S6 zezy0DKF%DmI=xR%@BY``EA(^>a*aVQTA{#H>2|V>>9)o-n+A;Y*SnoOQ7*Ue7dx|3@T^v8E!{XO8+^J09GkmU|#qam!rQMk7 z%RPB*f+$JD@Z=w`dZ#b^Gyc6d9>vO!!n^+x{{GkS_h1;-2ESYWEx!0{3|&V%D3I99;1 z4vsDD&g2`KGg)V<55RHkod9;4Q^lu4G-eanWxAP3hlxaZ11T!j#_8r}WLKDg8cE*+-`Io|w{u?36x!_sz-7-Pb3N+(0G) zbr#eQmGs_}{^8b?PWj@+i_BF&qMgdp+GH*L5K$4AG1zUGQ^cddR0na2c+{DSxMcrH zV~$zvdxz;a?K|?M-XRqoN3&x$sYD#r$BvT64BB<~kn)_wx{+1V_PEDXqpXs)$9<+6 zWfhVOo}DEdJY=dFZ7KWbFX02SimrVxdjeTSn|!eH9%Lj>*Pr_;FC;k&Of@X+u$*>h(FZG4>S7lf6VAF{X<5Vf1lBJnd;?x8GYuHjGp`3j9&PgjDGgx zjDF#-Gx}?Pnb9x(MMl5JRP%Q;`r@Bu^vd@$di_s9i9OSPsqT(pzxSEy_=Khxrr<5O zv_IN=W!FS0|G|f2S@>!WI(zuPjD3G#Tve6-eJ_*AOPZ#a5+E&sPD*J8Y?)CD7OeKA z)V3ht1JP6$VG>!0th)1cSr=Ad9H{7?oArb)~wlzulc(@fQMZ z`HlPiz>xV4&DZQ3zSd|M!D0#BsLh@Xah-nbxl{cl{g z>!`(%2C|I4$a{7ab%>VKL$$Z)6(d9edPtE`T|_;~wrnHhJ@La0)n3qJDJgkzUPWP} zzl~JcG!iCU)mfGt-$%WkC|9S^-|~-txDj3P>?n$FQh{Q+65(?!QMCT}EOoV?)2*WM zt;~@=lTr)lkDlVbaGXjl>O=+XU7KySBj0AyhUQSY(1&KvQmGdDotV7o^4autz^EpA z(u5~egAV<6@tah{l#3R->GHhfn54>x{e>=d1&1gfNv%_x_x2YVm26jja+GL?Ug+$- zJVhFAfzqK8rGPFm%9*?+II~JMNl#Lw4XLdom+ykyAsyJEzp~^w>IX_E&T1~G0Mw_5 zmUyleK~dgOuGF8KHaynvhE0L9;jzozkrM*lX7$zT<^^3CTTxe{@UqJ)1R8yJw$KX14eajb95Iy?Y_s+DY`DAzcl?Vp}#EsM}OzgUqF9FMqNn1*3;ib^p~T*OX+Wj{yvIy=&!`6E9uu&^tX}z zLi!t}zj6B8hIHt!%&6<>*A4Wylm2$m->vj_JN?~(bm*_bsC(!ak5r_|tcElpi$sy! z0%v-}nR*tFL(AybTS%&9NvfUFp}UumJUf}>S(@b8Vv=8sTC#|KEhMRyBB^$KhhEW5 z@@#&GM*qR+7tFF;=q)GNs_yhKKB|L{ur%mayS;33w$3xEtDQ#B$;sY!dcyoZxnM4? zYjLH%TAU@lBg{3=fiAxHa{P86gWOdbeI8aoNpjrO=dU7N4sXEgY9yC~maWDHeEgLq zt&xEt4{yhMq(CVhX;(>Om;`Ib5|Gj5l{;CP85kj(cM+S6tbIPkWD=#akroH`0 zeHOh1!ht1?@nmCPuDX)ovqfhj6MUoMCuD5|r1)qy#_0=ibzagkQg<0-J@IHK@oE?G zY&Y?4ig>uls6~sQG5Uj46N4(TZ$OPXgKEcZ=hJ;KarJCnlC)@KffdchKV&P9Z3}Xt zuxL=8Z7m8nNrvkKi_#O-b5Xm2dSOwTzaV*7VN@_FHeNrb5q|adba=^RMyXu``{|1V z)uq1fusNRdeHTLt;T*jZU!k1cKR(|(_+)>UQRr3s3!>dY$HaJxFZX|oXl?R414cRT z5~^La(v2-SHShRzxVFZ>WE{~K!o?wTS#z&z`G)&!r6pSy9c;z zv7BrTl_aeh>dDqnSx`HYxp3`dCj2+5ufkG~>+FAG_0UhdRjOI)yB*^V;kPx{O9pJN{-F1%5EIBDq^1bX79Z!xmj(u1dLy0WV;b zn;=E_>V5qqG-5U-`n)FGH_<(6gvynN=em5XZ|aa|?LsIFMwL92(?QR@(|s)J9k-V`wEZ>fd8Nt_p6L#-p} z`oulHJ4_r)l;jz;?6;WIpf)T#VRXZk-%M0rdypgoeNhy;V&9oBsQaf#|Jv1xmM;kk zW;M9y3k%bh7i>wos3c`Z#mkePMha9I1z8|cfF!_(GE(6C1IoK)KwY^gt&cET?V#H5 zG?yCX{nyErzWO+oH_;cUM30{p)M(0gCsQGM15+PDKs_zx9q#i3Mm5t|!KJ3}qAwM!%O7b+E1_#a?kUv9e5JufmXac)I;W`t zEBil6d6XnA*Vo~Sru0muC^L$`J$GhQ<;bZr$ImskqwZw>nhnbL3_$*=?k^8;4a^cP z&1qAqETf#!HG0`((hqMxl!3fZ^kG zlfDabHydQ5+$l1uYr6U(T}7#tT;nB171}`kO}UMn(;$x*u7^1ym#yHkP!C=mSENIa zXqT>SbWPB;ovzNXGgL9un{?DF-DdmF3CGuJ`6#aY2D<8Mne?6PQMM*-M_-=r*ZL3r zo`aPPs_lSL+;96wmxW{(U(QZ@owQfhjTET zm{5%9q<1Aj5#my#+w29x1%mF$BE+*YqY`)9Hw$w9Ly|7~Wz%p^2sv9h%Cw{33>%0f z?mFtdPSV$q%?aY1S+7@n_0gi6kPe8H@2aP-ES#vbjA~(;Ht{H|M*4J;YQYKnm;#Te z2_!93o?Q>tYIgU7hCce8XVed4Pd@rk4f(A3s(7?*q2;D*a|}(v?`smT#3+`!=KFhN z?U^yp%Z&QC`9Aw_t;73>V~%SJFE7 zvaMIpB}wZ)n$ltKJRS+SFA;54mp+|pqc(`Tx0V@&vb1iVzRpm)l`h+kp6$8Df{RN} zJx@ly6xRz{_IOungloZ!epyBp=wJAzj=K7`b_h_xJgbviY0mu+IrE4hb)RR{?gwqJ zxFpwwWwCJ#-UXJ#E?tX^f;^7vOWYSB;Y>+N^WwH>cY_wH)Lycrb`O*Vwc$ywJw^82 z$dPpYJ2!2)5E7v>&vGFnTw_xaeIEnw6K97sD(d-CtM?6j98b5mbS0siuOch6Bh_Wm zSwW#Uj12^^cD8~aAgjYM(g|BUm#zV$5_FfKyX5eX`;wEl^*NJ{uR3y3T6sweRtTkY z?E#XZF>N#&9~sp>?fAG-= znD$J?+EX9Py02-~czf2_L&ruM4AGXbTCtWI1y@3v1jkD6pz;1UvuD(E@=;nTqJB13 zuh9nddpj)j(a=*9eSVQqX;A7>E8*#eM_9|l>Ljcu)k69NqppKBVR(VRNEZ5(TBFr= zr;BTsQCm<0W72n4Qwf%Z^;&Y}*tlNEntGxq7Y@{yM0eX3;&CIK+H0Y+W*G%uXPq@% z>^YO7%kc<9GR>P*xqwlagC1!XO?344wOJO|=<0b!?TXt8c(9$M9i@wOSihIF%&G&= zI5cQ%K$jThns25Ob8`z1KBCWKQI5f+saLYtS+OcMNB}bED=NxJ~9fe(N3+=g!VN3@L0$+LM6aoj5^9Z z@g{}Za~`sz&0W3QAawV;R zo|o&=;y`fb5sv@WfmE(B?@N1$r$CrM{*dYs~R;6B+M7btCu{#|8GRvs=_gVA3 zXTF5i6)doH&BV- zy|5!wXD^f&OgCGA(f|!4?2w9}#>whkn~1FXaMkQ|yfivBon2e&o5Xjh9Yz(6_UTS8 zjZ0_Aa^wNL&%*MHlck(U7UgnA81cE zwnHg(IPHx(uRJ~Nl8ub-nkGpUj>wt` zG)dS;x`(C7a4*(Le54ijE=f0{vpvS%_S8xK_kp7llS$N zg)WjHphr6nulUndqZU?R#8NF@MNm7|=Gbe|c^mVO0-kPR@p4gNlJKphwg+@mE&@|RLq?a7p+y4Wid=}PNsV&#gvpl2P zNh@OnG*KGMSVP#T0+f@-M@DTq#Ivor#(J`vX^Bxa{gmozgmhG@g@nqg@JFxH_;k5f zW|Twn8KaUmBPh2PX{MOBa3*icRiq{+*7)JKY1C|mu9+JOF_L;Cfqkw|U|z-Bk%9c{ z)gF?REn0o=bsh?_b;297;$;c z7c(`g^{M{rUaIz11T|XEDUCDW`oy@_v816k7uosM6XSeuYt!0iD&Y(wkKjbHbb7re z$axp*L%rTn@CjU~Qb&RJdq~DI%1wN^m8h3m%)g%L4AW#EJ<-3NbR%;B!7fOI3q8zYtt2fYF&R>a`>@A4>v+L0OIohWGg)f$6aBCVJbbYu z6?jy4__`vf9VQKW8V*X`S)CtiZF(_KFQHeIm#4#v2w~{bRDzY0IUYZpM`rvrnx>NfvNP%8b&gR-WlfQW5G$OnF9VK|GUWC7i712J0f*D``=Cb+?d&bC$E^I+upH&3Cq1x&lUprxLfQdTxpHNxs); zL&7b?HExOXNs&?0aZ8*}O1;*8Y~+?WpOhuX^z=Q=_N@w|(haS%u0c}iG*EGQ1^<#I zX}b=u1}CaZS7jN+?KThXwr7AjQ1w!a`B94nj9L=zZRI&$NTwT6%brds(_)<@ztYlc zTRmROM!Wq(l}eHuR0p5#cXz7P0g`@2M(J=}TR7~o-sT>sQs;TCB++RkCEfKrcZ)7D zYTP@?)Xzw-p|P9Ol2zH2x#f4Vp29joMd%7uB##$4 zHQ%{ct4n>X|LK#YZ#&C{Q=}%s*AEhp^hP|A6;uPKSakdFmzhTbK@q2P49_f4@`7sM z6rN+aie6ml@)}B!QSPS|&mx|kK#eH>Y;~4ChwDuF=P0T#MnO{v@0y>E>ilnMyfov| zMB%!&@=4N%KGvolKbVnLPUV`gF3N4Xw@=;PqAQZtVn>IM9?YoQK61evYAKh-Tll!m zPLpt;KYcP#pyz#P@dD|<-Ry}H;P*(Av{v?H(I>V!0cmkwqm33O&qa9U?N-dykz^L#{m2!u}g4#IdT>2(V=OmYpw$VUMe?O$Z zJfnVMp8TBt{>S_dFGz9?LuV?!$?BLRXQrTSX(Mp`Jlq}D>F?~rC-`O0!sz$o<(^?cRd1HRfd z&r*%kJHEK0@Fysz8 zCzQ`~=VZl}mWt*M+aT4on>3bL@L(fu{Fp(&k}5AftX018zJaIia8*Uh7|MKJfh;kX zXY!J4W!_3wf9G(EuTQZxu?REQcgdLBu3E@`T#I=fwj;BrSX-fPCCb{%SiPeh14+xQ z?d`v#w$7KoGxnQNH^iPSi~ZJSMYec~(K>RwVr#V5$9_-HSEaffM`LgAi2W`zYFq5d zwpfl=n%@}^B5VOAjEo2fI5!pehbnM9PZSX%d*v?^~XEuD?hqHkR2yN2gW zrakaQHY?U#t_%KS*S=2Zh8Y7`ph33L-fqQK@)qdt+IOibf9qd9M zICU~p%v%0ZTZoQLH0~S!!ZodAcaQGw(^!8L)F{2htZs2_mr9W=-LW{Qwx6DEo9rc9 zR0U;5C8*DM^ILR#szs~YT7tG=6?UQ@k%fX>E0PvQ_LomhLnenVw2ykZq2J7QM@)K5 zXG>-oHFZ9YY{yq$WB*R{^?*@f_he?Ka$+>izd2q;mJ!{(xp3d9?DM8xe2r-=zIj>+ z&|uq^-aJzaF>NXD0(Y`HP!_r#7fM+Ie3xijtyofx$ZF7F<;@}siJlX>)8XFNxc%6p zG+8T=ehX9IP_85Km2EZpA}c5=m-@M>`v+djI2)dl6;N1{v0LQJ8%N{i&0_a(2Okv>#)qIj#!!89hkpL1x=HE zeg|}xgi2L}dg@vDHqneZ{yrYpU^}GDSfbx*BxcGY7fplAGK$9@*pKiD{OYOVtNWc= z%>-{1t+w7SOYscjg52J3yQ-Da&P$GH*;di4%D=6xx?!HSE1|q%geoKi^-bgD2cEzj zUnl&T7=_ibX1mT#Z3l~2R;fg0lqIccXRLP*gtt)r(->J{)D7Qp)#+bcqt%yQ%bdPB z8TkdW-g*C=v|bj~7t!>KhhwXPgu1YhWZNUlD7u^0`vAJiMyicK(y|^A^nG;`jr0W> z)jh0m5Y72zwr}fjw$`Jw*}CVMPqO4jlfIry&x(Sg)Kl{9nfShOjiI#6_D7@z%L(bR zK9GbtC25u!B`K5cMP=pr1kxCqjBhk%YATW=G}jhVD_%Y=ZD$fu)=oo-K9zN*8R)T; zWKWfz7Nf^w5lZx=yo*M~k_}Fcc!Kn}(Xj^lUKjfEr&^w{zT2I|&*3BW^c5M^8LO}9 zXe&vMzKZ;gv4=vfP-$KhovTvkOm51RPqjLeJC;=Lq#vq{1;2vT2Za$(w6_YQuqv{R zC=KYlX6&kJ_(Gq?X~n*4HD6pvU$mJovW$}NZpv{^9@gBG(O2#8H(^veeY<`%=`DkI zA2c(dPj89VcJilL`PH~8RVTkrtCwGD5Hi%+{+Id@_J9%3H zUqH_+OBqL!{`}bLOy?xo**jW%NS7q(o)tmeN8_~hvbZtHyBgY|nHCRbLiB;RiKX-7 zzNQUN_RrdHJrN?>L|=WI9j&I9PMdNUeU}aX``-F zX4Ila?;XI;+M$8g=~Lvif?U`dlB6 zps+n2tMaG=@9Zq2FwcmV2-B}+Mn+|&^D*`d@b%SnA27p~nNeq%5-ZD97pThV(YQ^0(IZ*tux?$(=-oAE{b^)W>vG-#9HnO)z{M7Id`c(JYT+&0 zc}BTg$26n1rbtFC_Fvts+8!NF=P={%W>l(phKw+``0n^(M!iel_{* z^G#2YR(diOEJ?Utlkt?yGD;<}wyiuDYlX?2uddnKe;t;ohu7smNx&$fMfqfGq}-&# z`)%FVNG^`{tP0wrav|L9g)LIXF`L2WQN7v1)ixIMEZ-1Flv+)F;o2upo@{@<%$nU+vsGk^(>ZEWj zdpW5v>A%`s^WxMi;yR|)!7a}_@QZ=I%BYcJ5K(1s|7`41#?Ef6)ZbN`0S{J)1W-EE zwYLfLHi73<{`?B7=isep-giA>#tObl({ykVF1)s-lXlbnua}jnmu>U=yIvc1(E?ry`J>Ej;b@o3TFZ%=GSxo6n6l7oi&xorkg7Rt_ zN90Ftv=GeB>vvjN$bQF(npZJfzsJj0SwY?FivQi&lq+c;SbgJNgk&ROT|Zz{*tQ^T z?F0C~yaT-dqf@EO)dBQ_e3auEsM)4ahkY$+yJ{2qo~(B;iY=Tkw51_!!+&W_+p^hG zl^9hp-h#Wy#&GPM+=q@!Crz&_Gs@sILQ5U)T$IfJ#vjx?u0Ua(q;Rzct=) z;nz>)-1SOZ6KXx7_D%17n`P7@!)?FYW9+>KJ_{JtI7+oE@g?WAO`;|*InLFhlfydy zd9Tb({F6>wbdgc+>ot0&8;eRSt!)+ezydewaE&(~p19Z#BWcZtHL}L@66{kW9-OVh z^Oz5-tTfUj;(2e_@zvueL~RMA_JJBIP3;|+M??A{abebvdhMN4k(j+(NLpp!M|~*S zl*YH6ULVV9ZF(QJ@#TFh<+!fSSM1w%LqobnMukaPdx3P~RWqzt9TeNog};g9cu2fP z!o21^otXa$zt$C56lH%Vi-IKyYJ<|P2wleW_N%{_kpQbb;g`D7u<9@yrTeUH72e#% zyMo#NKS=c8I)MmE&&|sA*&L_aGv}IpNr9xbqiaU5L7?-3QaSeN#5^{s*iui*;rbtk zyf-Lg`)lw{V~3+Gy_^QVEHcP&9Ns%Km!Ld_1zLI$pt?x#aF_@6)AKkv$aKQQyctWl0O1 zbI{ECQ0peh%E47*q5hL@y0R*oE#O8tb=p?fXIcq>)Wf{2F5`>vgxVL`Gp8Ge_=^!2 z>*%a?1dPJW!`bY;PEz;XOVgn+N;IbBr%kI->J=Fk-ubG`iDEC{o|DbkMv@NCu^;)& zH==Eq&zve(cjcVPJp(!%@!G>x-g0lyt1!y-dSLkm*o}avBq2PN1n<0M%rj%{(x(Pwl%DD1^HOAidNf{>|SFoUcwp2In5ngR> z@$!sv%*>{pN9MQ@C(w)WoX5M`7=>>>(z2F!VZpL+TcrJ%yQ$?$Ypl$1juRfoOnPEm zJU5|5VtgwL>KL=z{AiiKgtZb+t5Qqrs9IW>i9&k3!=2L9Yq{4_9bM?OMDx%Rxuj2r z9Wst*8Fdb3KTdx&bK!y(9iBlF1X^;dq{I6=BrTNOXvd=^(bQb4@4$zfQM1iAvw(I) zYlv!<@+qzr4Mv`1H?{a`?Qziztkn-oYvX-rI-gp!ZJANFh1(I50a9voZyz-`wd-!| z!wo8o3LhhRd}r7K=NYvzNx(~&rPWcj z*@9IvThNJkC&ja@)r2(8F@8DDBC!$p3u==Rqrx7Q!dT?a7Or0ZaBaN_BYj!Yauv_Q zUKoFiUPjN+A1WrtOLATRAw87K+9leDa%E?)KAT(nJ2A`arDM~oQ|Jn>dp)Cw`YfYt ziGPE#zMINQ+Uzlu=5=(%+(2-)SrJ!9=G%iZO(-$<{moNarpvVPx)9%R~5sU8w5 zey4snx6pmZvsH5CZ{Y{4bhSF$S6Aw2)g{ZQXvfWb<%hSyhmy1*>{^8;Nc07aQmr~2 z@s^D}^m4VgYP_=Yj2d}S)-oG)CtI4Lq&36NSu2A|f@+XN;T0rR{=HRXP<0|xez&m| z>LgJlgZ@HfQ03i`rE_9U5;e*oeU7A6FNqpuP?k}D&X+%6)O4|FP_vkyfR}HcQO4J| zFD$;2VF^GspH}1Ef$E(;`b1Gs)HAvi>>&CZb$Pcddu6GcJ@_b>g!;C=AVFG!YTYOE zgdX*hQHSUI{NX;o%&71XJg=yn@P6LBx4*;a`D(;r56KFnc>h=vSrTMXh9j?J(o_SH zAJS1v()wJ^k!*L^F^TX;l-47NIF@qZt#M<@ho5KmT-&!nts14zhtCXEvOxMtkHQYQ zYPI@8AgJVk4;m6`73mXwS9yy4$*yW=udx&SJfl`l?#{u=0j0>Xc|ZKEYB?6C&vBIG z(Z+?G8~yGp3Cbn?6mRH>^6c+EpS_I7b61ra<>77&bT~S^?3Ku~exyk>@QS2G{Z9Rm zz}+fOns+Djs7^=woAh~XD>STr-%~da;7AVG;T`@-{K2sA zIV&jZDUcL>F1*0xoRFLYM%nzsSKy6GsNb9z*`&~2^Nb1~>PSN}T3uDy{rI5ZfsS-h za-5ug{tNLavCdO^Po!glrh~GBVEH)pUc_fYOg^%z%Z$QPSDyMVY;EIdF~@jXRNiB? z$40w7K3}T?uKUJaE-y`pG~c*#5HVP?fmnu~)YqF;3j3L^%NkGW4(iV&_X9>1PN5cg zdLqLs@=H-Q@|D%*^Nhmk!#Si`g&x;6=K>^lWHl4A$f!1~7C;lmE{jAxau()S83lZY zL0$-C+pc-*<=S--UCTm!TiBK3r@5|6`MSGHZEfjN1=$N(2}EZ~hdj>&K1CZikMwU# zVr@X4>+^x)x1*#1CgH7FqX|?X{(Sa)8HapdwUZphYDS?x9i$K#R47uUAsrX18I(d^ zP)U*^sH?&g{qZ!mIf5z*%5!)ngVUTpHO&&ET=R`;b7~$4zif(RPWk+}%xPTHiQ=1_ zZ*4xF2l~;`(Yy;6 z;@*fwM%le4*^@i;vLzjQ`6;3u?Z-OBZ6CRybU|bVU_Ro;C(p+U24>~ekN*TOu|eM1 z$*7^Py4cDqJ>;)Nf^=j3HWVpSVU+W++8eB0C5HV_^USdCGJn0-rlpXU+BK-Y+BT?` z{QLrKWg6mHG3vy+)sWlH4~;}ZI!Ga46w<-B0PsK$zl-B&DvhA`4CLQyM?RY?&?hAJ zwt8WkXP*~sS~^Mt_0M}^1%a}c7zM8>4?A4(y|LeU7F)?|QkhZM?SY+x&by&URM~sb zegWB9VN^Q;T@ea1y2>L-k_uPt|Cia?#c$#fePJA>7UxzmZB$>(Ba8f1`)S0_GOB4( z`PfT4QMi+|pI>@xBd1T!sU_Fu)Mbm(!G*$B!g=oLitT^sP%9MAeGOq}NS;y4@B{%l zDc6w~FtSK3v^zBF-==htQBe)>yuElcx-kpA#3)e8{%o-{^yC_P>;2B)l zEBl8S)!yQ0#36;&S-c&ZB7-~Y!9=m z!#c*dxUZPBYP}SEihry!>~{C8WCQOniyk!)T!O$>t)qoPO#&`%H( zC`{I9BTJ_&)X(QWD7-(5`q`O8S5%rFuOc;ZQ06TY#}enzA2>NdZ@nE#1*h78Cy%ys6thHLlg;Mq z^)kZPNTGsMqbl;ngEpFFR43Li-4w59!w*dT<0}~}jbR-Ij0*Ygw!S86?Q8!u)&DLp zIo{YZ?d(`Ldu`-$ML``jac)ObU5M6?H+Y6}(tEEYDAGWui`QjasLUwGtoreZG@ntj zgX8%*Y+bPbm!w4+ZNjV~VWpF!{@55e^p*aAXzqOhR>VT9WjCaoWmNbWQonBiaRpSt z@Vr^yM2^7+Y>ss?YUeAz8(x2yf1-M!J;`SovjB?{ZpLnsa%R zJ-$~^p8g<90B5bI9MW^4L5?MTc%QR=j@l&(vWz0Uj%HtHy_SK-4f^c!;DgeRD|4Yo zZ$VpvWN86o(QSP$@muo~)!w}1INchUiI;^48pRLF*b#bqcp=q2=5S!Y5Ad#(4(cIC zBvyGPLAgEX9sFi9N`RAh5L>+2#FrBk;#eSV8@+L{Ta3O!y7+24^n0Nm-^J1!dsTXf zUD42g!7^v2l|X2LSRY~(eACZpmOkxvlU#Kq)^mYu-L_W83;x1dbM8E<$yQml_MC!7 zUuZ*gjxi^f{|l+FU9Fvt#7uKd1T#%ivlAmU>>)-WZUUa-tw%lXRK!l1ObwknvW7?b zQbgB^R_G8Ze??P4e*)2UnhG4l&~56|Wky{@-0!*+=q~3o14}bSy>oTnbwADjGxsdIZ%NzbG#u&xu)+Oy(i}5;~IN;wU-Vq zvKoxq;ibdZy!3Q4f_X-<-@f(Wo#t8;x^PD&DD*-xLFD*NxeM7I>XH4Af*PTEh9ydG z%XgZ$<0+n1I+~uB1x0V~Z+P2fzWN>fO-zopxAV>0<*~2yhis1B=Ix4xG>@m}*$>$q z{f4)$`D%h{H(=Ba1$leJ)s9Zk+nwfqC*3FMKF_FK=IJha>e16%&Hb%(e>?pye#lDl z+v!O=)zuvZsiQmSzJu;dbYF^4C3>n8Des=E3;GDUev7UtlBD+*9Iq@WlBaZ67mGi> zQeQD;T##GwT~~#lo}X^C=y?AAV%D~?*Y~U$JmFL>m%Z4g)jM19oNWT*+?W;F7LH^;l7j7rHie8f4J!CWk$tw znQwCOP>QmoU%5E0GriB2;y3lB(3jvQ9__MV=J(Ett)pZaRWKfrn1gKpAqgf*)59F( zurt(7*ML!BQyitdiA^epw@n6}za;8ugj#Q-05-IGQBZNuE~2Rq=+!E+kxGK1F?$J( zXUlAD#%1_l$zg(QR#xc16a9*c@WJ-8T?0D$4Eedzquv zrk*tKil=9gW%=CUv|6ic78w;^MNh-WaMpgFm&2^Odh>xyDWYEXrseAQrj7YNXe$e9 zjNXQQdKRw+_Hhd}DcPsy(Rf)A)M0j=@&2>{(N{@JxUn}EKA&M3ttMZt+mDwWh?jB7 zI)^D^Fc2?e_{rY%C(H^Qc&(Fo3xD|mt38IdoEZ5%UPSjlf+jNXW{$dF9I)CD^XaJH zNxaY*a=rVVRl}<#M(sr$5m*4_1?i`%Oa0%$#zl!%P8jvqs{)L znmJJYWgpk@Fv#-C#`+IC348K*)*mdBt zr1dRX4Yqrde;Gygl=`bkTBa7&TdJ8bL)KuHu1o2<$mMeC58GOedg-0>(v6l%_QO`n z1&8rP4j47lF4yoIFSEs%|FG>t)9rF)-K26(MjK#_CHON2|DeeGF|vwoH~$SaTnP z5AzLD^6kZT7T4B^qIbnjd{`y?iIg+dXOUb(4?r+RB%c$&O zqpIy12>#O89fPn7x^OPbH&m&2+9} z^5xTN$V5{yrejtZW%rcd5PKtDdJA$_!5?#o`3rKsLn7|S(-<*3C$fx+r{TONp5`@M zVP!60)H#;Y==+-PI!U@~o>4poHCPjI&x_(vC@{k>2;!y*<*y!Ni+NUdwYBG@nI64l;?O5v}_9y&1v8z^pM0y8iFP>n} zByLYcGJEcnG@@UG6E9`5ADLR zh58Cki(_^w-&G^}oSPk)Y7O&Zpn$ww$`{ zB-S~DzY<&FvK)J1FZv4c=}&Uu7Y<~cgSA@DGb((!let%Y^QCDeQ}M5?WU?zEaS0Xe zANnh6Wlr@&7T>gO9V%63R0rK{fd^v8lk>O_k%h@+e5{kNmA|s~BW52|VGXY>U3HA& zx%2Rs2Qsiv^+$n19DooJ=%K>_iR(k1=|x{0>r9hQo@G?Dli{C~c#hAB zo#k=7Tde8OD9F!ATP`!I$no=@Bu7Gwh*XkDxhdt# zNfT#rTs{3Upq_4K%Q?UsAL&|~`$l<|Wz}G=vv@#NtF;o8 z7=^r%D{Am@r%zvmoD5Bm(S4awsAFgxKwL~|KH(H}f+ToiG8v#m6-nzkSux_(aFfP= zQQC(Pqxb4_X=nrLhxCL!HmT6N9Y^opU4?}n z&ztnafKi)B+hDJqgc@3}S|vh7!O`o7TYY%y)>xtW9eTXbWosIGQ;|`R5gn0t zAJD(*l=%QeV4`OwNsHcu<<4}c*Bb54vYc~0;+rt)bMVSH>4ZP0KG?ux6-I3#PK$O~ z9H{nMzCd|lkLtg+a`l)!##56xdMmglW#TrjJ|&&~YhwiraujC0cb?^aj%|fFn~?W^ zJ(IkT$9>8(YWZQJ(4vnP88uaxz&WGNpc>mp68Q%MB}RoOy~Oqz>-q0_Wr{^m{_C2R zDR#k}m_^{;;_IeezOFDTajUPJZZ>F(U^p)G#ODM}I$WCRvKKMkm z<0*L>H+U?1<;6@OD3aFU=MS-t{k9c!@hqG{4pi1!c+ZQlY}C9xRrPDdj5JstVcAb z$zH!KsO@{_C5F?!+D_v-eZivweZgl{wxzl%g4*hJ!E0novz(baXVS@GENMb4mPDVY zKLJ!_av+zO94M;o16`~Oe6`B6Nhe@VlK@#p^+H>0*pU+F$beBZ#ay#mQT`KeXng#H z*zV|meS7j={9`&mYLVMoXQ|AQ*{}5Q?iJlz302;gGtd&{(+dpSzqED6t zW&ANGzBpT}p%>Xpsr&1wHz|9WQM~TeE$1RjL_1S6R0~}@X?$eVZ2G0Tk^lae83}P7TPf8zJncEpVt+LvLAWrfdJ3_L8qIPRGD_QNv@Ie@!|_le9qwlC94rZ4@Sn7?Fh~pH zGcG2MiB8roGwN^6JpIqHXXe|da7+uPvzf-G_b1X7$q^&Vj#t@pDm*Ze;S)ZZYxL>A z6Dil@C5f)^v$7umdu(`C<337jZ%;ZaDC13G%Y{~nw@1Jzvx_v#L{@5nETcSJSoW#=K*>;TgKecxv!*LMq zPo%L!v@ALPDv`$c8vb8GthxV9q@_f{NfkzcpBncL#ce))m9_Z}yT5}`b#n0O38tD? z8$IE>fKel6_d;%(h%fBF$|#k4E#t(-+eV35ylOg$8IP|x@-~$!U1e*vZuPVwmP`36 zYyFOxGu)=ca>0I4Mui!B@*q_^`HT4~FMJh`rdeVX?5D06k8ugU zIw2)_xhY-#l(9~z)J-y{U~2=h-L%wDCCc#^W~Hq$H?)J^!2A{SC7f=Q$uf%N0-}tu zMK={0Fben{>r4-?I1mztm)HmQk2p4)2+lwzRN} zxS5{ai<4Iu3x(Fn^V|1Fo;nr|7qc`*4T{qra?JL+}O+1Yl@$? zHKG0@F?BcM`{*TE8YMTNo+-T%DBcl4?G?#otVRU2T(cYFBh25xi+mQzSYnju4l~z( znNetkDfN!J%2JyyA^zIfSYMV#cMkDHC?(OKu{^O3<=J@CAjXQzo7=q5JyxRkA->#a zqSo%EQN_@PQ-v%|Bc!MXj5>$Don?5O?Y)bQMEMZQiNU<21$u5J>G6rK^f{b!eccy7 zW9#09YCbeCvbDL4T|~t^mGaCaSY?Ev;|kjg;}SX4$LYVnyiEu5`tu zC9N9}P2sik)3y!Rm!8tn!!|9BK-(f^VyaP^i@MSm(wA9A!SgVzoRqHPh2~oQ1&nfD zt@d)9hn2DyL%p*;&HQjw_m*!>D)9fh(jH}U44dp%Ry)L8c)rMl<)UkfT+H7i|a zRA)n93{R}diuJ@36-f&J+VdaKA}Yy3sxJt8?+r?JF)#vL+gJv zt<@z#5pVybX)TxhF1$_o`Xt<&RjG0z(iFg>=Ba1q)F3-fcGl_&qv&ZEW)AR~RG_hP zY>N(maWbFO{bNc~kNi2FV1K3&JM++}`Pca~F{<95DaB`G>F}vmrXKd=NPMh)7u3Ns zmy%^t+be?FEec&moBc*iXL9ZQVH@f9BUV%3IP9CvilAB3x3))lB$CmTf6|N_>kGnT z>kGnT6-H%$8{^GCReRYp(rQQVCVlm4p2Y}%(#nw}V!iC|z_v@5rcX`udfBVR7B%rr zsK>4yZSh*H+&A{U-X%Befn>Qi=HqtBu%?(UD>zDpwH{ zr4vW;=t=1X^ND(R$B&9+O6SyPm&nNpTMtP~H%U8!lI*Cp-MOwY|9_%NnRJJc2d6n| z`_R#b(kT`NrI{C$N2a%Xjm8f2LAt`v=TdbI(~5Q}jz%_LGq1}@E~d^_P@QSSUuD#a zLa0AM--3p-s9f+kw(ZID6O7tw_}~{H=hY?Y5mPqMcsk;Vj@H@k#%q~pZN`=Neo7xv zqV#5#g|YTqvqj#XN7vPKJuT7VWf}E8Q!mKjTMyV8skM5*DBjaSCE(FvFO8M+y*dj& zzd3H<&$OGmxY_Yc(V2Ylm2}{|?@M@c)vuj8~XzyuuPZU$s)~ zQ@XFrh>EYF=rJpq4tGX!b}SmVXBmt2SaZtbrLM^8yZ@94#;o*>=3z)K&v#`WM*Wsg zWX$EqA`8s!c;+)GBxaYLYbr7d8Ui?ReN%xs@q=^)CthUs*pwJ`nbTL}A1(#DCexakU`8ZCgvxf6X&q)!+NlPz=hQ_RWkAnfO3 zlsih@aiik{n1}1N-&ow$V-mK{~k3GfE)S#CKEAi z#4AdU!y_a`9uY4D?oT)I7neJ$^ib0(UAo3ffS(!4uV`6i(z=9^*zsMCPmuPc_mh7`yVzv81sdUa)J8Y zf+;7XTRE+_0=3%oh(>+dN#wXxSw`(f4;z!-%5Pfs^|$c}t|_1Tq!(MkxuQCd8 zA=HOm89OdMm}web8>;R;pW1>w{)&vk3G@ut8RWjClPE6;%6H^8F=&ZA&d zv(c{Gjb+hkv{K$b^aVE^Y>Tus#3DnKqt8>XI8a}b{5CrxH^!CKW`8XxDQ>INSBai8 zj2?_0M^>EZ6O6L6^6`C{uAP@&=BCSxnrTMYo=Q_;RAbaK_5_8GAy)mpby{-}2(7-{ zdJ)x2`>^br15FddDz^@_o=@_gQ5((Ki0)ZR&WI=L9%XB9U8m1!^}K*lYn*Z2<#;u% z&v}wph`U-nJ}oWJDC|sCn85(I{4SXedF52nLt4csE#!n8qBIXydm))PUPqKx_!^JO z{C)Q(&sQUz>2Q|B$S&7V*ndy-AnrNnQ3q>ZRT$OYEV+z)Qbv}wBWt*9wp4n%)uWwf zOy#MRh=xHHO~WdHHH+dn3Czt=#2}=Eq`TGa@D>3Rj^y~NZw}JjV_&dB^ za^$}7RoWM)KbD zi0}i_BjS9kKg&H0{NUD?OTFVY*49v$+0TkSWNNe{R-?0P+!K7(_Ov+n+>=1Kt{V5` z83i7)+%x)F;hqWN5BpbS)bWdyy1@K7^k>uj4mk2dZ%UVhu7=njjpuKb8Fjb_D3I(G zNegGhsV7OAw@fR|_2+nmF>&-!)-J@+hm1CnJ?LI%8P&vXx0c$@_0`Kq*81f;CGuYI zIgtR8PMbqI_YqXZ2kok?JkNhlI42gZ-*66W$F|mm;y>}ZXyiLf*1SMRjeCfK$B#^x z>gckq8?|eb&{r0^(7MDE~+nmWU5W}UHqUaF(Z z&J)(H_P3Dy`Ufk?qqXw%!6|Fym4C37&Xl$C!PjK1{A(($uaC<3DV4VNPcCLNaD55N zt)J1d>Dm$n*IVjYkFe{VIr(?Pb%<&}SLdxFU}zd9ZJFIM&u4F7^UOVRnu9e$~;Q=gomG?N$g%X9+eM1ZO$rNnJWs4Y^g@%NDNu}$4FDy?$1Y#H9!8n^Wam4 zh=*lK>l-fn!YnD=-lh)zQMC83w&lW~HM2CS{G*w97z9$Crc#Txq`eML&ftQ7+d{h6 zpJy%2J|#X#(bG12Z#Xi`s8AXEAo8@3w9{KW-Z>F43L5|7Er^Y#e8|CVvujAun*Y4a zDby%d_cmKE5QFk`(V(7Yk37^Db|W}6UW2w&VO)de5~CK<9m=(cu1mh)>FifLoxW*Y zFa9EF3-hTzN?J`%_HVJfW$&OIyU0=raRM14DR1>Eg7SzCy?Y)gZ4b}(lsDk1(VP8j z;i=Zn@wJ}*ry5VBeAsI6KUSaF+yAViRC`j=&oU~!xjEg~I_jocS%ZJF?T8X9*pF?9 zfVI%a?xJwja~V*OXOxRmFS@bAtDr%L>UR9j@EV!x{(N(~C~0kYnnx$fl_NtdYtivD zPnQIB7$0P;;FTF=qp{iEwXC6!R~R+rjK2lX@#(f~Eq-y0);DmDspq28ZLzj+#^&07 zSUxX+QQ>=H`nF12Eh@*lxrzS)$^PJR>GBOxuXWey#$0*)ptLI{M@Hn9197~} z)h@&D?vSkj{m*vn$kwcY+*@M5SJ3aQpv(%!r8537O*~)p%j38n14hkw3aJ@c^CriY zlFMjKbF`5hk#4ab6;3}VT4EH>iGFWR4zjCSttyT>MmzzTKVC@cGNVRKyogc6i+F;p zOO6|{Qp%0}R{vaQ>2N%`+N!6m5xv8Xk6iL^9+$Q&8atyE4XR5<-D;kMCx|!Qy${sp z%fCy%14(PXI&37g{EkMx$DR(%{t4$8|5ZjgX_7I}reqB9myfUU;9uT}GZRNsK}mAN z2{QCO^8ufzRm~0I_x2Cx)T`a;@($6NnuMRIHqzk<9OZ(!QT2HV8W}2*Tf7BY@_iQFkoBo2x)xEOYB05Pxa!iM3df4TV{eo@n)ep!lDfT-copoIA5*0OI z)RlLcC!h&l)Htg_+E6FxSzgjIZ-NJEGp9a&?^Jrp=$T$I%JD)*_O`JmwC%w(|IT z6KhyJ=Rv5vpb|YfoLR#@CNvUng@hVcffFtWmG--ef-?D2&Oi=<0=q{LX_XiiPv_bL z)!wGb0iRC*?bzML`XZy^6klt0?S=olKZ=4A*d9=hrqnXaw31iFo=Mf5YZ(4URjbgE`Z^`=QD%nB-r{TNDn zTM3D1fW|J`f4i&N$u0^Q#pi(*gg>X_|Gc0KAK`oU8AiP&5TjpK5{frA>e2Brmu2kt zGP#mT>yoe`ogurE06rAu8;xcq@~c^VC}gMWo`IeBx@ys;7Qe!%117!@VP7Q@M7ceTC&oQ;h z)|^FCdik5ITvg4)6K{Q1{6k~ZgRUZ@CK{q6skS51;nErvrMev5H`Qo~sGt#}e3R`R zb+jy|A>iZ#neZzeJbG0aRW#=fc-ERQD`)C%d9HUc^%&7H=VDGxZkoI-R67RvY&?$t z#VB5V813;L%8?^XCi{Het=jw=mpNcmwR&6M$N^city{%*#FEYLvg5XEXkjaO|8tqh zO8?(iGet&)6ZPptmM~VzUZ0&VMQIgW>o;#bplM`p66>|R%UUN>cOuAo9qPU!X&HZe z+jh!XtI>Y8)%4Ar){#d{(M09s_Dgt8GJCU;(Ky{U&oLPqv?27C;AX20)$6HhP>qnT z${OmPfjpxg=NSj%kxgYSm|2#2@FgBNDP6qT>V?n7*F?{i8ouAGpq6fq>g#O!fqgM& z2*R$hvcE5*+~vZ3&&7I&U3bNrWaVb7A#;S6RcgwLEG#p9OVm4}v}_Hp%sp>>`m?uK zEsb^N|LIOQHLQMyZ&Rtjq=l028Hm>i@5(|vH|*bLRQQ=>I;yW`DarG(k`x(b{g~>? zxJ0Gw>`h7NqE0Q=POHVW9URZw^8VK`>5559`MWVQ z)?-dtOV-e!LVw9}VPg%%>n!^vqcgGnYJ0EpPD;D6uL42EzJ1Qrcf9WNj0*2LCJowD z8$HxD{<;+W)kFLxY2nmr?0D*s2_z4lhC%h|cTI?n;a9|5C; z7h=02%!;SgBJ+$2$Gc}dwH5ke@z%)FG2S1K$8szzm6|9qs;SO3N606E)3aSCk8&PpYvU9*e|d*!rBuKUfVPs7WC zf_zY%Z2l;yi-W(n^wJoKr68PTT$? zbo#pdFLrcy8~c#4;ZbK5Nz2sY^RXIz(ANEYVCD$!bXEJfo~njmtW?XnL#xD(N-FFI%1IStFAj?7(fc>tEt?RT322 zucQfKMYph~<{d=#WR~vBQCbh0r>hOhdI#}*PK5d&lViB>nM}As=o>j!cwgTRRK=7j zfzc`f$~WaATE}R7yxpd?-_$dEW;dXM+aq2z7I;)E99v&Xl$W%2hybes+IsQ%6~;_brbVaBTY?4_7rP$jZQom#v1!|8>uqeT`*kFPDvX-W#;%)t`f6MPl%qa)iIEj1 zJ~^X!4jQvP#>e!9xPKwN3nVQE!-|^sld4-8Vj}^PKH9wX`aN;#KgQ zjFv2Gq|Wz&+Qe<4za}{vy1qv@x7bsKtj^iuWxp1UwK2^z{BX0J5Sb89_JC2Ysm*wO z3$Iu^3z}(9d#$!Mbtgqf7IzXRz`~SY$>%bedofz|( z-ZcB5QvGM|hytSN?ERLIX0aalxZ)t6nk}jmU1ME zWuwtsi;Q|JI8de2;dY5Y;F=ZL{bm)rbcf{}J2r;DGgLF52wmlRy2ij)HM+RYuwKik zk*u0x2Nm2}o#{Ix9TT-WJe9Y&KQhXhHO*)oo^ zD|Z=f+iOJr3?4II7o@%$sF}FW)^wIp>MH83({Nv*-9(sT6x*Tu5;O8x{_eQ^nvTaD z>J!DgZBHx5X|wB(XxpA+(c?iDgEy{KG8Ur+BYvBn_AfdRDnRvdUkcpBBF_ zsf8CTzs*xAUE+3x%xa!mPu#Zs)!u9=8bz%v#VB};@aRapv}eGmcuhtg8}DsTTREMV zw9ME84&t45|8Xc|IUN1HC@ALh`m({UVk)pdjZu~l-rh_^f4Vn~eKGdgDtcCCRCpC} zNXyjT8a9h8t1t?46Rf$vI-hr_#zzP>kF<}kb00d)x(UbYVAPaZ{*m2vmT>U(NHS3^ ze2OT3dUB;7URL9IaC<&NInDL*(23c)#jiKoR<`b~jtNiw($|f35+UG=B)!-8@*^H! zl%t&)n2@;=Uf=nh$-N>dXP=z!hrKIE2RmrJ+E@A;lB3Tt=4CGc>E?-^9LKK(68->! z+99V2vo;F;CuGZ*Zr$3jq^bIScMWXP0=1}8&X89X&>o@%2(;1G1*r2&r7*)PY?3c(oF_sE*W3o@{ zZ`vH6H&5(5yJM_5Xx!OvT6@T9+~L1HU9&9ioX>MJ!8fgjJd^(sI5YpvXcpteS#nav z#fLIhDuw?tpI3~F-?Z|Jx!0^4ABg>C{a#S>V>2`Sd(XiC#H2!*Q8pGy-FWn!j;P8Z#xa&q ztEE=*j0*pERvNt7Y|l^MBcrlSvv^O$U#^Ue34;j#usE8fEZr07g_ujY_NY2-FZ_(O zWBHzVJG#c=3YqUi?pOEz8;y^Q(m1uJ=@C9TEWv9sD%EM8B@zGYUoGcsG~c(Ix0?-b zvHry-kvc~ zkJzGD@9W>D>>T2zT!m4$$I8a?71D`H1G>=b^tXU|mCA(NJfajdHs+pXlx>-XoFj6- ziCd-%KBts>z^FFUGLTO5&6_sI)IIzQ8P#px$kq!}w%O7iw^I7WZ;324t?YN$S6BsF$+E>pNc4m2X9IB6il+6shuU=EB&hXL)_so?2hXGHPe+ z$*uM`N6=c3yMyinMyYO&(JN6)PogW;Knm!c1s-kkjB@6hdP)rV7mp{Y1U-J2a5#?= zMMm*=<2~Y=Hd5e7jPMP)mUnZk%#|3mDEiK{rTLw`o5x38Hgx^?{9AX9@x1sg;g~Mr zx1j*TX z!A+O{F%#TtJpomu&Gl)^deWr))`ih-In5y4XVVxf$$QsB^{jQ0ZzQt%jLfl*;erR8g2)153zb5Q8F!Yrfb&=zEuIty+ zw|Q@WJ0!yob-E&S@u{uVf$N!jNFPxx0lZV6B0{#~Y}|jhWxT=Ephes}OR0`Frlc+V z?_wDm@0J~Faw@wp%``es@$PE1vqcC0Zg~}DDV)}vy*GxN=u_V+J9pTX`_0HIvCeYTYQa(K^ zOIl5P`TW$S8w7!`upWGZxvzXzc!Hi{MTX5=gq@CagY8F9<6|Cl~St@B+{R! z@~%Sel*cy2|6-IHZ{<^4x9rD`Kl$B?9fji_{|*?%XZ(8dWY#Nkn(6g49(|5ayd!zf zs3mv1;sZ;ZveVdk@IGgKZYRlmM!7ax5?xuJBaVh&`5>ir#rR^c#HbwjoESGpPZPYC zN!9c@#GhakP7tu)nJ;jK-#_`OK~n(+N~dt|b<8u~vZDU5}FJ`vfK503A=q zo^zaK6wXJ9PCYghW7VnGnFON?i4cMzUM6Hq@N59?4aJ(dG>4og?D^i@^ZuhrUVYEKxyLQ11u5RT&@wH6E7U_yd-8u_Vrg7MXi-eB;r&{PF!}_kKY%qwl9Zo`FwD5g0daC z*dF?Rs@t^B3_$d&1TF2i&(UO?#fqOtOezTgK^#*n>a6YlgeE%JiGNwOoPv|*f9(!xCBGUnve zpQ@RnL7AClAd*DAZPVA~bgfcE*YuGpR4@nYwTx;ZEd#5=p`)ht466K~&Q?&nuuAW% zA@G|9k`ai9*0fkYc2+nR{^T^%qg6qCmnilU_vxy$_?;w4iJa+oQF3fYU14V(y`|q8Z?~?>AxDhAB}OG_oNpZ- z2;=2KTH!CN8T>9wTJ)qP;cGl;2XE0mq=H3P{!@6>W!ur_(ELjMxo7%^jXe#u+eQ5l zF?w-+a5J?@mQmqvs?$dEi2N}bRTs^}#6e6ZzTB!l^JG8TBG0HKBvaiU7I;`J$bA=4 zFq=r95W0wte#~T57o`tWm--yz5<7aoRn4faPi9I#G`bwuQ#(m0oKM;gxzp|FiNeP` zO`}#>P-7`y(+KQNE)H?hS0~1^F|vN?SvdM+rot$!M_`-{A9*>$z3xXZ)a`Q6|7AHk zH4R5caS<5BaXXF2&ex2`EXV42@I;RM9sHNo@1a_$c^-QL9r%W;)|p+nbk%uA9nM#d z;~`60SS2`U;`;yfk({2K7?$$dY1}O_%7s6`=vb>aJXTO$YDmKhrf1FOSy|GeH%WS; z4XTBHcbVT9!z+yP=)2ZfT5Yi}X5sgbfU@5u=(`U3LJ#}lY`S{T91^~tWmG%PL!|!W z8EpZSC#uBv|8KVJ-)7XGJMA<7Bg=)>TTS*DNIMkG@8XYSRJiSY<_CIXb`U7L2MEtg zKeE=GeVg!%m+M5eH@vHw0jex0?# z>Hy9(elv|O=6fBU z#AHY<`(ZB-6h?OJi*}9V-24Pb;P7OW4)TohXsk|{ahubi`|t=UH+G2@8Rd4$xIJC# zpj}Fgink8x%QYUoBsocb`Cge(SSi@(%E<=bMHveOk_%2Hqn>8n4J-m!Gm{_4k8Q9G`}oB-## zu{r=c)dNptvOg2Lb`K=N7O#oMvILpbB=2D@Q6AJoNK*<7s#SC3<^;H~#YIao zx1@7-*x!ssC@hgB{yOhz!YT$Cg^;FkmyI&4|O ze{VB58M~c_RRA3aUzZt$@rKht&0^K_M^DHqo{3UXk+gpJMCN$#E6xSSuB`WW^R6uM zH&~g|KL?7>jW#i&poazY#SIw8moDNlDO-o)HDns;_80DKjrRUP-ZRQ0>%N`-&>LLD zgE8sdiLv&?Md|#{MUo$W&vo(V@ln*DAxdtEQH^}ss85##WptJ|P;+Rccr2s&~q zp4-AG{DvG;bRQO<$P|BJdK#}BjTo;_+hVNqQ;U^;VKo@^(025tjs6gLJ`wUhwNA8F znNeu7&#-623F+xts`86?3oV*qHADY0;v7fjvk_La(Pqg0vQew8ouRtPl%mHA7^O!R z1nuzAP2kL}1-vs(eQJ_p;Nqmg{4cGoP+*@z`JTVP$|u>&&14Z5e<|AbF0tN-OT0o) zB%h&sL7OZIT?Hqi!=v9w3$Z)f3v#k-xt1eN0*a-{dN1bu;4jChkr%{!$Ce4RHcT7o z`WWZ*e{)(bDsAwycVz~feGAr0o#h!No`RQfE(v?4 zRFX%k9CmCM8I`~pPh?-WV_xE*_{w`NGUtRZOG1|;^JndZo=y)g|F^XaXF9bNZBY5| zh@*M$=_R?_+2huDJVCcOyPDDeQ`4i#{@;ilaEo~iy2Gr+<2>&yqgpqZh;b$diI2Qi zVn%$Dq!gp(kCTRs{-SeT-5j&d>?EYNzI%-3mHz zJ|c3VQtV=11F~x{zbdG!We2nxae}Cvst}dAEGVxQ`BY`AnW)Tz($_1D;@qe&w__jw z4pmog$WfO$EzE7BCU6h~a>9x$Mg_7qApx?Cg7lX9FX-_5u^bb^D*>Z+8K3)h(kD5x z=h1W1>q!2GeJZsc`(etqCNLa^SD%o^Neteo^5S(^WR$H*8=>$HB~b0?s85k8MxaTBpaeU+Mp4 z6#8(AUe^aP` zb=DN>vy9qlsXtOUg*A;P%JeMakt3+4|If}A*m_ngCNp724ZWPuc}9h+>6`X?u0f5U z_u_1}BBN%Q(5M&Z}xv8VWZPwaO&LS4U1iG+&vYqhG%=Vw&@ z&vJAmXByTzcz)tnc79^|_+Kk?U&ncKjEZ(_YT-VdKk$=gGip(-1dJ-T4tNQ(R*U)M z|E7D_-Xp#Vqkhra8J!yS#VB5}xbyLhr6bxW;>vEL(ywgaF7aExGyLk~ zQ|6q?zlx7Ti)L7%uly>Kk*z|O+ve>0uEt?aIN<7Hp`O=L-LsKpkroXk|bndJR%?3iXxMeDSl z!Dj9pB`g0%ILE~4IQvjEvfGno5W}+~X<;RI{_Z}#GpR2cUdt!lcDmQ-qv_9g*J}M+ zNo!N?%;Z{q+VSGc`7@LII+A+l5i-jt_^senh_mUtfd0;>zYFNA_tN!3JYy8*vNxz} zbT@ssj(%SR$%&o&;9=+!jQS8gMZJHBzH`K1e#lX^xc|l9M)gIqFX7600ZA9<1rX0- z4U(=UMrreQt}CYrbh7Sc&sR`hnNe-@6tU6T>6)Nx2T;Tx?78{rYNqmAE16hkq5q7_ zIStG1tgZCw--(4!eExsc-nEGq4_YbEu)D*NLmAXkR#0e-!l6v~>zWT)eAjpIJ3DqX z&TYqIljIrI7!{18EsQyX?qqL>S^P$BSS4qtrP8_Zolj@D{$URZUENwTCR?5sf!^QJYe~2CSS$t zah@Tg!e`rNj1K^six0%5TonCsYcrq0W#bN%gs!s>aKE|U#0X-k-YX^AMYU5FRP4kn zytz3RXCCt(l?QA)W@4kdYrN3!|5wpl^&fz$ep;e}qV5qn0P@eS4dLtTAEI%H*C=kv z-OC;pG{j+-%Eli5KjCj8s1Unddw4!NnrVZ7F1)cm)|}1@%0y+m7d&SC=QGBC9@4xh zs8bGPQW)W1e>S7mACkF*9+k3Rml$Qg;}g~le|hjdeXiPzYxxgW8eR zCV+5p#zk8#H{_!qWV#H+yJB_DZTN?3ulm5;boN18_xbOVZI!IAbDKxNDAc*#cak;x zGd_;G$2vZ>R-RFqP46@-&M0Si-rTfJUr`?_J}BeRO*!>BiRZto;oLJmABItXZZ}Vv zQMDPU`v&$SEsTWklimLZ=)NLlgl8-K9WR$RTkWaQ<8qR_eh8>n_)aw+FsKSz4v*%dHq+k-U=4&ycRhe06vQT`!2^4S(}^CQ6XpH2 zAD}O`C%b}&Be}ZcPaLrcv6@`?uYC77ZY|K8XH)_yhp8c!nz51Q!8?SmqM&Tt5W}wt zct8=V^WWr)(!K+ic{-u>x_l z@m|7wbX^(Ur|LZ-B7YM}Ysv{9y9Pct{-f6G5n++a2|!sD4N zqpV*4dGLLAErz2E!&CiOA+6Jj{ zJmwzv&fAXPh^4D{&tvZ=qPZk#b+_=i&6IZ=$}#u!vB%j5qHJSuDj(@!mbrv}xcKqRE;E+sN15+Yp5v7{Uo@#Nrrc9I*XX0@uY>-w zj9O1mKS+NU(ck-bnz#z6yOE^7tlQVYqoM<({1jUDP_=i6kXz|5M}L^LxrcJiKWay- zYLimm0v*t*$kI`_J85_;S4heiAC0Uz)|-;KaED6sI;&}e0P*hyMYiLRlrzV@6{zh; zr$27wMwwCJ-yNO)DEy;Mj*S*wVMMgdNb2ri> zyjB@Od6!F@NQM%lnDg4?E&E*AxctDE$+K$@Vr&C+SJ6k_4(uDW{<(wu>`qIxbO2JzYBh{oIN*Nu0KT+?sDNZY3RHu;| z9G`re^zw{~Qz|qHeMkq?6oszWW}peV6J4bmT@7_Lf)`KATxsJoM-_WI6a|Gfapmxy0vh#(AS<}%AyNYP zi&3ntdu-F@u!o3!+kbB~@a?It@)Jg`^4lEf+791zbrqwH##~|4E_yo`Esp*(_h^o% z{Bg?h3f}2Jy7ZG`%_Y;IBkVYu^~!^H87lyi<*aHZ%c!GG4eT{F&@n3aPnr9GQF9Hd z!cW7fp0MhVUYmc?TKJd^Q=6X2uuV#DQ=^D2ro2O&NPY=jW~T-{)w$77{M7N)r=H;x zj7yB-)aSRz8H9_Q(~a6f`AN%PjcXJ!8!1;|6!-Q~H+ClLeL_98SlF)8`l(1KA6cd2 zZ~56H?HoTXE2wadmm+;0zBnjT0;?-nWi+)D2nwDaDAR`})|Q&vTo<=4&nP(~aFdaz z@E+)44>sQOOgeFqQTALJ(NPCUM@8ggSKBX3hA!Ft2HC-KH8eUf=pzcsPl+T~F^$;4 z=%78UpPTe6k{0F=pfiE4q+Ol#b5=&{rTaGHE3oGTqcEa*P<@0$$EPC=iL9pVAEh1FdO&{MllJ8JX?$)IaU%7pfKlO~ z`L?Y-r}dtko0(@6TDc2rIfZ@w?Q>MBk%FS6^+8E1oK>Gzc+l)ej?zjSuN}H-%%3!2 z)#gdEd{AGEaxivSYE3RGsFkzAC|JAU(}aXJYSs<6@T`rj?CNJCzNZquA0EAqIR$f+ zv?`1?8+-gLqcCg1vs-44$)a%zCh`uRvDPmmSyuOHM%i5HK5tN$%$gEudq5C|V24)m1DFDuOyF zCjsmlm$uy6gprF^@`8&=qU&d6RFEgTAmeqtP7Y4WGO93Jq>1F>*2@g+S9rE&WkPZk zJQ-_w{zc?Q!S(Xbn$b#oSGzII-T2`dZNB(yq(|e4w=k!idP(9E7nB$^ne)T(g0~&($nHXaJIUM%qdqx4;BCXxksf~=_KTVmQnB|P+Kqk= zsI82^>`aQ%@xALM-h+QVeSvq`=gg?Uh))vYa|ZD_gTUVDfKel6SKZb`Xrkk${H+Fs z6!MZ5C`WFiwKtshsO+LCGHNF4k|owcvbUeJw!*F7t?6FSWU!{TYlJlU<4IqAPIw~8 zExZNt3nvsH;w1@PtiZL+Cw+oZuzz58Zk;6>(Jiu5lIU|Ye0!c1tE zQQ_`KGq(~ANRusSo$7*(#%cb?qnUtFY-tfEA`PU=X;O`toP#{0tbNA0x;1-^cqI6XRrPgx96ZD1^n=yJiIcu3A-nD*# zQIjgiBMj!|CQ~`K*}(G{weEj1lVwzxk*Anb3cvMqX2me^2kd0Ty*XK>f){Mc1>;Fl zysI|871GG4*UK{sxhU49*Lu*Wc@=v!H3W?rr-v0KtDj~T)Wr85*Icf?7cR7PdQc?<&lo-;pq&19lFAjDN!%8T#kw+ zwYlE$jHH{9Zfe>Z93bs5yvjt(kOeR)zhjkSU~t9-@O#E{g)%G{Nu`k8sm z@)s-d`U=fjMQGOPZY3)U{*gg%7U698iZYYsxS(ECLQA~o~N$Snyzhh zolDntx+rCH}Qqpy4{?$RAQ8CMkpEgWgqM8#5x{_-k(^j%R)WxCf&y;_PN*#W5@Ba zzFc_8qnS!nM)(mRS1zNY)E?H&TQt(tFENU=4(YiL#vx_>CsV@?)0q_%r$gG$p=vL_ zT}FJ?F`V|pC-!9~3U{^!jB-ZTkgZ1=$NXJfHbh6|^?`-bbMr45i5cLm8K713qy241 zDc%W+bkw#nzsM*zvC7*td~;4s^!b(hsBF#Hsr`t=!W+9JEJ<4W<}Nj|aENy)(-$Fj z8=L(ZDs+d+FIg$aD{f|&a)N4g)_y8CU9Y9GRv2aTuS>^~a(lylL;7Xri9`#HoM%!x z-|xZ~wiL6TsrJrMYjyTzt22phOH?aLt9fr-T0xXn9ny7jL&P~Y-8`eDMwLHNn9Uyg zHVu3YWKnXYx^~TO6laue?&vF^N)f8b`VGZ3A)Llbx@(zHDZ5Tcb<+V^F)HI_At`IE zm6z>U3;D9F$!EEMT!8F=7YO_d_t!=RXJ}&g0`5=fOD^?VUeP{&Z(nx5q_ruxlQq#E zDtSTr(G80};?i&Ic?$$ZPnzgSmwD??CUSP(5BcOxTFwxqExDO=lcNJ((?N;AR1~`C z&Nbih7omK?bC1*prTw;yJoji?MSbDP{*D*v#pBfTsH|m19pn?2lHTidJ-B7I*M;8y zv=ZCsXOCwp`y=UVPT5oMdNgBunw`Vff8uf5`V<)7s+;ZoJ{k$HI+V%&$=0fGdT98t zN;OmNpdx9g2p9!g))Or)*bf-nNq7-GYlVL_quOF`J_xD#8^!a{MI-x*jEdG~>AP;C zeAfS|RJ_$nf|{o7;;mNxlWoVS?Pxq|8(r*qleIG?D~!_Si8-$^H{LK7=~rU>m8;%Y zt)e#2N=fQFEv8giMyam8A&+v2_EX-F8sc>ZjN2qd13@+I>u*I19opMpttz!8VOHrA zLP?%cBP>aHCNO8`_c&(uc86!Aii~pZksg5-X^GV^cndo_ON@%|?*xyjyK1!xo-H%V zaxQpw#IUXV$|`PZM))2k^}*xT6apkw8Z2dvS}0Nvt-}?Xn;A<$$ zXvMj*pbpYFacw<+#yPX{s?^t1{={!JSLU1a0pVywmRjiBI#*4P_irN+skVoF9%`0R z?NqMWv2r1b!`5!9o#8?LGB9b;_bt?Boub|H%rK3F?qn_mD$gi2wz#ij^iprm=xCIl zrr)-Pii|pfp494Tz|_+|v?=V@REbfCO9v^G4@5j+(veyn7p`Pj& z;9=mc(|JfocT z;KD^Y>+P%(Ck!Qwc3ZfRB&rOnPn8l>zUHQ z?|@N_>Dab(C;R$P(|JZ&*`oe&pRqftxu`vdFZGK;SJ9a_U27}iD2F(w#HhNKcBPJ7 z+v5AGz2$>ZYr}fm@R*71Q$H$Kq>M^vK^oYt+}L9Jb)c?wO}izUq2m;rhV9CMq?u(@ z%c%HIY?Fj@r;tt}(pV&2@Oq8<)X)<58jh!&B@}5}IqSEZe_i;Vtax`VTRJK87Sg!c zd{KPea!$rwt7qcq((8YYqhT4BU$>fqW1`1pD2Hf_+azOLMNpoM1kmX=Bx?->R!g8D) z|72^KQQ>%d`qD5dc3)UqKepOig;93>IGj6~X-AFn`N)pnJ}hO`hnQ%OcYgXjCyJeZ zZ<5{hDv|Q;gg+Cb5bM5~o*cZIbS}ESel;||rQZ6HG2KG<0i(P`7-<_9(VJF!(-wP{ zXVeGjO?aG2ZN`Yutx|SIF6|xQBh$O&(d7|$W)DJ(nTEH9O-8! zt?4x)(g`}6y0Q@pYfSfykLhoXjYTJrqMWc50zug)n_aUHb`|d!cM=>W)z1qmG`xxZ zl=oMA?+IlUZm01DD>7<2Kbl2mrJnueB&~6ua+2{LyAhmW88;jg+q%rC@t8lGCIsvT z4M|{ZqKc%|ETcLi_Gu$0Mr7w+YA$`Ht3b^)-#OO%L)Bt4@p>(zrdzL#){3w{jZyol zuAFz7U6wtFIk7a_)8C2shk$a^If$ul@uxeGAka2-LyixX*E0&|==Q5vVsp&Y~E7P9^P zPDqA4qZ;R{8dp+_jGE%z-TmY9Aw3~|XOUh|Via4>8~2DemO7KI#3s5TCQO2^Wk%sU zhwk|MVL3rVU9m6Yz%!x4>8c3zh`{j&S5EE0iM!~vg-7I!UT>kVg{8(xc8y%-H;?vl zq>63runzk?KC_p!@GPV7Bst16oB`(U;osis2~urc=m(P4R!VDPxA=f1&eZrK>7J=u z#(KOKy5OfDoXVON(kjBD7%5foh$zn(_sqM*!MPz-Np-rI!U@v$bJB`YzC=i}bn zl#cg|czcu?HJvALeEzV)sK$60l-!_1AA73bAuUbI;tryUq`V8<;dEGwMw61&r8!hz zf-eM!oaqbX0}VhFSPlJq8ey$YjzYk`wK&E;D#!6UuMTaV+WDPFIwTV_LdusKh9Ivy9#zO>dXbbuM&*i>etr^H8=ZnWrT* zx8(+j(Dwe(HGE%T)UwH>&#hb9ld+LAsiX2dGN+JWUNz~QjuStr?qsgd=ea&!e`FNT zV1*pDiP32N<%r3jP`M$ZF<=zZm@~3QThF)XoDyg?;Y23SD0PyGyx!{l-BRBOJxN+?^&Y7iV+dH-yAECzH zd+nFV9x`-EA4c!Jb|?G^YU!~4B`DjnN;HK=U0QQUq3Pld*PVC5sHuKmW^dWX`vwpd zEnw85!eS5pnAg(HC#Z&RpIqsyA9bh03-)Ay%rgr3RAG(RggAN=J^s$!u1efQb^1l6 zkwP&kEtK*XU7eIT?!$%89*cOOiN*c`SmrmRf|5{Ai16KeGU;m4S0A3npDAhOeYe?{ zmi>3CClfz?)a(PRBt^=JSLA4HFBqenB(|t-;l4eCUrrPcxy6pPPu*eW8^I5U(*t4kuj z?is*Ws@wPHCxjDz(LNt-?Iv2tte#kHZC{5!IYinwihpX(rC)PB<15wkEnx+T&x7a`sq zVh^Ie7*)I-^dSCs&f~Q!YRh&d>!j!yMaeN#W>&r_ z2^*&z`}tad;&^Ed9^R^3Z25`8xjM_JLti*o?>D7Jc{{nB*s+SpM5!=nHD&Z0%Z8X% z8o9c@pKp~~T}t0vh8aZfK;f63%aLPl%7x!UY`;{lC~2A5u`|KN*h@UpX`(P(!uCRm zQA-fHVPlHp3@yTMB8|&PoY@)ndSyxLNgDA+umcfP?`>@#Zds)seK-T^5w)!%sH>l3 zJzU+0h-jqFKk{%!{j9b>R`b+gBVT13Bv`kLO zp*_Y|mZS76X~!q}QF7;a%uCdB(K0Gcc9tEtml$4(bCE4cz^FJcO@bpEI4RGlh@V2? zC-&BuQ{$ZCteH5+Gn_+LU1C&wjF-Z%?8&qf7iA3>Eg>!{%K;Pr@^EH};iX0{3U7Tl zQ;{-O=0@~5#8)dUXP??B=Wn;O1eiv4#d$2tC~(?2hdYmgQHZFwBu(F(+@Y5(>Cnqh z>Ch{(9om0Ohxm;!3U%x$69MQ`qWfO>uSTVh5e(iZ2z0qw$*cZY<0v#OifZcXvZsG!B-zHN?JIpgDerX;n{xYeOR}Bx>eoS`{7q6?^~tR zPuog@%6@dPbF$UfVXH=NO~XA!XEGeLxt3>JZ5v)s6IY+hvnuccI(gR?o!+^HEsF}H z(7W2hR<9G5lFDJc<`Ot&Zbx@Sef!|E{e`zlkEma$8XA2sb5ci z>$A05@}``+>zNB+otGpn%p>5bi6$H$Lsa+LTv)u_Zz~Fl`kYeVcfnWOLJNORIX=Vt zF;KguInsxu?W0zA>s!4XQSbg-{Df`KuX%tj7_7{(dQKM6Db?=Q^zc)C;ev-VX_XeK z*Ysq+)GwQEDlo4ODRFDQL<5~JGMV&75;$b|M5VXpzvi{E8Nt>t}~DdOZl z&!%b9x%NP{w<0-$C(M3PPOqhYAD5mRmnOWrf_gvog-jIZ0TvXa@?Vdg1o*r=<;=f; zQH^tQwLK>*na2EF(E-dZgbsxFsO>N38R&3VYjLjCb8vQ=4wK&61Oe^r6i#1F$c+C5vmYva2v&t7I3#V4YFwMi_AUp3Xo+dw?`DQQio;pQ0?kLL^RLyuf1YXM{X z29)Ox78#`{Kjt@?I^r{faF!Zu5BC}xz1HZ`k;2j9d#u8OwrCf70&w2O_|mpAquSt~ zuyK=##d`_IRaRemDATD<;s~o1Msb`~dith#gw@lIOot25hfeZzr{tIl5a~KG`TZ~* ze#KMUR{6`qEuLC9GNig6xhl&j4>s*~iM5*OcH~?UuZd{v3zvi^c>$x;XejG)#}g{$ zYS4pz(CM~noov;4M)A4Nh?!$bke=MKDk{bHhcd-ZD*-@d6lHpHFE!TBJk@cgk1tD% z!uL$=`0Yb#r~4@np8tB}s&-H4EK6D)kNRpWs13t}I@?p;%|v~H=yY{rm#ZtLCI)H%gPbvC%{q(#MF# zC$W85UtQVC(JBy?NIT*&k!95OWhgc2A)ir7V<%iwEsnQ#9332E>DqZ`ZMH3Or&*sv zbZ$g^Vbnb_#E@OVBU@V~Qj97xsyq62SD&S+llS7S35d9^(lJ(_2swUXsH43wpV{00 zCK|rC5uhB=g(vnbL;eEm9%?~wHa)K}>Uh-T_`|Fj@Y#Wg;DFUq6Q@CUaawej9Nt~9 zGJfPxdDNxQNS-wATVDoH_M6c#wqqFnG3h*Qv+Xb`IGBZYq32znp)PFU5 zUcjhBWP$yV?y7VhANQhoQ3p5A_9p3Bo>99uc|Oh~Nm)s9<2AW(c{TH)QIFSCij4YD zxK3vHiSN%Ff69ZuVv!K4@F>srm*$CnpTN$Yc}>HKP=%gf#F_^oMzD*VXf6x&dQncD zs?utE6Xx;pg`5CyN>E|c)6E=tKENA))QisbR@>#7p3iC*m4#95yXM*08k4rXlyjC* z@aU^n7yD}4u6Z_>eUv^9foLEriTa;E|00yYa% zYN}?k$6B6nCKm@lL^VORpj0)3at4wXYLj?!COMsFRQwc%Wz-`ux~N1*yn+3|yZqv@ zrl+a@+Puoc*#PHZeXpahOO1X%VANQjUlLTZk7P?)B8weU(wx+kCl+ zo!6)f2i?=^z9!C0^RSWkjA9>!#4eA005MOP81Ud-WMV%CMaeM<|DL`5TOdbCGuVbz zMY?WbUQt0wP{iBra2UEt?BI3%3dg-sQ52doqio8YlSy~mE7jg=)x|k6T@^+(;lvSm zB359Tlh%*4{_>Bt7`VqxXJtmUY$9o786~CO?ME?m5_>&6n};Ze0izIOn|m5|xFk-% z8Gi##qDg4Q`Bs8*9_w#KJ#Bcbzn$cK2VGlHD>{)=le5yr9)74Y4|^V z_Un9x>J4QyIqKuZt|c9WY88^rF|&B8|J7)RaF$UsMe4C9k_L>LaykS@R^2_I)l;p! z{>UgkX9)2a4$4_BC@04sG&3SaMme7~J1a)kXn6SH>xE1#H;EaD^)yBWn?0V13JU9Vcy)d5NLw$EcC1m01DUW3 zmv`IAsgZ-(1#!AgON4qwc)6$fWb9DSr7O`8=+$`Yn(yuTIxzOn9;|x7#7(F%Ya2N{Bs-13(2l~xV4ev3@GS}Sw=x)bQ@~* z?XV_@KV0}v^cd=SFQ4U2i(ElGhBWhn`r;G)uoti|*QH#bOEl3HTHEB7rCzbe$gk-8 z(};t3H!u8&-?EoIE=r7Itr}17d?;hJJ-a`OSwS7Nu^DT*?A|2(8qb1-@m|}TNO}HbY6!g! zrx!PyTFEmi8LOLkdZ$pWv{0KA8RaFeiTs4K^rn^Gw8fs481)uJooU5tNPSzTAyKfO zZ=vNJv_E{o3%{%OZgIp*-1$G^H^?tW!8_b}-gt+Gs51wm)65p|SyW5dua)d=Mn$KYG4D&7DJthgVJXl3<{9OZEM8Q&%u9qK zyAahjP4}L;FAA!a&(4t(qF1Wg?nLvfWa%pMPBFT|mlq zCs!N#6rn1MMC*WNCg({f=!%;03KAm-KEL`zTN60dZVV&)Ge@LtI-azrpJi11JNpIB z-?FtGFbdxxC$1k`UsoqN^3o!Do|m-fE?vMWSWCSnS10Sve&GEIjGB&{p#$?w?_W6S z(ur}thZc!+u2i%2RrJTcNr*SZsEza_G*73SwW*v~>m9oWt_pwDs&*})5kjqt|LMh| zJ=Q->z=J*9wV+z9Zn`pD>}3~6@(Xq!_D&$$1?0t{z5VB{e*fx`c`6kMiumfv(WKr8 zkNT^{e?=!+*c(y1EjrJrFkIt>ql!^DHLsJ>LWIyxLad-?MMgn;g4ZCL!Mk{q!Y_T6qeTJO8&LGfH7M4s%JvY^b{_1Np4Z%VU{NwlsfT2V8VX=`Fi zef9EZvHC$SjdLDZM$NdALG6*C(geM>Z}Zs<^w(+5Qj51#zV~o+SxSn%qHPmBB+<|! zh@ACNWqKO*y6({TN{s5>p>!8n72Qc~jSxqoegS zMm6f@TZ%}zZ7|1eeI{u9R1!-Fo@%ncs(`?6hh%%Mx$>kZv ze9-ii#2a?RI)paMQ6}J@!>AU-!GMnyf>+@CL@P-aNe{DvCCM?>llL&AdyL`zqj2gM z=BQWZ{*GjHnNe3#O^)tL>TS0q_4utxebtRJHbMGF2f>|M|2g@1pb za?%^&34QXkJTcsBcp}ZwIkJM>PJ=; z1$B_V`z`6vJ3Numi+(ES>5*NEa+a2eByWjMkzwBWrYoZ#Q2_oZFL@(9t+Hggp4P~X zda0p4r#2Cf5w+|S`yy#ovGlV`-^iF2EVW}Aa)EYWb7`l0t!9h9$|#=2QgSXV@0a_g ztVcU^1)miKMU=Lq?!R91YKcp_5~HT`YKhO?mX|h4Ip}cV11cSUnR?x)Ra(ta=?bI5 zzpZA%1CtqbaB|wS+4U)06Lu~XB_K`t#Y&}OeJAK=B`YXseBlF`@TF?TzQMBueHH#k zcRDyFvK4^5`GHKMCV44jHKT?Oqd7uW7fo6-YmWFUozmEjjhZ9-%Q0#?&9U#?cfA)f z7J68PQH`2oyU`rmaqcPUj5@=$8q*xL(HynW9Fvq|mQm0gXV0KHVw?*kt+zRm<{19X zAL=wmj@OZiM)ukbjEU~k-r)>M~`x@WNd4<8|`sg z{XYBW^m{&sgHdP=XpI-ew8k#d8oNj@=_GwIU{n|7-D$MOi%4tiB>e=MW6tV}jLOZR zHClbKD0IyjQCN1Cl(KI`GL@q;#>?dy-3!tj{83>P>v7Nlj}mTlI%~SzjqfIV`^{FD zgZ|bY)8FEnTb5DnG5xLG=x?Z%cB8okjDr5AjsB)7_at#-Tyx7aYC8QbuDKN@t=Apa z-_-d|q`%FMX>KJ(O}A^g+em%Jss zuBQ^*09j*Ny^C7iazK_*k!-iSf{H@F~%=wWhyr`b*&t=kqNS+iEtq+m4@#PmVJj`Wz8z%wdm&$}+JP z%-#uZ3N(D-<2e0*FE=}WR=HvDs-4`2p$(htjm zB7Wi$xIMf}2>NqMo$H;0uiTz|g;A*Eb^N47uiJs$Ml`ko-Jw#82(3>8igU8(-)w%O zzhf5WYWqT)N0w2@Nt+f=TU`^{!sm&jsGPxRf3A$oUyQ2j8D>tRD<;W{ryWj`+cqej zX0^v@PuAu(*f&sSREp#JGD+qk}Ldm{n^tR>msfOv# z*>OpjWz;zdk)P^qXchXfF60YX9q6_3BM|mF&rJAEY-b*_T7w zNCzpDB}eL2TsGqug?{Od(sOu*PWZWspsJYlmROPAB$<-zXE~F62R6lxGxtRTe?kfZtKG&EWT?yfYV;MUhcB z9}q1eZ6Na%s5@{u+Oxzcv?`)WtZ=8!KJa-bj0#&+8j_B4ESM--v0hSH=q8HI0xLTjVd=DB%Q$yX{;^%UogodTNsmCN|>+Bh(g_s9$s#lVD z3vbrJ7kLZaQ@MjPq;Jc*yTkJIW7KarmeCL-DbmZIVJyQ1(%O`pvu{dk7tauTn?oQwQIZSHr$lOu11e`6PWoC7&~Il6z}8oa zz5J2xiiFau=?_w!*N5INIypu>DQDQNrkr;fygg2R+(v6RZGgU-7ZlFX!=4FepV^Z% zJM!f_66Ze(3Ol>wdwx6W<#g%oZ={UnsEqJ@11&3DN9+x{+8$hadt8G7YCY**>k+B) zPU*>{m#6g#&hbTAr=7_IC(Ee1i0aey&0xi!vqeE$euYqPdZ?L0C}7v#)?0$rq#-ZI z`Vga1;TUo66TBmS5!nrkFmBMZl;>z@3MI)A(bUk>lF$^$_P{J>lC+|6hvk1+P-X`9 z9OOv)L&{1|XdY*g{8}Me+PT;x7e;B0rC28j-z9CT-(f9^k+nqL8qrwP#sL|NwmRHv zv+odXd$BiVEZQJZI@M@TE_jF4V7ftv8IKAL<58Ybko9VAYz#7^vPBjd1w6(gM$ev# zF1=&Aafs1g4PAbRt*>|vb_`-P;*-B4J`SPnbekD7PQu;}sagF_phgynHa1<&qE@o+ zjB=zTr;I^{*MfJx5gjxC&bW>l9}QBmS}wlRO7gm~zrDWBN{ni35gzSZV)YeK--zT< z-e?Y$cSc%ALyZatNv-IWj3Q267h(tcxg0-dGq0^mU7ZuAyzEM&uQC_cWVIQY>1FtB z((eWJx4%E^Ie2+S#YbVDFTpu%u|8g0`9>sDX{D7+D@?y0X~)XsVz0~0(eZpCqtF*2 zvv`G)xGxo6CVTOyW|vc6uP|yI(rGfMqA~YeBHS|?_Nio2YhQZpQjc|=QQ;|$E@iYA z_Ag}A;m(Lf`2#<0=|IYn&CUBDMp|ofI`6*`E-d)!g1?$gb52NS0 zJ;6lP&n-6y_{8c}R(pizs4=%e{SWh_8s|3>qLZ#!Mq%cZW13?{7c&{Shj*`;K?qh^ zn{TGRh?>c-vRpXRILr05s{IQJ=G5bdG8Ym}>)}H| zr7AOOrpSLbK50eLviACC_Vyz^-cJ#;jr8hxS{!>a(HHPun0S9&{f7GEYTF-~$B9oT zuBLR%8tFv!T)&IjGcRdTF47Z}#x+4T>XUR@fe~l(-u@z^pr@iY;0?Z5ov0s?ONXV) z(pFv_@3j-gJFM_l#3rHNBfADP(OOv@=P%?ofm%p_BiDGHqwt|v?CE!L?;!rP<-t=f zXDD&0I;aO`-zB;UcEro9Fpt9F6RqteF%ys#n4x`F)VJxI1J$K|7x(L=1eGKT(1Y{u zvi1;1MqSM#`99 zW6Nk;dgK??-qmL8$C@4N=HeQ$`KGsBBL6RgB3tFo$&9)atGYzf9o62t^WE3fStr;7 z@E@+~-YlyHjyd18!lt$Wrk@E^K{zDomDXAv z0O|2AhLg=nfE%j=*YCm3kQT2jX@yDln0=~AsSd8AJp(rY0dE3&R}mB;?wv(yD|X{v z`!c2F=Mo(2hid2ZI<40+YDbI4iIee2obj2TETbAFrLB$dLZLob7pESz(bP~Ic%GLW z8)m9yr_svX2=Dt;UU8kZ)5LQC(QJMFnaPzmpiM9QhO}vkQP^F^Gr_;-?M@Qo3?t6h zWDjI{U0g=b6k(#W&dPh#WEnee)#YAyC=piKr)-q;iL-#}7{`v_y66tM(Qpt;X*sQea|*oxPY_E-@+|ePi17?Xw#BzA=U#II$u{feW$c z_eMGWa5g-Iv%g~>2z@qCyM8V^XSIz`>_|@$`M4mLJzHub97x=-R(r!^Tbj)^X|64F z4Fok34yX`M)wpA>uDLeRH7}@*_vL=hyySYJdL+Z%=VtC};@a7|$S6oSXH<#zyWTsG zHSZhO=E4VllTkZc{F0=FGo*KXxesaXwrRe)FG{n_D4X(3X;v5&{;#B5OY;(mlAmyR z=Z1c_?L)9z+%+oo5G28~5@pq04eMZWF3Tu>L%pI4{W+8qo%ys6`i z$W1xsld$0B8MVlBy`(|3Fya!VMY6Uq;N9TsBBRg}tvC4GB5me6i>_*{Fpy5TUWrj% z9Nkb2;d{@d*=nwBbS;~-)c7o%UO9PRPHi0-XgBH2MtYQMg;5>m=^S&_=6Zz5Ri6V? zFXbK2wZr5#$6T|F(&p|6y3XCYhDL;2#*d_H=P3Oi?i&vnb(Fa~+FXwrm3KgMrnj=IM$X(I{9t6s4OV# zTnE=so1wf;xFC#r9`SwU99yf?^@_ClLZ2(LaIN75xh4RgKw!VkwS}(Wge;>x^R$(& zptue9RDxOITCS0RQG5;p_GTt(r^mR7LUbxko>5H+a}EMMiQhch3{Q+sL~D8O0@Jugd+aXO%t#wbX>RPC)qX{j9^N6oOaWqZHv zs_V`9xcWUnU5{ALyIKOo;GK5=(0k$|a$_`GJ0b_~iAH3*T594BcNegy(($_~pFE@5 zHkdQPssG?<_!c)EM;G5Cy|yRh5frD7j$+JC@yy-E`!S#C`z1!Hv5@+qcxgyPVCBtM z1>SLqGmguQT8MS~5lR}TJB~nW4>itzbk&H)xsVkpBi#+s9U_%oOxKeso%M)dP1g@1 z9&*4^j_xi(q-wer>Do!x&m)30a)o~mqa@~3txS!j2^bYGQ#a1Sa|z0EkqcC+F`Z{r z8$Dr4#}T7`L|+U9)j%5b(eEOoJWxq@?Vt~*p{hb%{D@Lu_2|a=xVXkpW>j57;vKi0 z?@lIp{hlLpxxT6dA^~J&44RbMDgIg<@et8%4_15i`CO}J4Tg1yMdnNd>?rJ!$j(_t z@o5Q#*&MBZHj%03^GS-K?5v{tVw5i$r{+F{XdaI~$C19m4?dr{68h@-qED>Motq#b z^5G-X@igq$#q&j)w0LV1zJ>)6cGl+xWJ%H@JUpEljopKPMBL#TvRp@39LZL}EJ?Q_ zX*JLhM?=ro7ceSW+uOG20w{#Z<;4q?I-mY7p}#DnhUnM-qrXqnAKt2lb>QHFc&}|d z``Na5{sP-;qZqE#kG}hR*~3L*p|xF6e-ye9Ydf*GFTwM@D)4#ayCioekGTs5ON@ei zxuQAkoi?&YpUt~CSLS}kbgeMzz4YrM z`uh;4vp}>U?%^pfhqH0t%gjf2gCmGBpYkq6jB>hubOf>IQ{Knvnq^dizRGhn^_98b zVb}S%@-71vbme&Nf}%UbT*oN2!Ngv-qXWLkGs=l;#^VT?rcyy`nk36L63>lMmfAMZ zJM8nW1Y-pcqLxaG3R*pSt8yt531Ux`(oR6fkhIE-iqqi6atFQ0y~3zAoFzivB_>-| z5jYoqhwOOetx~GjSH<1)^o87x6TSYk4kwpW?|{WBZ*9wGFEo~phqia!g6^bR^u$7E z%Fk(9r-KW{Iw8$-<9!47qpYK1$A{0pkg;)^@)z3vc*9){qq@vLw2{b0ciZTcMUic&Eg` z{Yi|*><3I*dZzt~kZr*StoFEQ#+ag{e=(}`fElgqjxnC&Q+yW0JLp|eaRLvqkJvn=E_{2 zQSacA`?a~y+nPC6>I#!)@q?CEdCW(egEC*M22|=QbH+=FQNL-TR94JQhq-C!I+N@n zNy~T(SUMsK==WRbcjbdd_vJVy?3WvRi{~8A>Mxk@9ib)sIF)l_i@%#FU@83B<}{vX z|3YN6)M9v^aPdVC2nVW-D%eZfNWiG@oN1`e;@PI$rSvQ>X@znEhv)zca{dD{!_2ij z>gb}N{_lvidY9z(4nwu=N8x`TkuLp3O($QO`{6y*88<7vi2l?{m6Ei4T{hG&$lbtP zU0dym*G7d=j?v+wc66QPKwWBjo4&|skI}e+To)B`UdmYHbk$i#wc6Pgq62g}la9ZL z-lh#QU=-cyscpC*x7^U0zsQu)ud8$Ah<0_Nv|N!<;oG0e#J_F)qI6LtCrq1hD_`8q z@d9o8mL;uYr?#W(nOdcED;LH2o;mrHr!um(lZ^U-{t)MQVRKr_SnEIPNJ&4S`|O9T z&V-cDdBErYvDo2SHSE;FjpB5z!G zs(i@yA?9`Ci{UJkkwsdp*V7lM zNLmMt@9~D%X_%072PLYS&PC%8qxMBH=0dZY3c9j6D>3gy%wb1)jq8W7i2_D7u2Y3a z-p|or!vj_3q&%YzRA>8`H42x@{-Xlr7XIB4=>s?gR;Rj(lGd<4&ga4&pYxk1iF;fX z@YzkS@|!S!FLWUqq0V(7qK;D4svb^_HxD}@RS~1hIis8KH$1adr0$8|_!7HAC)Ic* zCpKS_XQx%u{nPs4>w%ecCg>O_m3pL_$qv|BMY+@f%5^SB5NaMC7@sxljH_hM4;a#AI3!1TwoYH!Nb z@1!O!2ZxUj26|9hDAp^IgMsu4gWB>)f0j`=*{fQu^@hgTtzd9E{-QDuOjLi_$0JR5 zZ!XWM@PQWQEB9y_Rj&G$838}DuRnaJQbk6=gDdi~u5B? z*rSG=zDGHA3!hq!%rfe5>n5nP;KR~~h(rGMR~b7_pYpJb(2>5%sC$2JG>vcmir4ZH zdy@P69?`>!jB6b+Oo4$`ck0I_@>NNA&uqVl#+yB{1xjy>*zkqsPLZG_{sinxa#B3 zbGEz|*&a%*)d8c}3k90q>HB4``{yMcTdF*xX4+1g6Uokzb zgMGVJ!(~Rr>v_5wt}yCw8V97W{!6AS{Bdje)C(DVh8jFTJG@?x*C}vbCZk3=Xndfj zZRRPgi@9{)Ztep?nW)(~y~4B6p|>2!$htfAM@EH@y(D#g^fMW(b%gJDh7n=sAGw@G zM)B?<>m7sBiSqQeNk(?{|5UmpX*JZsl=BS#(#q)RJZ5-oYk4M9VU+qM)xv{MXY6{~ z9Fse@(1-t+(U(n^VoOr^t1XjS+s?v^x5>@#QLC7U=-+c*5x_(ChDhfzMmyb|jft zVHD4H-y>}qKK@5;OEvo$Ua>*W`f^U|@mDe-r4^p~Vur^HtmpKBFPBa|mO zviHrG>T?Vj#oE~ICdc2K9Gz!)C%Ssmi02+Bly zWlfE(%|7-H&JNkMtT&z2K&>SCHQ7ahpx9o7w(TgZZI5gaZ4c=DkmautD|c9L(vcPj zR58l&UrNS4i*l55BFEB@nh#c_FX5}n z=QEX$*cNK!^}78ES4>y;HWK-*-<9%audrMw<&(J>a1Qq0s}ujg5t)N4qR}c*KU2=e zx#Pe?(59`mN-aifebq-)wEinCv0_D`HY$o$)Zhc~*{Fz!c=`VxGn-Aw;T)f3H@n}R z`ORnfIc?+?)PFW4Ha6SN0 z7@M^Zm!irC*llIyp1g|rMKclN!-8aQtjTc-db#7{DJe= zdRzm{RQEGnqVFCxgWOb4rF@2BWRfU!Rdgy@c7sn4Np<@aV&~LUxm*ERP=aBd7KJlI zR0!=&?AkUdv_I~&%1?B7(GpOO<(j>xZ#aWyL8mo!0DPqaQ&_*BwI@j{#?bcgETkyp zi^wWTX+QRW4&$?w^m}MhOb54PmMc5Oc?qJ>Z+xd%#QnizLv`3F#XzW%M1|i1-Ge;Z zG7Gu&6L4!6+ssVO(xoWM7EwL8kuKqX9n7;cM9D|1TXFW&BT<$83I6!>-9^d;3bXnv z(}MMU`vPiP9mK1G^z2}4&4riO3HfA*_Lqzkg?D_5#E`#kAUnV9xCVl3r6exUsaDKy zb(6F|DcW7Z9oKJZZ-f}V^y6Y{@&eApaU{J&Ro2N<7xY&rzYW6)b$!hFGDOYj;&n%< zy8~lR7*8T07kflb*g2@nkS(x~(6Zu8Cx|oQZ9^x>K>A z0&Th`lN@tacWl2cOqQFq&1MVdcwDw^63*mE5!C>?k0=6dEX#)S_ECl?IrwePBj&M{ z7j4Cv>^DO>nPVSuo?J`1J%aX~T4cKzfj&lE+S>)^N3&b|P}Bce5`@Tv#}W=A3L_$n&-nL}8AB7P&3#fem-r1K^A^R2py( zEzxBsiNa9#bzNx};EUK;hCDi`E!gjoy0EgIQ*FLzhA985bf-H~eG|sfYz^#Vy{YXK zOy@b4K60bi)EgZ@eW1G+ySU2bt`rvZZ}SpxS}Q@?0hrz$pL}mPDnu5 zJFs4un5{I?5pG;)i>tywr<+Bih4VazVn4EI^qQ0G)~+`ub=Bcm5X$p}8y>LG#+^vq zP674o9B4;xgvp&VF+J4Y0TKGbL7zI8*J zAeY3LcoyjHC5)?I8{AeP3Rg&?Z{2ycz{IhcvnhR!p$3mShKR zst(1cwKY~2LJ%kF)6j8t?~29tJZurR2zMFwkgWje4}$bGLbwT{aCaO3`_+!1Jy^&` z+A%6>B`?x-fG*N^o$C|3wz5{>?G#hW4cu*li1e@oW>~{IMK7k13{m~>oNGR0O`llOb-M z>ZdP)JEy9*Qgd|u9>4I5K)UJ)=H#>=4!o6_qrU`m`YF5Gzn zKIOe(M;MQm)2f6@sTcvyz`yx}71a%m;YivO<)DyAU4+7K*Jo_HkRTU#(Jm=u+LH z=(pvB?ZDUKQguEX-B?S-5qox$5f>}uN8Ur4c6pWJ?#{j+S0!}q`O~I z4JIhhOGU?0?uZ9Kl2?jO{Fl}8oJ!3kn9}k*TXbr)J9mI)HnJqiUk2M&)!acBQorQf z1msy?O5YJ5ekzC0gS+ z){_fDZ3(8d8$$ImL*7WFnlYK2uiM+Sm+`z%Th;hAKN!Ds%*Hq5oRHsg$`IA>Zj8`I z#qj4;7*+iZ%Ie|*H6D#xvAOInF!fUmF>4~Oc2A}-zrbO)FC%LBCZ|bJ_XkD|ShF!J zPE-Sa4Qc_b?(nrTlzUjxaGhYcprPA>^VuS-N%0f50WH-$o#bWJ;wrXoSk4 zn1hxi*jg|44b-V|h5}L6F0NIFRU0(aX^pFe_GB$+2uXVZeH<#Grg+#JH6}#0Wf#uW zCc;teI8oHM@#z*vkFbcB-=*<@tJU1j!~#`c_2+h;lnD!3Z>ZNA!Z}G4t~iXqFL~rn zNBfL>c;k-G;)vZ&YJt|5WY=xV9=B14p1!*cAgz6R~5;QB{)3&&{(U>`KJ zSRc>x_~q)ZSt<#$&sS^TI%E?w#Pr zX0Z;wL(AhQ$GdbME!(QcW{k%PqRM0Q!!^1` zb0FXv-M1GK1sV(wkRl2#`zy(EUpKX9;|sYZ8z<_1PlyNMcovRTaQq(}5IXTs4_m>~ zO%N4|bX)Mgi~WqkzNuL(%}-kLaj~^c&A3l81*LjTXDB7?Y;y$4-9Fs&9D5fBV4tLH zPO)4AU!OD(SEK+@LwlA($_Twi`$>ylh+jn2Mq*Z7XUHQ931Q)lmhEg23bZ=9x82SW zHM%EcmB!?b_2yUPb_JqPN|XoJXMPpjkpXwU3WwdpTCHZy268H@PdsA9nZlWjgSce) z7R@J9wq*wJy#!JD2TMmZMhrcsX_p+EdmV*J@ZpbsbMMW)FyU*7;*s z1)^|l8`{H7wtj+rUMiKL3-%&XAP^x<)N-x%q*qFH&NxwBScAeWN6j%I33}WnOTC$3 zYB1McaJN+};1l{G=6vEL7wM934t$L`eA!}gkSp8X^2aP_e=DYFi~_#@k6-ZfYP3X8 z^N0Sv&B-j%HRSE^l|tWDs}MdawiXvD+sYq6`_cDtPo0ToZT+Ia(u3cw(iu{#A>KEj zcGT(wdofbzTcQ@iQ^i&@j%URe_uDd@zna%x%dnML%r(){D$p>k?(MSC-T;1WT)mkj z3hSoFg}INASAq)b7}0L?x;`i$iF#7asF*19y1rrF*F0QE!dpcK!=!`T~&%k_8MeP=~Y2ul~Wb}mWOw2Bp=dR4GL ze}X8g`NKQ^rBiSo;xgpy3obqvs zw?@f;?rhM$W6tnUSQMDjx(b#1x1#=U`U>Xzxh1+a$0fk49k`}UEZExaEofz1Gq~RgQS#yKR2#eaM}qBt zow}KRKcM8Yub|qtn*T@h0j_s#x#d$weuk@WiX9lM<5#fmTP>`K(#$C$kEi;V9&JuA zwFBP$7~h?uzRGZVOS_+Bss-|v!s`xNMo04b02#Uv^7|`v+I}JU{h}oqX+Ako!Bu)) z+jz|orQitG!Xf`+x5A+@^37taT=SH}^Bxv>d8Dq#e&1HBz|^i%je}Efx}L(<9ilmA z_EMyDxadpMEPv&esx!rj(s5u7=O&iu8CABva;=^RraLyeLl==(sYaaW1$KO#OOibrhO%)#}ychOJNFYU8yt`C(4fl;nM8l zO?q7{?$5{6B_Xo3)S`PTh3l2+izv$3Xr2$JcuW!6Dl^KNVz;iRmGvrR;KXKVM=t%; z5ldO#%$31dNU1(rl3L4~yVC#Kr~%9g7QXKI(zif+qPy5yxKfv*+P#`xx{tM#2JEZ+ zR9hEtPxl74@J#49Q^#!Pp5gm8IC@2btw)n)e&i&Wy0~2T5!B2@oJ(QcPhM4~`wQWT z_VpU8OIJJws5|Eois_>_|&YIpHUw|pezSRQ2wcL=e3f}3Nv;3@B^ zG~C5899-KML0eLbp#>Wb+l8yR#o9_EDY&ye+KUp4J;7FhpXl**HKL6 zwMmwhAS&d~UMzOdx+F?d!+2d%i)$y@E$o;5(o_BlC3)!fvb9Mmrive_6-rnVPqg*? zZ!zd8NB-h%CzJAPLt(XQ^SVureC=&oxg>wN$q~_~oE%eX)yH=oT5DC;Z^|qJtNFEYqMCv${&Ds4)|VZgE6RFI5Y^Qr zV!^fY`2IKXyIN{KIa3hhqW)aPasum$DWb>%$8NTVfj;P!^|+=U<6Gv}!S6U)Jspit zFME#d%RmTnMCqBzH)7>u(!e(TR$RSRAS&L)Hqu6_yCZ4!KI`n?piBEVTpLpBCqCu% z_(7ea^l_qO-!NCUKJQfP>BM-OAgZ#b(_d}$zim{qjeyC7ZWh>{ZS-1@Pj<5g1^_sWuOWwhtca)o)N2H92y4eYUg=<3Rz zhvv$%s5{#cXNoPcc-nS1+Mc8t?2V#%Nbe{sLDYc039e{4#}h4_BD#-(oA71>yoq!9 zlSFlY1?}+HSxpv}Qc-y0cuzj2($Eo*9-0>5)aMfF|O^%C$^Ki@kgShUY(C}G;v;Wen0~IcjRM?YqYcI3Dge2-NiVM zXz_3_(krbvQ7p%6EC<|;>fhAc8M6{ZRmu^R09#T?qN05rF3md*$^*VG`iR>zDWZZ; zaBMoLE8G<@^E(|^H{Am1$BS{sHcH!kTFDmk__M(J=>S zt>gM0G59mC&#j_2iAt4ISc@GPpg?-G6qO-rFtjMpjsoV>Shmi^76#7u#nFTBz3k+! z(VCFgaaowI=!>TLCVm(xH|h2~+(qCDp3&usRIC}2v}gaG_4OKCxd37*jXX#X?~x9> zg%|(5A6Ier(rW!p*uP3tSm|A;7T0!^t=F|?;C$(xn3rT9!G90SLn)HjD-U5U%h^** z32K`qX!LvW4N`>1kqtx4m4qE`&itP9dx)oYM{{J?=1EIG<8c#Osn~YK@cU9t0pDkRHK4wFSXZbK`&vJY@U;H(J#~dziW8-EMV9({7D%YQ zd;VIdRH!+@RG9XvfiL1V;|Th|&&tQnlT1~tgj=clcH};vQVd8DmDX*lg}XUtiw+ifIrzfEqVF@U*w=Y6#`FB~gO9YNyLw;!gfx_6G z^~9B*`6JiiL)mR?Z;gd~G0qgWxWKccRg23~KJNU(ARGI35{jDQ&AFZWQZ1^(fi?<7 z+*>j>BLcsZf6%QHTyev_!wbAMOT%JrAEe@%{G_Wuj1*JRkiEV5eHZ&;Qn!UgGw!tk zWe4s^UIT6A3{#TbvFT~P-s-FyCvIKu=zYs`OfB3x=}OG^R^S>@%NDn+ceaz2mb1 zPF%0`rN3^mDBK3rNVuj=`SWo(A%Ufd+%?jH5kKUUUPgYL+A z>z#pU@9~cu3l}$`Om%gFui+`pn#q1d?k4^iOhf(I3QQ6eqV#41f`s3bOP3R8N8KUIH>nX>i9H0wVEkT*9+!J%wJGnBs`qNv1!w9X0W)T1C2RfPp7Z<+mpE!{k7(_JK~2BzgFm!=IdR8n_8}u*ggA({^SbIYK#+wx)R@D zU5VYGD~a(8^z{v;uNx}$MI*xa7Fni?d4nGnB6$PH)nT|tJgo$xI!b^H<9>!;NYVa$ zUr1TFA6QkYGOPun{8_vKH$u46lzQ7vBSmh^E3N0JRhMm`nW0R^)2e3WuXL)Wl|)+A z_((Ub&B~BKTbC%31$%^{WN09JVxr9EQz~7pbjNvQ*efpwtaobrCdf?MZx3M!6K;1S zq2X3TsDtgNMcb2TlRd|j^#%2bz5Cd=j(oIl`~n|mppS8;cCXv3kBJ-i@Uc7Hfop*L zedsM{KN3~j=~B-y`ATs=hH;kGC*$Z|il}aC_Xvq?ANd}}>?n;!P^<jB`=7Us zJ=wV%b<8PQ4$}KS6gwjL< zy4Jz#av$lyuUqoXMf;dmhAAvFK+iVi^&vZ~W;0^kpz-aS_zSV##lKMRP={9aLG5mV zD0ICA-02p&9fWn2I-b#R4}|DX`U_RFU5K*~Fy+MmREiUvhJ@&F8@h0Jn{gJl(L~R% zM1m-&gQ)b!v)EB`Cc_jbl1x?PAY&`_MHJOQp~bXq;UL;S5c5(Tt7z`K#l>A}Geo^n zywcTU6m2p@H8k=~tq{r)l@RAxZ=h|zDAY7iKB(y}!u%%;kD$&|Aj*;>=u1#NFw6y$ ziN(tjkA~R$jZ#L1}CHTzMK<()4iu z4v|o9SpqAo?#a7uVV%xj!s!uY7Y34GtMe>}3 z`<{}O&mp*;cog+crHDG3TB?%f4Z(GSW`NQvFPGg* z1nrXYA)IqW;hrwrmk8Q3We1#bZZ%VbVS3_cqR_gx^Va>*9Ayt*;A3jNRZ?PaNmpGX<@in0UNio`fY$ zEA3YoY}aI%3fI~4d+VHCYK~mjsj3(7;XX$uApar?zg1J;mUf&)B0mqeX{oimg$n8AMyOr zBvD=8R`bbsx6%s9v>Hj8`y(N4hU*kjxGzir+r%qcJ#2{uTf^I+HJl-8d*1?TVREar z4s$4IwR+HM?eHRSog=ECTFyjcPh!KP3GvaVrTO&zb&L%hSVAX-5UgvCsb}@$cU1%2vTf`Znuw5+vTMBu1TX~psO8WAU>+h&r#08?t z+QpETtT4|?(O=xY9UtKOBg_Zo&qHlE!n_k=4z3)(az7qZj^EBcE)I>o9UC3dG2eh1 z#gE}Q0*;H%<0C=TN~~+>__ZJJ^BXMJl0;#7vA1$9MHH4bdn?y6EEh<=w{k7V6k8kj z%eC&~d5(h4feW|$`8}@j_--k`z`mzrRo{Sp2c@AoAg~&js5ZJ7zeBg0#_pxwlpqRg z1GtOO@jbjpb~jqAUfhxR+TscJ;fojB$vas0!#us~WK8dFQ-fm^{5y4rFFjlw2k)W= zFa;l{c9Ns94GWG4(CM4z9xN2juEjFL955~;9ldK zCk;HDB}Yk8L{03u#X^ZiJ)+sZlXQQT z+f3sK)Vt5U@-!bXJiHm7#hJq0l5jKxwWzG^Yc~hud^w^pK1>8Tq+m;gaP5Z=LzZN> z_7Xk}S&AtYKGfp(R2&2O5_s>>-U(KQs6%>2q0OU&NaYW(MYdkAan>^cazwp}7J7Hq zwS{+WorF{4P$t|F3*|g!#RR)R6n?wYBgfmAI--y|NDG0~Vc(@|3K$1YfUk~Z9i}57 z+f=-d6BSl5_XHJRF;U(5%d^qY<;e{q3$-QcOX6 zaSX^6Rr_SY=e*ED``CJY?Oi&bsBAX|*Q)34()mQmI$LZi?K>9Zm9{~VAqp)~2;oh| zesNnqQ7>9rrykw6tv%LfjTbo<$+b^#`BtOXD`dDfq}ITo zzCo+*K&AHx?k0=liEq#jWS_p_q?B76HzkcGN_%K;oz-ZyS=2_h(+6ZS z+)lGfrHjf}Thw|8tgq)-dKI1+J{f>5uS0lV0JbS16a}U(%TKzzOZYnb{9PY`@7W_ZFcPYt9{2)@H-x^zT@eiI`RAc?>M~5 zcU=EI*&0aPuXA5{CWQPT5ktuvP)3REhhBRj*1w4Ql02U53?Q+8PaTDIf4CPBklMhX z)cu?uA(d``_NdycCg`ikzVBq%M_a^j^cCI2`h1PL#ucG>o%4N^JBzJ4j1OQKhd>x1 zu6+q4C=m4_rs+?MtskHk;f#4r*T==yCA2d`ev-YCa+AN}{tQ4afZEk3#a3(!b$w85 zE#SQmi>+~@XupQ$7p~N$!sv=pAs)!tQ!9gYfMA?@@4A)?4$(WOr~ZK|(uexR=qTgHh8xDLR5g>yR}cSlzA6=FYMlBvD) z6=E-8im1Ky70Q`UIGG3h`UJM~z7C%u!8tLu`fb|PDO;aoN~Y_@^e6O4pet%r>;8Ip zyE|$Zn40#4qubX)wZuiB4Q@XeY>U$T#0Rm5UnmQcY{wu@lzeJ;sSm)#-oHT>x8WgD zK`SxAZtcZ4q?1f3--6-75Xm2Kh*A%7dfYQy^7~KlDDmpuPKMpmt@|U&WokgV_J#c3 zNUp-(<@yfGW&gEbxxTIBx@Wf&|7)3C!?_0o_s|XxQZnNFFQRbAYg~h=XFAD0Y<4h@ z*wJ^a8-Y4Ok|olbK^ z^_N<8IxP^@UuxCq)P4x5{!*(>r*Wdfe=N4jzPHNyIlimsK-|^mB#7EuKL?Eu5f$G{ z`-R3k9%6lEd3;FQRBncEh-I2weX@|ZoSPwPSl=y6Xa{VFL8zaR7&ce1p4R-s;~!zZ5dhvE{0dCC%}tfSboNbvl$I8&$>9KXc1 zP4gFccdo)2UTTK{XlEsqTgrM}gm>$vvKPMAPIa9mie@|S()OaE6pYlB*=9%)6&$Y` zNwXw*b{+W)!e{=kzqXaueQjq<<`fl6&|c~?=GOG3yQsCYp_IcEh{Dz3)R+BqAn#H8 z@|=DF6vcmI_27Oaqg?8{++HHXWasDAjyO@1c?CS}036@TZ$>7s>MFkfDU`+Z%Pv&d6qOl@!?hQ9nvSsE2CD9sg{zY zXit~+X8$0dFP4533Kxa+cP#BWL|-|aZO8WVWqrq9Yd=hGt$u=L2-fl#E$_KCRPCQ7 z>Jo9LlpAQz7iWDo^34R61KYd4Y9)xmRb5v>+}e&Q1fQ-7e5oPOW+MuDB(MC8=NO_a z;_(uhA}XxxMDD_;YXaXI6-gWdUv8|zb3tt#*O81g65MGC07L8 z;GMp`6X6xP_7exwyuHeg6R(xWiJ3Z19MR{*i4tmd1*T(~VS#n83#~RCPZC50V@t4q z;!d8|Y$sRgG!#r-6q4ZliB-D2jj2msRq*F{#&DO&7SSdyU+ZL6aehC@#T-doQuO!1 zL77IWnr)6K+0y68_iEepepzI<8Dr0N{8oXe%6H`ucx!8Io49PPgKye@C%Ja19UQO? ziSr4hAbXj-a=$n%P85#0_jh3WO8lL3%;GRDQ)nxc5XrUFLnCfxxsrdcDpwTb+6Z!; zzt$0(q5ehG-Ys!J{37b#fju6uL>AA3PtE*obGV;0hf&$m=u&Nk+XHKU!uvpbh^e+5 zud*1-)RV7-{eA|l3)uhAHRLA(zG9s~{CF){(7>-3|A+1^kiW2K=Q7%l2j{JviFzMI zeH00z&{mFo=RZzq)!6C|+$Rn-Do+E`mrN# zjJDaUNfYyUeGcV;a98{a-dYiDi>TNgU#+#8dOq+im#Q6juZK69*EtEMmcUm4Icjj$ z6t>9W3(rI!uZgyyKS`p(i_p$W)D^jPj$8;ge#=j>be6x4wxx(7`@RzUUZR%WH_8=r zf$qeQ!gPixdS@9++x^P`?Erl#)K`^U0Us_`^u;Wz_|B6~fvI1>)1DG37BU&0&GOn= zqQ3T|Lt2$ghAzOJ9Y71S;CxxMEuPg{B{$|PH+~LJo7OqvJUCw(ZA+9>a}{-tlIcg_ z$8^Z=iNZVbba;1~dO8lmHWePsW(iVRUlU0cwkb@?m*B0R!u|83ZJBZ(XDT0mtlT^j zd^{8M#XjQK`3&AYLp>d`-jP32ZoaY3DX=C^FX>zE2lT1n)5%Xd;uJVT2<%6QI$62# z#5(FR^1sj|@bUW)zlf6i!!O+ZcyhF@Mt`ZZqHTJI(*#jyGZgP)T>rL;x71^ED7^h$ z(AOg>H%Z7gkYhZ!aVqNw$Ch;;Vv4A_nXqWVb(zrml0OW5^&hZiGDL;H9SGwH2;;Xn zF31xhG~WPyJ)*ymI3AvkfggYU*b!e>y1EpouR;D*qBetEM`I!0$5!Z01o}v(?SGQ= zA3#{*N@pM~%GrQ**u(i=oGF}rf_2O90eu)hX#yF;I94(7NhiV7Axc_^J+f7$x(rA# zibIwBCx2}S+nXT$$Wl9K89c!j&_AGFm?COxQuxPn7w|a`=eOb54o8Nl&*3TxPX@yA zB{*8t8^hoj0Y{Fg!{F-ZfP4D*Ivn4Gqd?TR;i^6G^tcMzepJi#-N4<66;zz4li=zH zaGV3jg>cMKPcKpD1W}j5)%+@Q;jsXYH_`Ft>(F_wu!cT_@_)U+lo}7l>-O zI8fs-k1vIB3_OcJro-5z2`JXRJ)mn=k2rM5AS zQ>b<8Iik?UqX?{1w{d^H&i5R7h@d${1)_G}RngWdjr z3U8dKV5qBwH^FWNLR}eNtW74F!mo4Li~hcf;=WICUzStkek^^8sGZfMziMo~bx>SE z(>Iy`f#B}$4k3i#5InfM1qi`mf#4S0A-F@b*y8T)79cn*?qP9V7QOqt->rJ@cOU*> zt2i~&J=1e$`qw?(eRw-UAE!y(4^=!D_L^x*eJ3f@t>why%-YKqql!YSPuafy zyTRl5wcdiQQ0K}x#5o&_&hNM%WYO;PshL-u!i$BYDoA}>OBXW-E^PtmKEEUy1=P3r zpEpnWoyZsR&$HIf*ygzVx{w1RAXU_IRl%xaRDWCtp}ei>bPCHY*apqiuAcd#AJ?qg zkCoZdL!P+q&ofsnm?I=UOWq%5|}#q5mg7iuBu zW$xwr-=pi$kLE7|lo@?qIp}8NH6l-^IsJMZMA>4I?ln;)Xvc??2Yb|^L`*3be~fTL z{9uet7SCJg{i<)X@MEQmh^8S+cLu5=9XtrIypLm7s6R5$v1XpKdVL)KXhHZ;bm||L zGM+Z?DQB(Etx)cvvwy7Rrpl)aU~#ru!MFnME@ZCzXR7(FnEy~;wc{`xkGEoPHuJU6 zIm#c|!LP=pr;I+fEMoOhM(??EHBK=f%LTHO=iG~h0;<9To5{!jz6(*{@U=>OMAG;= zdf*6<`oUy7Mb$8E3^j|a=If5amuU-)W(S3?(;zRJUwu+l@|vspt337dGtL}CRW;9* zo;X>Es3oF+aokVl=?LXSP<3l?stElZtN!{f+;ucaHTX*B#noC4@YSs6uoX{FPMGbwY zZIbv$2H36fXKlGphseEN?}l~C2KT@lLP+2^d>J9#$9Nu$vL`HvNf2oB45{m{?wRrR zBm5(;i&w8|PtzD|F{}ymbSjyl$8I=oIA@=+S~`O&Erc`^*`s`L`>6lk_u9P5&VmPs z?Ng|apOxYIV-6f+Zma}t`!1RmtZ5RMdai=d`sZJ&r zn8XZVh_Kb_TpT4fVyFBr-V%2>bu`uqkX_akk@Xl}(i75anq4Y!duUjPu-x~K1$-oQ z1)WI_>z>-3y+177P4B@KSqY?*OI`~%kMRuX)|+}OzjYQUNFYiiHcJ$H9>5Hk6 zk7yzIb4mH!qc*9@>s4vH!bnMB_?32>r5$>(t2CbUf!L4L)~>TV7B@_h!Ad=cl=U2G2jm^_`1S)#OEA{^1?voLX7;COHxv z!`+3x*#s{R$9~Ns@Q}<7ydkVcme*RMXwm9~wXX%tX~qmbQ65dg_+g#{%Bc0SZ5Sun z3&Nvx>qb1rF2W1h3%p#a18)8p1|9;nF(>23e`$!S92k=RhHQmC^u@j7-V zJeX>I=zTEwH{3Q$Uk(*xY1~?F{`O(OMHH4Q=@szJ?pGgYtN6G!}2ajsj zuLyXmF0mf?Zs3>2*Rlq5srW=NpHkGjS~qL_r%&Y8FYL}iTt-XAn6+SN_uYg9rq~m~ zf^K+Cg*F(S-+29pU{R_s)g0YgO`nd^20|Bz-K9^!UZzlG zvb7{>lW+gMhlqm)bG$fZd6Moiik|=2NMvzJXOa1`3WwgZ*f)tR#m;FCs^Sf~!ER5XL-WwVZ^2&NLLETF20o|Cucl9qVzKu*a#Ecr_svx#d`CFlDi5I0%neJ8 zr+=SdfwtC%8~%1B)~(T}(~rcH+(Uu&9p4!r6>~^iZ|lg+iCaKW{?o52E4K&mve31F z`bEzWh5m}BDu{Mvh_`1}oZ59URsM7J_-|HQ4yLbeuTy>JRc%U>d*GoNqSt7e=}a0* ze3Hvpx$`GzN8D7^7};iM$L{fP%XjzMRITmj^M|)oc`a7qNfs^E%u0Mg1vjh02RNc-+fDd?`ALjme{~Z);QUQsf@HO=#Q+A!8f{UflmGVNs z^H*j4pja_C6nxy!haO7qi^! zzezW1p*$!K1z~eX(>~fZnHIKbWEQOtJdpKI>{Tuk!dUagBUH7CCSCjB+IyZM>{Bvr z_*bwOm~8>l=tDG{k(H_;&KwvQ%L3}R4CT4fKaul@*mH6MFJDI_F84Y}w4J5cxhGB5 zbZ&I8x##{h=`y-@VwNG8Aj9zA1V=T!pFAL|joV*RHtX_;vM-+SoE#A?<_mP+&9s?& zKcrck&)oc6@=42~f{d{Ywup){{mO>$`nr8SO)WK`m+-xY|FiEqqEvlGwBdBmHB}qa zUSF7~gGACU1N*Cdyper34h)61&*M4C)b<|Mz7ZhD%%uz4p*iWTPLV03i7$itsIg}b zyhrnh*2MGI@A8U2G`CLTN*#V~wA&n~&}^9!gc>(WGm@< zAFPktxswKM^4xRg*@0OckNY2)X>~=l9PC!|+4*`7YXSx-C(u;m?Gq_0vLNFHqOwD5bu50=Rgkkq$tGMHLOd`_IP*tEon<<(HOMX3W_ch?Bmu-IE*qQ zMN7s{CiV~Wv^0K+ASq&*M;QF$^6ywXFP#kP{D&n?v{UZ5_g#8L3+#fPpZd*b38y?1 zj^%)NcH$6yH9_FRdyES1VAVF~1;B14i=z!U&h8edtTuxCX>k7D-!qcN@b+RSHtx~< zOc*Gl=NJ*tb$qJ>{xstZ1p2eS%3OUarSE!Hu^D2asA7!zCMW5y+BlQezP%tB@LM5_ zK|NqVZ0UUSBjkQS;EsH4T%)r-0W!s!TINQ1`quMawvhmwMBj3vn!In5ykoc7h@h#}r?+}8b_;k_|1o?EBG6$m+gwa}&q#^> zcvBn|I_`af`szIGdxra~deJcRd&I&n@BI8#IS1wl+h7v9aDtK$Cqn|xC0MvOR#D@Q zq7dfPpWx3WSVS>XC28MdQe%%&n_XkKizj9BhYcjdSQPryoTA)fYjq@qC{Xv0dRZF6 zc*6D#I`J3aDdCcGjA5`k5+x?q%k3R|yy6D-3@!{$fz?sR|Z@R7t_yPkB|M zSVjdquO*js1?|mB0%-fhY(07zJ^n5{R+snRd{mFszOlnF@Z_qFx8?sWS|M3?dNcO< zQE>>dHh5B%!CK-8YkK#3VE%TjJd!W&L4PV?tZd;NUwXW!(E@S|FIkhseTdiMz|B6X zp)^G{KrRd@-~`rx;^owWCDWEd9p@iaIZcR#_j{^IYNY>S0k`^yxaDR)%r1C?0>LM0 zzt_4@72jR!1Qv#SSll{VUoxzHqe<@O2VIeQ^|Icuf4?kh)UpA}oSd=<52L;6bziNl68rY9 z6L4>M#Ie+#b^+bkLd@A36g|$du$#B}$4#{z&)Z1$uj4=hSn>iFDy+kQ+*5P>g)$H_M&q;=SOPd5gb@b1&hLg zg$IjTcUS_`J~NGR@Wf~L&0MQIr;HFkoyD8ADSms3fvVl968BsUhdY;2)wf=PlaN$3 z;XyaEMRf2qWFQi+CNft5>7rtB`xp}xiP)5YiDPdG^g)HkChn~i-o;Nz;@J{@kYfCU zdYHoiPw#}3TXhsglp0N9IIq(y)?PaOqU?Sztqh_zi><;mY+gv!L#R1LTfhtjJ3z*Q zhFoMud_q<@$FGs!S)pgp{V$8-680%x(t08pU9 z^sA@Hrd-(3tGH%zcQkpNVXFd~W}C8iSWL^^ZEc-S@GJA|FIBSUu9hTa$G322?{;8% zluk1f^s&si-u@VLP+#y9e?_aHPoXA0x=rMPkqFzvdHrpsc$d$tfYBpct5q{8Fpev1 zWodD&OZb>D>Zg}ZdxAyN4{;Zpw2p8e&wvp?S+|yx{a^w*v>;KmN$)ebik8q6+==2$ zYasY)D?;YjJsX5vIwCnTEl>$VVOiI%`NlGYAJ1uBtHP2>-r*C#~SBwJ8U$3eaI z_j9YH^gX;c%%*_vU|bC56EkWE#U{}r=dh`PxBk|NP%2g7`~|q`(gP`ND6L@709T=6 zH#UvM1ATl_hTo>?-EdykmA^8h?GaJ2I4n`=jk!F+eh>goYjjb?+uIin`vXn^E6B z|6mO{nGu8YWTszI4gMM6Zn{DgO1$L$;6UTtspT z!L%$Y1hL826i$5CT!YRZno#9_{tffp;!jp(?ZimovpX!4!SmD;m+efL4E9=kg9(x;J~2KxcK>AFbt z6vy|uQPjD!qxfXBzy zo+q-q3~Ol8@LtKH1hDjMNjH4qigQNT$yg|JsBRu-d2{0MlP1c2PwWYCO%NGcJ#@En zqW*Pi6BCrc6bU)jh6(##kNmXTYcu++seV}Zrgs@*ffeYFHfv|>62D6O2rE0X_>~jr zXJc0AA$Z3KF&)MoX!EXBmg!Q(>ZFZLl_@Z$DJ|heW+TXE@)78yLWBA7W>*E(btn(~ zD|H~QXuAEF6EFu7QzE0izfgqFt{v--iv7&_81+bZv*my%7fF9CrJv>sgQiuLvo$4& zXl%<9OQ`{F3b@G5#;1-T6JEkaA8q$ep4Zx7*>4m#RP+ZX9+*olFE_@uvCVKbSgq_{ z46>2NX1}eW<;ll}gi=Bh*_s*NLOuKWxas>i+F|LYi9t!;+den^!B@?LMr;$wnR$E} zgQwwM;_CTV-qIoxS^y)X_=xQZYTnJ5Hgo34%r{*Crz3{gv^tRwy2dGgS%KBscu}+Z zYPREVBe(s8b<#&UhN*cu(vCmoixhA8z9MwuX=g)njAP9lL4eWRXgpKb_d;4y1l0VN z5!74LF2By91Ye>8OkPij(cDitW$m~)7x|)(^tI1?AEUZ*yNfpJWL(=@`5NVce63n< zXpX-R*f!N_LB9#WBrqg)${O3N5v&KgQ$$o;A-#koB_d8=j*h`w7neg>0b{mzr)#4k$Z~? z(?e%I0_eNJNFe3-{XyH%xC_4Yh~V?}{nB*=d8gNh9fjujZx@s~h)0|ag%Q)D)K18{ zze1<>xSNGxUd-EVjBDO~+`k)3z8^0ye`~s{IiLsp`u-^Rv)7RFm3=LJn{q;pL61Qjm}-o z#_Sdw=xX~CCXc?|@0>zhK+|bo;se48i*FhZulMcZSkHtv>?r&gGZuxaSy)9;L1`Jz<4g1Egt)Alr6VK?;Z#p4e3eFx-_$yY$+ ziKNXVw+SJYm`B3L;PbgBe)_jqD6>y)} z7K%=Ey5&H>_WWn(ra7kETG?o5MYDCexB-QUDUEH+t;C}qPnmyvIv)V&8L%P0ReGnk zpX$>e-Zm-U-S8-;ac?4QzdqBi9X$C%*sM7hW1mc*4S<|ONzAMeQd-4MOz(bni=%FA z8vNW@+qd4ND0WV3N=<9N-g`%^u6dp%XpQOelYQcOajNAt-oC|SE=vZdP$wtuce_Dv z_d^^eUg>d(CW911;^a0rQjxJ5L+tDAc>oi-^z|>pzGTDV)V6DO&u`E1E2CP?ZbK^W zhp(8nrH!SW30CjeDu{|#kr7WABU({Qmf2Pg%^%H7H4|BOoQ9hJ4xgy2@LPqSnv53f z(7Q>Eh-Uk7eRKM)K_^8puBo1%+X=5_=W%Pn)AD>!OSI~Pw|noG;Ns-RjRHk0k1UIh z^G&;+ef(O(mp)`3Rfqoh;QNAUR5X6!jBx-fmqfCP$75kLgSyb_b=sCjXq1r(gg~xv zE%xWuH{u+nKs%f4lRHIcLE!h+L+$}WJ+74h{Ck4}rxMQUXh66+5LudP^~NpjOOsmg zPX*>6B2`JwpeGf?M|l1U+~-+44Mf?uNq5rz$0eiHAfjk(N2Vvq%P8Hkc>Z>Xxj_zl zEoqthw_Y-R>ESDh$3vp|6>(1_g&B3DM!w&nz3IBQKekIVJ=RO?kwO5DU648w4)dGv zR^;GR2@qlRa?WdFI!R81sab@50ZoW}lJ|R|Px1XQC8eIEnkxob)wn@2l%<)0r{$lY z*{I{M&(Mc;shq!8bb}#gkyuS&t>|&1{^qnq;$d3TGdkU}(7Z@N~+$pEsMC z3#S2T+rUbU-#ykPZ~#T^0rw4HCrRJZ1&8UXA55Q|Sb;ll>_C3+s2A4eN~gLfmwHi_ z@K@JNIb(f&+dlJ}xJZXW1Vv49P-p#W_zx%=#noug`hs<6ROP(HAeTPU|0=5OmZ_7j zvX*wwm>Km)_jq}<_2awUdn?>N;8&tw56rUr#fh+PtrKQ#K;sp9KZ^UVs9KYmN>njYW3%t7ESMnOjGkh z=8c`XlnKC%7JKI+TIl=t@82L9c*&UV2n$mjBR7WFbo|3|d{aFqV<0isxqK18=TEXN z9T{*VsP*j`ks-jgESQ%u%*=)lK)%owL6`TmCdX%SPBN>gbDeUGm%>nLaGGFRm3~!| z1pa+F*Fw@H$ra*u$pE92;Q6$SID$i1E4XK!m>VXAdK4Xx@Ke(fwdqhe$m%ml@M{B~ zt*MlC7EwfR+nvpoE0xENU!rJci%o!}7ww6fw2xC?+t(pTnLjtW0xmOJ#rTOss@)bo zpa@T(I} zglnU`ZXGJJM+J|abUcyXl?Lt|ny*$S41Z5HXtHj(Fq^Y~cT8hs5$uQ(5X_%~VG;l*FFixK528W;xcJCP*3eII zD9nH33*MYVpPhp`!=~bRZjM>R(UffRhVM|vWOW)+>~D&NRJ2BkC`cm%MoVtcZ#=YvQ{D$5fE(?%L=b=ax~%m9|H+jE`?8 zllSb}aQai+lcC<9Ba9Y$;qbO=KXefvVhu#+{mv*#b?1;Y3y;OPQ??n~bi3$yYR~eUJ!COz=iu&M|O> zmjkRuo?$GZtaTVz2y^5`evehwAZ>4WCq_Sg}tMIop+X)jfXdQLvYT>P8#GQm<< z3#&`gsrSB^;9Lm{A%bsX9)i(Nd`WW4gJ=eV3OJ#=hLu4D;*vl@l z?RP;1o*NH|V^MK8el82C-U&;41&c$Uns@G5=-VWmR?)Ayi_R7X{+_hagCcbx#aS4M zJL$dp1GcN?e?1a7g#N+n?ZAp1ux!rVjKtH#_1ksqDMJiA>lWEA|K_e36QRFZXu0{< z#jJ2D#!tOpwPh5SWO@!oDTXOY+j!g^Vk*_f&s}(%M%nvCu{a3RJ^}QOWYOziuMgbn zW@D&-jYoDp&INU?p;;A7lcxvZGA^UV<)$g>^zrU`eGlBV^?LZ4nNeQeu2rd5D{ke- zD)?@PFcoYg9yRIKQQg%ZeUtyC=_{Azv_P|2o6%p>>bs*F>NJRJ94#C}hB}@9hk95omhX z>(gt##FkdZr$I6nknDzcL^P3uvEYmve9?_>FcwvoN96^Em-Fz+wmFasQWAKIupoff z1kNB(H`S!K7@*s!3h$Kn6Y`!dwiCx4tB&V6OjcX3(X=^5<+NzpZAx%eiWS);7%e0F zy&2+Ax>iid`P#Pd(`>@O=LExtbCWYaw&U9s-EemVtm^2``fZIWWD&f`dmY-}h@avN z-aZ-U3B!Z;_-j=%l=ue{>(`J^!i6fFQGxx+4%>8>jmidhDm8?C#S8G_FNDKs3{lrt zM8~;T^5=Tk4n&cso$#a{VQ{cn3xnaW@VZzs8L);>dEk4tJ~0C)q1rYA@A)nl*P|?z zxDw`3D;b^2T6Ua)j~*M*9_Woyf$TxkeH_-5D*eG}BL7TNP;Ok`W>66^qaC08uE45C z-i%_es6nu8;HyfQo8mbW?s5F>rkjltJx^V&O9|=Wx%DHAz(0&;OjMFke!ZPwEr=o+ zfd0=xz>uWVmwlX7k*Dw&tFMK$f`2<5zZIJg`VI_FCcX{o2vDP1La=ID`Nvn*kucT! zRYe}VlfygKp#8{kaWL~M{!isqT6j!zrxW*Jy88slO|yrQTf@Ros~y39_l`moNxh*0@To6Qgl zAL-iQZ~LZcR3nMHcQPGFqQy0hUVL9<-T}=vaixVrT;7+2XzZPeFBTv8SZ0X5CDcQF zS=)`7U_`4sH|&;03H)}m9%)W9hsk!__w%i7+9Y`z>PbLM^KAUP^MvZ*TEm2g3f%yf z2TGsRKym@P>|T@1iabG>OUv5QfN1ZTbd2X}n);C(%rxbrEblltf$D^xY&pJb6~XCB z9H7%p@7S!lY|XXA>7D`RT#4kDvM9a$qI*@}7cQ2yH>YA0_Bs?vKAG|9D_?{hC-~Ts zWpD(zF#A^QWBbWSn~BGczkzq=df^Sb0Ey&Z3J`5^r1wC*0(g8PqB>dT0|sJ@_1 z*YCLX+;!F6=FSF^QtqZtyPuh(*;4=vJWhBJV@7H%pyQ z9#%Bhgj|ja*i$w?-F3r-+aX1j^107k*GsuE$8Uipreb8CJc_0lqj(OW_5nJi$_!SmzZ%*WtpIhu@VH^SGD>D$Sko>&(@z z_jx~y7m~-L1dvz$@XD~yixn8v7@TlsLILb1Gdl7EHwBg34Pay18_fO77A4HS3o)ac z`nWx&Y9uPn_zu(QDSrjIXO2~P&i85ARSxFgMgw6e6q@s)t*{HrR}r=!MDN6r#;K^) zLB>xMpFH+WeZ3}Pcc}t%^J5EXgvX{ePNz_` zE|I`VkOgDC-Lu|Cs(_nJJ+o0!<=tP_Qy#Lt@s1o#ioGQ&O|~Jb09C!Kzt@;+ne5d= z%tz*ADbiDGZC`&o1uhWmk~tvG+5hHy1)Y)JtgK6Rsi-c7=65%pVHVU;$X>^(YEny< zEYJr0;4-^2JeRhU39B`W1Vcl29pX_SNr*UQ9J+9BTC&C71Xe%^g;(x{mTpGFaj?Y38F+NCLj{L}) zk>M!wMM`@fd~dDsP$s<>3Ave7SVm!A@s&9a=-X_pxoA94Lhw;i2kzw+5Is`v zPw*J2(LVc>PIo&n@^>KWdjq^IKOu^%Ij;RF5UExwgCebH5lQZ10y+JD&4*OYbs?=h zaNXxx9z4^4A+xR8KwXN{NJE4>y3%EB7b8T~$|i5A9M}cF0ZYum4-wma#SAtZdRc<= z1(Y2@S-)sYU`6xBxqBKbCm!Wk>yw?q zaMs??uLA8T(|ziJKH;nf`)LJ}jko8W{2POB86S4odcsS4e^yzM4n{PPZKqfwv=eCkabhfA93QFpf+)#IvlB&qK|sqe5r& zPC?G{vxKKeS8*=mXzkkE<_FyOtjEO^2syzKmkM7~L5>}RP>xi&Bp0D1822G}2;;YK zw$R-P>}u2OU17rEV1YdjuI2Er@z-CawGCZ~DdyZFAu~k#TpX!$h(&CuBEX$x>c1e( z^+XBlq4$hrGM9P#Hg+jA%Mz_c-5cBy=cC$DII?T4G9M_QE0sc2}G zw2CSaE&fT7LNbY}NI|Sgn$ju3iEbx~WuiR3MZahx2R!M?nXIQfO*n`2+cB3pN+)YO z)Fs|`S#Iu{zuU0pi%Q(i2V-g@RGu$5U8M91W4x8TJ1RW}WACQEg>p5W=h|U58M&7g zeK1V(?ZZWBFd=K$=HW|r3nA;DDpvcEy8Lu7oIas^S0{iU$ekPq6VxoIVO^9B&L=)a zZJHW=KbMj>8_{tG2?M8jQuT5FOIEUm6Srl?XW5(@UGhfB z4W9lJfE?@ID=0hrR3ENUvKKV3|Bno+j^fZJy{SUjn+cHxs#OpFHTp9tnWJ{XF{0Y) z;!!haL0$GoJK^IF_D`-7>I_zpa*p)nFE8=)kk+^j|Ex1%WrE75Y`q0bRnS4LjIxjB zTP$#2(!ZOc@>89**5HM0ga!Ofp-C+PX^+7=Rb`*qQ#mBNlgI1)fr!l58>Bs{GHncE zWp<_yn}PJ4mIaY=h=05^tS6bZW~v%dxj_>Vw2;wk`0@* zSJ6Du&G1tURH&H8+Oq8v#h-IKPeD@77JPm32Jey>h!0m_d2*oN_rUj?^Y@Xz}uza zC6)>!aBD}{=B2H>}=3idJv z^201ufS+Z>ZZ~i zHKBQqnyTyCs_Tn`P-7q(K)1K**z*McL`At{JXwyQL1T(Z&BB=1V5`5_f_R`Duz#*` z<-49Dy(@K0lqw2@tA{ve^ht2fS#H^NEUvU1 zGqwZ||1$qONBdos*?Cyp2udk;A#~kQ2D0~wG#SfiU3S6Py<9u(oi0jl5yHYkU&C^# z0!gc@!-fqL;25{zJ-|wP`QFVO$1M{! z40Vg1;uz)=f@xde!ytE?nA$ADq%CrpZM3|#7vA>}4mKO{m% zNbel$8Uw=o)pIOlQmMs*hxWSGsnIuip9-?jc&e@XTRFx(r@T{L>sxf&Wt<1dlsw1) z9W30t8r#fWL@>svKC^M~`SGf;T^v8%0=A7(u*As-4@uxWcD6)Seu8M1TS}1r6r~wU z2FoR{fUio$neR**dW9#oQoIB#g@ntWFPz;P4u*jAIH*(rawVrvw)sYn=EmLhkl%6ClvbU0&4;{dPJpO^@sO-t zlWeIlt!)Cxtz2CK7Ivs9_qWw(el8)<&M5FO7OSzT>(N}k?7X{y!B**0s!iZwIo(WW zJUPOt7;&@ztIE23zlsU&B~amw{f3b0>~)|pKT0L_bZ3C}eY3*4dLf{ii1gm}-Cp&s zWz7)3TUY6fdxN@DOWkLl8Tu%1AFcL&!H}oxNMFt+&h|Q{vnyt`D$NCRn<;tTxkPbY zqwCw(?WQ|5R0e->#*9rGxQ&GsXK~MD`qU8mHytroVt)~0rELE;juB~lqiQ?nv$#(v ztI;8m?-}ljxzrH;sjcecF*x73Uhdfa%Ifdtt21WVmFTlhwu&`0U??2In#mUgJLs9@IHujDA9}JNOM5n^YOma`5XF~07NYkFFAnwe_ zMCMVast*CZZs%3L8l?`!8)Jf&4Gw?#U=jCv8=|x1{Y~llV{u=~^ZAy^75T^(reH`1 zvZ)4yGv7NgrJPqycTmo{esKq&id<>nrw*2pL?FOoLKv;gr1qPo znTZyhw@BXB`NsOeUYm5GE=1=IJ>o2{+!8nLy_0>}D$9!Y=)0^5SJ3s4NQ-~EG2T|i2Io@MOZr?+KMfxm8G$@T-sb^Gb*=}dERetrw zDCYv2RBSp&Kj#*&!FG4T+S^V)22J}pa~zS1p<+ZC4q3;x`F~XKLXEb;W%=yB{g2du zCliX3HaXh^8Or+)YO&C`StmD#+#TFdF}|xeH^%u-L(}?HOQzoa>cp_D$rkbb;V&_j zO2YnrL8}G{*9%-TQ4PELwPvyO3n=*&ne=XsLA-1D#+81F2H1#J>v5q1Y#2Rft_3X$ zK0c4pr0SKpyQJ#V5enq$`t)p0(vga>SC-N(vdLD`^7L#D(w4EHc3j3i(u1)Gmspm` zh(uW}aKtE?x);5|!}MoU*I8&8|lJWP&sZ2 zKd|3Y_U=8dmKh?c$B-|B__&ap4?KYgixZiRko8FE{^73$^m~1(}>Pzr-o)C7C?E^l~~!zcl=c zmj>1Jzk6G|Cz~hq1t5A8xP5CI_NcD(LNsjN;|o)7BZcsun&NoL|`f zAa_4|jJI<#b$jGqka^BVcl+^SsRDiihDM~Y+`7s{CWabsvKYmOTAduHm~r${x46Na z?0^QQK5BPPx9Nx5;JWk-H1e=m?c)pH<$LI;H{jea{xXl6~ z7&(MnFjKUt(|hz02loZ#zs5RG8?AEaTde^!17gB0=qPxADnVuatGn;{dQQIy7@T1O z%>jIPagAt+H+lWsGRZ#JzTz~MrYP(0KE;I{3Q#11@;7Z`yoF#V7pDh3ryt;0%@&!0 zcQYM*$X6iowa{U>dhaTgfGoVKAHW1z4lS;1a~R)^b2Nl2pXf&`<^+GAGcyJ0_e+%m zo!&VqKzR^-v_VUi5!?}Lw>jc15Qprs1x>c255H^G9LmN#JA5PX@izs4Kr4OyN1dD& zV!Klx56X#sA9o$uTY=Ls3t>n!h>6C%yDA58)T{Qx{mqJ97(IeqCJTDyV0U1u!j%63 zlfcD4@*?$ScrGqO3IVubN>+K4LRXoT#)RcbH!w?x> z1d0hDftS)q=4<|hJj^SJIJ%~A??Sjyio5#f492ia|77V0!E7db>oKKa!XBo4l+okn6xii#iCl#*VENA13 zCdJI=C%JH%1u0JQ@=vW|S4K}$ykF-!_W9wQ@+rjo6n;|`_ql5!R?XYO<15|<=BWxg zuE@+xR;l<{Iuaf@sVb0-q*N-5XZTDl@fN9Oy*GZGxJ&lOOIBYW!*_#R2__XWckw?? zZwq~!$Ob##OsZDA9rF9no?W>wEp!mE;DpU8atpzTDS1_|BQpK{!<+w2M;95rZ7Q|V z_5U6J&k_8&^8YB@$NzVyv*&XOwOPy`wP^1B5tEBR|E8KHMs7a9Nc`uig~4_d=DJ6h zlJ2>etZDUNK5>iAl@Z!ioGbdqG&_+AZF}nIfH%Os=culjnOi}l9XP~BW*G_L?=907TsTop3HG&4O`@M8T-F9J@)@-+A@vWttL5wf(gNy z$@m=i6WEN^kV+PhkM~ghMH3ZBX*oR_``7mOXMgxC?7Il|a)j20PvHLAdUP=-uv8+M2b@syW}AJ_eE0@hBW|tFZh8=9VnDR!#O;^!8#>OQW{b14 z9uLe)RA#$qHv{^UVDON?-O$;-XfuDyj>l{Ui!shH53TJp%JUP<^)Ipd_NPEIHE4zS zJ}=d+*7_t~!~3%jp8vWYOm;7xpKJ-bVpy8k_2JGvV`AWTn#QqNvK*F1vvL2x1E^2*?)w12%xwqc7eK5Ca7IN(mE zdWM6iT#y;gs2NZ|;CAOhQD|ZgBANBW^hgH|FrW%KeoytR|7zrB3En;tP+o7?3@MfO zY+@2A;qhVmo4mhY5u7;~XZ0a)KH&ZtZHTB3tUh%t|Fud6m_g>zJEFe{P90YB3^U4Q zDTmEQ#OSe42;hjnr<&RD!aoa!!lwPVoIdx=Jq44Yobr0+`GsSw726E|k_dLF2ga$! z!`S{sgDe4r&LPb>6Hb&9cz!Sf+FT+12uwh;G-i-+RZo@Gh5$~bE1;7&F7~JH0~S_1 z$Y&F>4k!=X{wRC!8;Cri=&JO*<4Wcq}h!6!@j5s{|ux;N3jag?Wvdva>JGymsOcp?s$FBBbpIB_!9e@ce2>HGa8W2t=h zwbd${(vR8Vo&?4NReY*!QD9Ne9GM$G=6=@ZaLGEUfFclnpd-5xb84DI3ztUJ&G*%C z(1k^RP#@T;K?s=JqT=FVupP!)X^7vt&Rek3CV6gGO3J)gPc%zlhJc68MwU1Fmd6AL zhDzT_dY)ATR2%YrJ=g&cIa}|XSW2!aJKC}70B76Q+muRpd)M(Hc|2(#{BJqJ%ikyyDk;)tQn$nyk%vNxvor!` z79W%eK5*BEZv{mwYKe}%IR0SUxH5o zFTpPn+ZW(h&EN}=a*O9hqW=q@{?{}TaeRsB{7XbpUn0u<640A}iBtKD;I-)`^r!g} z`g`Vi0sIcX#7V^Ag*lzayu_*QB~CBGMvBNK7QlrhFwU#0(e7+Nl5T_PR+Gr<*w z(pETtpuQ{1gq_ewg2T;w)G4sJ4vsrc;=-v-o-giY9@Cggn}^o#xvK(hH-#$?k2^xP z7Cx%P%c-|QCWqQ@YVP1xMw4%g>`x<>MaGVWz^{j<{xH95VtUBqXjhsvDZhdV|5YnK7)w=%8fC4I$JIX~E!4flB98 za$CD+|540_a7XuL@UuweaWhzds~v!+cONs`rn^OM+9k4f+pol5ui8cqCXVB7$a|-k z?XePBoWnBVs#;GDwOMI8SB!O}6XB>`BO~(P+M07TH}O_v@;;@7y07@`b_6s-H+@W- zp#jj=NST9*j8-4j<^|C)N}-4E7-oh(K0$p-&jHxa0npLLQ~$>cL)z@kw5rK$)OsXu z8)Uw{+!V^z54;aUs*Iet!d^Qi_tCA_Q^c~_9Q_g0O?kIpyv_Dv?j46$ejapI?ThU{ zMMAk-o+0<=P(k+d=eCpe?*Y^gV)nc0?5akvq!g>wwD$Nezt6KhHR1-HsQqv21A~{D z=DQzp9^#+r$Zf4e@G^5q{V$&SP68m0AMQQK9}cyj&zhd{0uGr!&pD*e`b`)0k1^`n z=7RTSj}@w14jO;3H%*EAeM>W+L_PgVypARA)*s9Nb#%Q;xnuG-S3sWeZ2)9VRIC&N zMqJAszna^N1F20e7Cp+>rB7#cA zaYHg&LnlOAxY2<68cnRU2fSue)le}P6d%+$A4f#U^VR>b2AaW}6moM3^YagQ*l=~3 z$i7@XZCEg|ga0@liIy}$cEP$_W0h{wE(!Q5LKBwyzNJ@rsVykXoUZnFtBdy!h;pKO zk6#vo^Su7L?h;J4KziI4Y)eV?{(Yp@C6w4itWYH)tT1T;haC%le!`?l5SQ#< zC<)hCr{TjqK@qnFN@hIfaXWIS*mK>U^y;Ug3BycVMedIJ3XcOzhxKxwtEZ@SK5jzg zz3%$LG)rQMx30fxJQD1b^mjf`^SWEDo+^8iB}tbeMk#7=TN@rC47^S;P31G~oY4=+|G?yt%}W2fbJuCcG2T7lXXz)8y?F0r2pwkVI~EbE1CG$(lT+o zrS)W)w#CsJ$w_zacx!gTM`nc;(YmYFssK8#%WmxP^{yzY6K#jk*w}1a9%adjoK3x`h!I)7uzb;y5)E)eZ zSn=xlc2aab)f-yTdA^bChbOV(2j?G1J_1kcRy3b4lXt+=oo7Ax)3Hy8q_Lvyd_+6} ze}DCpOCuL7y5PhM=3mhEoN;NLA;a%hg_R5+%**rEh z&75P+9rLN^r<4EDc!Kd6@!84qmO8Sns{M%hazX6Gnp4kOR@1S0`7vK;KI@1tzF-7v z|DyqHa|=qm2lBKn`2)yP^EG3j$4?CWo)LIn=RZ%Y3j^+sz_)3U+kWzbacLxa(FLbG zXNV-`|AM8L*5xOOrhNm32>aM*M2!HEBO*8gTvj&^Y70xJ_%-CJ0&+EO<$V`JjTHM3v!dyfzn->qKG0SL(91Gsab(3$o99#vEOX5%%bXQIWeT6RbOBsz4LRvV z=bDDIPJZV48IdFErbC*SMV8kwEq>AYl5?)J+zBPW;OxFQx)R1TW6ihflat%9w}c_} zFw{Ht2h1tQi?vlr^bu+r|LX?9|JMN}RW#K;U)wb1*P*e(s9lM9zU^B!QWL~sVLXv( zUo;}upUm<6?5EeCygVY3XFAD?qAQX5E;_}KKmXSCXMN_{iBI6)@lTu_xy`-(^oF)c z^G~j;d#b$Mme)lv_NS0G9{q{6atYPbpTBkLSr?u%_M(eUISuX-?w>nLB%7n=fIX$T z*&MK@G*2@J%qh*&%>iRduc4{54&quIIVr;QPFLHsr3PFkT=q(N3C3P~qX8{0#NxUo zkQXC=Qe7zy!&Sk(8m=*Lg`j;T#C$Tu+W@~OwVhly4t}3fH(vGA2I!xY;F6cvG{S%O z#xVSU;jV^eyzKak?U{VdRAd-)y`>4zYS@4 zP?9uUy=^-#mh}C*H{NhosNn}!taEOE;8?-`MRLbk9`H?XN(TNqQ=T{rYu=iYcD@7r z&{F*H`fG1+jm>?|j-&^p*!+aG({rORW`%&xpbtzzF51|8S=Mu#KlvX!MdaFL{h$BT z<{Qsyo?bh!V+Gu&jo+DE(RY@ZS~sv`EdKw;1N^>9y{{O+cT({GYWy}mG{C=X(RUV( zag_s4uEAfA)89wo?9d+=RP1bSow#$tyRiqyzKb+z zFRhz2=FG!H&9B2tE6=Dpv$|uP*tBdj@aoY2_QMGH<@+&g-GIi5rm6u%YRt8OS#dv< zFfnZ>jLwNE12@!V>O@`h@j#<>TOsu^J0oI}`k$CoEgYk-?dr{?BdP~urwRGJ0AqsD zFxXq_20Yh-Z|C1%I);1h$CL1_N8|ig?*9^`UbEAHI?uS@r155)FrO32jPuQQe1oB; z?F7{E=FYF&zh=^x930#1lC&yz;@EYr^OgJc7=|H@2^a@{$B>?DLvFru|CrZKc5iR8 z2QZe3oh+>w!gK#I3GX5TZF6kJ&OR6c&7GpI&#hl^|Ft)5-tT?{jL53LGh`GZ2V5&E`m?L;IXYNjseA0QU9a`|%=>s>p-#y)eG=W~C zp#ggZrieMTcLa0y>7R|1yE=M4<7W`-@wEf^2EXrEVeJr8O(>ldn9dH6^PM(*-CkF_ z67OI7PUXexmRoi9N=O;_9rfbnPTPgw!JNpQP(w40+_~P}Ky4ZRRgK{9-}sIddGcpg z#9QhBO*ueQPTRLnM|#^a$!Rl(?ySRDFJMF|Q2O)?-(V~B;@ALy=o;~TH++}t$v zz)thE84sJk+5h?;cQ5d%J$mTAUxnx0&a3UGE4lm~XQ_Jnhl3Pfb@8#?R^8&I zE1YAy7k}}~Cm-9r^cAt9x@qiAV?}*aWT&~}co+vlD^@mHJ57+W#fng*xz!v9)paje zy!6=a^PR~a~&52L!gnZTAw+u(I zPz2xq9p3*~{eJTmeDemp$p#QF!|(gm@81*R|KQC}0*GJ2@1LsQ&%AQdBNZ$0?GAW5 z|GSqjzrt;U(dPU|^!Q&l>5Lzp_sH=76CPXo*rvyR_}Fvszj}pH_sq|+ej1^j4}1O! zcmA;->})@_a=-?SyZ4dBP5*$u&arO~7?F1Osvq$j%5{$%_2?0gUi}chTdUr^_sDyX zy#L4*ZZY*6essj6w?4wxU6k@Y@bsrgZhd68%8B{x5s%hx3a{Ld6;EPT~U=QDDp1Slg9Eqhfrl?Hm5nD*x#!|7o@VbhZD~ z<3Fu&tVpe}$JU6a9>u;04diEuo zF+UdN#{%8?t0$WuKl|u+>YB4yqqQ(FKDnvlNt}EAP95az&#yjOMVz5Ve1~HB!m9LYr1SboE1@iriLLufB^WYhaUsQqvDN<=uCIcjcXT+s&uHU3cnJQ!jph<3b9B zwY+#|^CuSWY@V}V=U3g(ls{}TpI!A(H)tkzIygrqfM4E!?F-2qNSnU_ZVk0IZR`Mk zUu%$D)`W5y%9SXo)rpJUOHLmre(U^SJI4Y;To_Scu3(oJ_ zUtI9}g{;q>QYV*=JtMd5Hz4oloZqx#h~F;zzt4{sI?M~k3(I~7zcJjzrH7sI;c*|lx#dO#p7NHtblMVtA=)eo%-%)39i>9D7oF4okT`(7QiTjf)4x^F?fzUjQx{`$}V z>i!L$|LXh=o(CV}IeQ#chui|ZA94yXVi7mkiM(mfCiAIQ>a*Nina0egUU{t8##nNs zC8U!Oq*wRYXMP^q6iPB}gnwSUsS3Uv2VahOrrkAwdznqq0Sti{3(7P){b1Zk3n;N4 zzg5%1Wi)SoawNIJd}7Cn?z1#Ku}s2c8hosF6W(>&A;`_u554F96H57>^Uro2_VF@W zG@l!wRITm?5U?LO9|E=lddt-hl}q$OXqg^mc93yEf?xHJfY|0xO=FwaJ{f|M zA_V#~wq@9_ZS41$=G*SyA(gkCzqcc|h!Vv-xvA>je$QO%ch2Nj8rAcQ&SC25_fFj_ zW7YE?oEr7?N2d~=%vTJ-GQ}G|f55%VdC>il^E3Bu=OOpMorm3foJZVyom2nkQTXz6 z`0^Nh`5*Z5IDFX-U&KWQQU7ZY(_PC@&o&|jXgSagFkN_C@#K$6-akju#&h)L?qMMw zr}zI|^8S7baX)>zXIO~a>HWPW?{9)KS#?}D--hp*SGIm%*OdjoZ-ZaRZ!N6XIzj75 z+3!CE8p{Lj3s3{UgBo}dYT)-!1Al-T_#+G@Mg&J9q*^qr}+4(I`iW{{tr_SYg2#zA4A}b8uQJ)-v_?=KjOfXb>@M;!M6kn;)O`c$FI04N>LaaYj_qH7W45{H^(nF#&1q1~)Y6g!`PwPkj8O$3ORYotjZK zL|w@p|DWN1&9r@U{+NqyIOPfQmHS&Gv-F#1-0(#l=Zvw2aEu?eImT^p-453saNP;l zU2y#fuDjv-Z@BJ(>t49-gX_m_80vC(x&p4R!u2({z7E%waD4-=Rd8Je*J`+~hN}mz zH4sW9zu@3J9NOMuC6op zJ@WYW9-Q%59WmrjZ$4=OYOz2opo!TyBO=0dNr-hDX!DKH(i9Gr#7sP;QerQ zpQ7%Ese2vVFRlA)&sxKvHNz0ZTnX`6q5^6(B0yDybgIM{NTo?k6^-I>sMkqiikJ*( zjuqp@IB}SmDC)%o!8%~LLqt=nO|V7Omw zZl1Ce{|*hbMyw}LS9^Dp-F@0C;n&9h1~t$(cAm3+QujjAM*j@j=w;ihUl0H0%iAk{ z(+V2>N!zdAUVZ%?+Z!LYA`372;mP&g$Gj5C-E)0J zm{TwW=HMjv*rtuoFWjCIbD@^U2z}osTxgLx(cD@+fU!f01I^7f0~r6y+xd+RZ^HDZ zrLGz33)46LrKQ6EpZ{H$`uefQBoecaIr~V=tB<6hblYsxkCyzNsL=*oy>i_ruzIyo;otH(U;-as7`HIWFyz)Os z!~Lu8|3Cd_gbcCgT~q96;@?rYn&vj(<4~b#q$|p(QNHTS0hCQ~O%Uisn8J8SloUhr;5rwsHOZ8U`4;%K9j;w)72s;>1QcB7!nLL|qfzi{J6yZqD!|p$ z1t_@Ag=@Q`17b7 zga0_MP$+zy=eW|4yq@WP}1;G9-x8oy?O z(5lxi$Z(2Qx}kS0JXpOAbXD{=Swm6R>Pfn$B@$UeSsBl^GTY$V0oQKZ>Nmz(8{paq z*JfjEj!?H(h^V#d)eE51Yo=9-XlPaXg3wUZp%jNYojj*#h=g&YXB+)(W3dMOxFOEw z1BF&;Qi>2ehR3hl_7__5s{#2kAYT|mf>6PD?76jaumF^^dR}rXe6=!;?Gj3?dbPvK zB<-{T`Lo2>=s}1t48txUv9(j2BIIPdYm1d*vV^J;r;U-~=rQ#oGNwViQ{5LYQ`U{{RM6rrvVo9!#bN_(|9&GsN~8zIy< z$Y&qiqv^=p459AAUJpGT-a>uV+E<3*4mG{nipb__5zP|H=)t2_Yvr6Z3YOVxM0%#l1dCvW15xMbe5sCbw z{?nAItP!(qj2l}^Rv-#fF`(VbQ_^W92sK(tIt`aln2P& zZDSP<5w+5&MT#kH*GvUdPO)`$s|4F4OQ?}rCDlRXW%im2M%(F=J*N|)h(MTMBp1fj}vTb@ssQ02KT&u5BII=8mi4gC+s$c-V{ z@UxI?d>|yFKMBbUp<1#b8M`keXWbK$iMvB`&Rron_l}S};kJ-;ZVkySp%!cl$;CH^ z23ielo`v5<1VN;(Hx-~EFlvSpcc5qHw&$qFXL$&8x0$1br#fFKFp^ZoN5!j zLikxkTQGV7h1UbB0jOJ6Qhx->i2@z906oQku4Vy!C4h3~00qqj+Dj1X1fWUh$|8-4 zZB11R0I?X5OCW?xC>N-08Bp7DJx=z}h&ta@HJu{V0;uoBP~S_SzReq(#)WQZ8aJuu zjeg<%5V+jYc7{;(P~X5c>}9IH8=)P5GubWBI>0yVY$bE1NEL9VsyPrRa1Y>2n}IWJ zu7k4L%c0eCglZ1KACPN6y>$~Xx|mRt2K=4_V~K7z4UZLvCD~xk;}R zL;k$FDR~e2DoM8Z6383~k+StDYCvALwI1Pr#a_`1Ilvy0Ayfn89?LdobuAgpdN&nX zF+VydSvyFpf{%>mYc(D~(=^vIMSYG_JQI37LTz_W?ZP;GcTgaOYfPB9FX5x6`Px`F{Y?~N`NYj<~K2o}8MLIC#7^F36!&L*9gi8$W=!P#fE}`l-8nOZ2Ha=j;DBN4%iorDt zt^`~uLd}7vxp18Tmjl-VxE8~;1TGh@45606({i}ZhARoz3b?xAx)|euD@&*=;OR=Z zR>S4N)dyEUTpKYSxN?NL5uR>>Yb#va;JOX2yWqM94qfY_-JnNI$}`GZ*A(h$V}xl+3sNFl#qk4jAZs)?!Bh>Dp&?cM zyBU6C-V%h`c98Sr_t^2!V{PuSNZ~G_)`H#_6CZGK^CFr%>3QERPdY%o3`%tS=Y)(=O^yIYOC2^(u2Z_ix~=*q;ihrBu9nLB59T zKJ6G4$gGn#P$PgO?G6;^!rG`^s1SC7QK8)( z82cFbiUMudr0NvMrMT`K4ms zdQ75ju2yRlW*8ohm>wG}oQk#UdY_seqY%Ik^MrDTSjX$YX@vir8}rT`iVLx=b037* zUzqL4h)(gw9VQMbfHUMg429)ve0HgQU~fl)P}r;XrCGW|8574_44M5IvMBsqOlUV`F&OOpv!=+ zRVC|KABup+bu?&Pr&a3_bPkN5di+fg3h6=3iX@+Y*%V=`nKZieI1x3iPTM7vX@MYo z&8r=~Fk*(RHampBL+~4G1j?P_xFC)tQ2H66Ht9il|93?v#0mVXPW7}X#uoz=#xoP{ zAl5`<6=@saXF0C*P%qG5X2M%a4S!SJH9H>4tBj&LFQ!^viaeok^bO{v0`gLWyrL0W z9qv;4arKI1P}&H}DhWb01o{rO`X8pnkXFTkJtQ}|g!(G9&`*K#yy?(79Ipe^ka@%fDjqZS0J1U0o^|e^4GR1Z22sqyh}mp1?mxd zqA^Vix+D!yk{qFe<%x~J1@eSKUcg)cI6$vZT;PdLVc**6Jw7ca$116|ORRc}N{!`x zaA=+*s-e7An=7nlC&8$`sACRAJ?ssXdk-1ZTU_3rHpeAY1&kF`Y6$0t7!(eMu*Ehz zHI`*xr&`=2?xK!Q5P^N^M z#nah^4RmIvr3v>Op-lK?*#hc1&2vN0>*{|@r63(XuTb0zu#CC;Ol&b9jc3Zsaa0o? zzYVql_q?X$#+P9DVU)#uqPG%hc3$%IKSO+dMQ-JeW9bojpF{Hf!!MhDD6G{=_?8;y zQ*^p9HX21|2!(m5>v6h;Y;M5#KEM)Ko*#F%Bwwgw;Fo=ff|?OehhtQ3LS2D*dAzP9 zMJ&bc`?${XswRflf`K!`fV>N|6**qXzLIDO-fo1RYp->v&TS|kmNUU9tYaDwxW1@E zT~I8uOQ`aa*DKnmp1V2Rkm9&j#9|o7l2@?Kqr^cBljC*aU4~I!)b>Qzp1iAGh)*lL` zIaY#D%(t9mIpyG7hgiL<(5PkNI83N1go&hei4i^)!3P6HzX& z08J&!DBzCh9n}as68WeFEi~q1;Gn8Da)in$3e@@A$1N@^sg>3w^Ar5m?roD{s0G7o zqukp+E|x@2MAQydoA~C9msS3-%<4HYQRkj0SRuW@^D=mL83p({m8XkeD)JlRc7RU# zaUo~a;m=TCSE`U1LM{7qF{jJ_Ttq*i@|*SJLf)dk-V%uS`|zBb7^EEQPsOhb0wu^3 zYDwVD;#Z0_;i_kOm`-tjpq}n}srY;)AQOk_n!q=!{dmqzZh%k|C%4HdaJhs!+-w6a zt|>WHaO*rwdKrvK?N&_mG{jPb8m;g6{QfY_@3E!j&^%APJZ0GEkUea)o~Ee?ds>cB zmLp5}a~W636RH>gyn0v+`yjP}Rmrk&HFHtffB=l6YONY&VD$6uofOm5jIEVu2)5Ao z1MR0o+sqTYB})BU;023(}- z$6*kp7r2{nPY}xLFO^=Xw;>NxC2=POTf4DLCKO^f=rub!Q;b@*mugRdw$(eHG8)tT z9{YS|lF#oEVJZy=^7l=oZlGNcMwu+5R&VdT0pD(}YzU*Id>Uvyk!XWP=NN_bzOK_n z-D3kvM8J)Ow+b6J_s&S+-7V0ghBp7$HrU~NjqDWJ$Z*y->5h~adv>c)0vAwG!vCQQ1ahpcbKd=R&xEzDTvxYJ}DtA=tSbDkzsry zF{M1NDCE8tSDvxO;CVC3tBmUNY%$p8#E?#HXjA;X>NTnrTv<#_;rmH>t6GwQfIq4n4CCL#gD5KIi zQYNG4r)V9yL}K)2*v1gcP&neqM$HTDA(6!SnrkfAAB#1DoNs&Q70^<7P7!3nDxgy@GZ^P~WIYILH{2Jt<>A!YtF%V1=5bUU z0uV;ux~c@B?4EUL(IC1_cq7$w2%a0%v&(Vyh;HF6ly;BkH`Lu!_YmAuhwJgNTn-P? zZ|3lFPJZ|ZoIHED&&e+x-Yax`IYO0CjhZ1yL3z88YhHR>EYB%otEkqffp!RCdn!3# z3UELnV;>54*zX?`=$ zaRH&0hhL&X+F1T3oiA61FV~Zy7bbiZ<}%31X@2gg2+bh4O+g+#64iL`g=47_)M(mf zhER1q(Qc6e+68(ijih&-^ioIqx<{7th1{$kN`1|d!*mZUNvMPVs8Y3}# zC`=p*QExs6{41(QE96-cdN1;~S#@^xC}2{R}%a1Z=dI*Gf=sMP1A6X~mThM>gxY z#FeeFax}f)YB&i-S;M7b182k`l+k;x=QeW-v5YEEMzw&KrImJZKV%g3M@E4*=q+s; zaefbD$PkKj#}Ve5bnRrDi}L_bM+f(GybU!FfgbU}(DpXuJD8Ikp`>BZNZH?er;V{Hiqhu3|OHM0~Yorn+rg2T2OEc(;tD5bFp|l)a zlT3T(aOAhYtcoK3x2G>@hEf>PO8j$?(TZ-dCnHR=Ek}FmV7t4wD zzy2W2uO>4-Dp*hDGH{krSXaFu4MQzhA|bqIKZddG0^0ztjyxmBWmKatwi(L6xHe~? zmE+(-=Y)q~d?b`rg;H&@+rv@V?sfH7df(fblG73OaiJNwY^4<2Kc-Q%TxLy7*Ah&* z%o;3#ODLA*cXW!I_bx@9$^Z>43^j3GL`1_q!c7q>gt=}w7$@6~h|?g}?(L|?*`J#$ z9Whlnndw{;l}?4l{ksO_9DI(z^ZF1!X9*PsT8DUCoV|`}VTI&#rb`bbovS-o}QuVUOs-btmyHXa{I5DQ4O!M&0ZD%W*|scf^K} z4E1z+H2SUE2HYg+h+7TfhdDxB`T05HtX`AWdU4iARK3};={=~owM--Vmf$=<`OLRJ zJ{^ImS!K1^QbzX)Lh0JnnxL?ZE|Tf2Ryzc(?h*=DSVHh-0@?yj6VVAs`^~t{b7vLg zzAHs2s>Mq`j@NrJ7}xf6Y$iDsM;Wf|454B}JFxbs&TEG5a%c`1dKqdHmN(7L9-&4U zXCBBV){qAs?mU~M(f{>IYzDBL)wH5;l!4xYeU^x{7j+qgu)v2&f^-?`U0-8 zy@&nbl269u3`BY707B(ULJ8&#C6hYmvpmO6%-}wRvvo;a#SqwgEo^Pmmf{N>zdM6D zIoDqL)k3RZZwA+!xvS8cnlV~C>NaeF*2~N&m&r$3)5&s*(EA4qe{b7gxVKF##*#E~ zNd%W9HzP>*Se}xS^m0k^jOqeZ!V)opcbYRMyCi>(=(h}f^?GMxJICsAf03x zH3GFDorsy-j=9#6S}3@xMEZ7XP_kM)%DTIZAqx2w+Lg?T>GgNfHCUM4PAxY1<9H&* zEwrnX+pQJa%?VK8?kb!qc4Izgx*1!_mX-ht#1@-?EmmdI`ZlAm-M&?T@+7;&fwwx$ zts=S~c%bwaS9?8nGQ%j8iVqjj)9fnX=rEFk?0TBHUiRBFZ5&y%j0!;;ew$_I)uIY` z)=XUS6wiS~17mkG=f{;+Ga+;D<(Uu~ZPdI;o>0h-Ta2R3+=qqP4z2qEtssranZcUy z1`hzGv<~AaiJ6-FGNmxOrsqzdMj}1X&u8)oQ%Wi2G?JRhT4s?_#Fg;kU6a;5%&XuT zM%4_VPPVXKgmbbuNiLx}6V4K`p5|}8#~NZ;&b_YlufnJaUvOL+OmC{*pT4A8>^Tt6 z&1Cw*R*oh^xE@Mvy1Px>1$}XbA-y*a#Pb~29T%Qn2km9Tc#F1ewJ{J2;KH1o2`w&< zBvcwC;YPARaq+n~#I4l;dBfI99I5m)-Dcg-ffNe)vj1ARgzLX$X3`~;cX(qAOYqn0 z*wSKS3uborBwfoXM*T*&%wE+pyGwd+=Ez_>7F%X-N$<@P>QKBMrH34$d|rQZp!eQf z?7ewT@#zC`tTS({h*l|j_3BuP#AkUFqK-iQ;A9xrG)04W8&=PVOb|*`@roPR{2~WRLZ@lT1RKp}Q;mpCO zMKp7i*5*oj$Pvs_KfLBti9IFDDAiv+T+1!g8`1ogYdc3M@Ai@Vj&7m+Q6sky^qtmX z3&~mkx`p<1BxdOr5+E6r)0OwDK|tN*2oWHU#5`bb2Zckk^cHIRs1-yTvV__J63ZC0 zTmx$Srb3V=g)$R_%+1!cn!l&GKDRIMoC5xzpRHyw=*>;{7QfC3Jj+ZRCI1JCZ!!4x+JzHSVJN)hS`|IIDQEAbiUwaK~#+5|Ms4968oHlRf$ ztu3e;u>v8pgtB#bT*<&W;6OYWLyk}-@sRC9Q?fA-SDsMOe-W3Aj~3U~KwJqzZTlB- zxueGQKp?IZp&tGhab)O7JfTpk zf)3tAe1dG5I=e*8{4Q_m0sP)26VyA9d(R(=)9U_uD9IYf(e```tD<%y!FtDzHi^hS z_=+>JnMDmE3OsDfjHH--T+Ag@^-wElg2J^#rL-qk%9<$X@pn|Z)jh(ihj%GLNze}{ zRpft19~(nn=#4!P*S$8A7_Hap9*a6$Hc_qx46{)SgFKPYvlzG%;vG41IrD_V(pCh@ zNNXpJAm<-`EZLaJV>qs2PDfgCP8_3Ks9duw>XbV=T}DOi)6Jnmr?>B;xSn^s;^&aJ z1t1^7IFKS#FVD?((fsV{$uaLAA5r^}eP;boJadfZ03)^EcvYgT%009lhJ$i>VO95U zeH1r9pQrg8g%YlJ>0~Okx96jHxxAkzRJmRjY>OzC{a9-4vKrtSCDAn<_qD$CQ9N-h zr?|UwI+kzf;D{~c9;;gjb+bsYmA2sQQPd3$wK*w5MNn?QnPKc%5Z0=|dHFUPPf&8t z5GtxUc>viGKxPSrcpnMc8`|J`e>sM1W4(co;<;lFr4L1Eh7!gCLT!D>6jc?S5C@*YFTdgA~UFNnw1=fc+_at4fN%~)L zrSj&zOTA{6D07U$y+gR7dk}R%kd8t2P2>KRe$cF^iuOFAcz+;J^A1$Qh_icmNHjI9pNSEz1o1pFBL4BNVoXcP;dKoL`!W@s!4$CscX{ z>tm>0QY*ETrYJwDQ^dI{q2{Wvc29;HI1OqB>oP&8PhyR32|Hr4w!#gh=tYIganU;a zda8vm>Uwau@otg+mrQ+9YrjZar$Z{j;If_$?T3Ac>`e&eO&U*HDcOTDvJT^ zS8KX5$7ya-jbTw1{Bv<7FHN07%*}GXR&g$=$3I>hBM$ILt-qF%JMP~ZYxBqb%dz&e zP=e#RzP5L|kC@_9-(M&_c>AffVc!~o^hZV=RTm@93%UQvpG$2PmZihCd%SKT_%-6X z3H3)p&3#C%ASpU4tbuk-vs`ZD`ZlMi*Dk$UDf?<^ehx=G3G~nxc4U@NvhAoWO$nLufew*sI{1lNk z^qVBS6&h8xvn25;&2vU7UwR+cze}iK`Q}3TJhQa^Q-lhZZ^ZR&PSFwmjtJb{B~B1A zvh^4zqD#|Jq;i^=K zWe}oTg^-`-@e#w_lBASuv?vPup=uyhf>1ROc6ndeo&#}WpCt4hmHz6p`)N&u<+cFP z04GQhswnA!?tyFC_bC31^$+x)`LrIl^*$!icxRi~dPkc%bVnLPy!{;LL!ajQ3Okbn z>&Nv&yW7N;N(bezFmU%AqvnG~qix7;4%2?C8sz=;2jU*kNB+~yO`dHF0Y4nGPup4f zc_R)Z|ASh4R5@-<^6a}!ksy>vx7k*@(-!Ll?f5e)feJxi!%=>|)oi}Rx=iM_K%+YRAt9$H4M7RkXKO(ORh&3&;i+C9)y8!g@?A$TPm_nqWF6V#eUv)h)R z9f_i~rc>XuyR8PeU4l?GxGSvx4qI&Lb)r2_wu#0?$*?`m9y_$n5t(TXE}_f~>m;Ez zM1e=la6Viss$cJkC2>vCjEiWBP-4rij@dthP#+a`IL8d#>Fi${wHILjw5Hn`M)kH! z+*51xJmuiq;_vAW$@e~r^Hq%VAjCNv;v9rHbA)nK%%jDb|19&bkV893;4Q`#8;ZKK zEYqfu8u*W#M=6F4#{iCLqI4ThI^x>h9h=acre|>ybCMtw=S4UkXkBL5pwZs^2>4=O zbGvt^6>~W*7$eL+5b4vb^Kl$AY_p$e&Pfppt(y~GCHH(~O*+eKwb7;pPvFjQT&5u{ zvB<_<#+y+4h5K64bpaUy{gF_$_y%{&ilU8M{?Dern~*%P95L zR$p!WT3rm4B25*GmE`um~&aM!n-kEs2sY~rzExxT7xhj$(mOU&1CVf~1yfZ8>DXM;Om%d0Jldad0` zM-I?!YQApm@=>owsJ%Ln#|)z|PrD;5Y1QEotowFbE+CZkgfqSG2k_-QXYMZevLVeY zXR;Ih;K{@S)+k=>7=!dhYZJXv^y1v=nk0s>!fnFkxRfM|`bRbPx-wLXQNo~kRQ!r> zDU`vX#vB0oo>8cg;KSzqGy{_G_Yd#wFei&>b^&v_g|=;xg(TbZS8-o|K+V+T7U+2Z z3~Tooj`&?uEI0?*jrR8o6pt?94Y)3Y@p~ag$`cW_bp-nhTn(Craysyi1fjeop%{j( zx7%o3lZy91kEKxViOd0@{Wl5fAvcx9>p}gc2!->W$jQkPf;{c)rFj5T-7|h%UTa;9 zdDe`iH)Udp#cTFNP0_>TB;3!Uth;j@m)eJM^GiH(((KRpi8SMaD;)U~wJs{gP9*;h zq>UfIJi&bsec}Cmj9jQw9BBtG>2DB2f>2)7#8LMIASZPRHQH(j(nLB2^+hNHrLh)8 ztH}3%?~kZNBbkL-cSkyxK#BE0ffbPJt!AY}zK`Q>mQY$YCChv)+f<&1rjfZ3>Wg!K z;)ih@skXuxQsaRni8?%v+n%UKOR+qm7WF|kR32;*t47&3iZp@y^1Vn*F7jnxXu~TY zl~;%6Io`>~#Av1L{RpnMbR`H?DBRJ8shA%WTD`u*iGo^w0un-+J(#$J!u()PX?F2A z$YXU;+Qt&4{1g?EJVS!y*G-`ye+SoyWQI^wVxSNc_rdHbw2~d(hlSS5A)kMTd}ayd z%{^vB4+6SvbA&2i?J4JDdCnKef3ylN*a8~8m(ZSyKbq)q&6bOG?u~k!qk0DS1w+9X z$%*E*vO!!cXTo!0G4qKTw$WEyeK7Si$X*pFPY`MYnqpg(MQ)<{fdv$VeJaH%f^HyA ziO@K<@sB3OO=DXnYb+T;c?08Ox>sq$RvbTY#S>!4GHQM#=BaVpdlH`2D2Nv9I11)C zMYLf5^5l^%*f+oK<{1T?7WXTdLurSkn7%ez>ku1mb%ocKlqYE(P4kSsZAr~}y`fz^ z|5fvpn_$#nyEAt?l)3`=S4~^Du-H?QG4wiF>$`+P-NJ^EA@TvP-*f85<~HRIRJf^= zMw1@>+65}ga9m1qw@i=L<0MwB$ChGg0Ax9?cM_xW35++#sH=+Myf=r3$e$D(MJYd< zOthg(>RnzZ<4)g`b=`}TX2$gV;IRFCCm%}t^rq^`P3@xxMqxAYD!J7Rt$Rkrw-o8OxpO%Y`_L@q8#2QQFs?FBNAo@`UO~4KUy% z)0*1K9&Sv7{GG|u{vC}qaoR{!$Q%l5x6(cn$45e?7r>u6=sUWV{gJfcUIl&zT92j( zHHh|!&|7bO%mmH?`E#h3@Q4ce%ACfW2|0%$8$I&D){RqwFv8dS{!LEPvjqlv1yi2K zdXH0b@H!FmASbzhE5-c3m7@GyFh%dE;@ZyYFtDAI5-|b1F!4Da`M6ci=eebN_S?m_ zCQA&*c0cFqLnw(h@=7(f3|cZEUp0Y8raq^2(bXfYz>>a;^IxA++MMs>0l#`-?s>}} z;7Slm|9Swf@4)q4xV9?P2jfv-Mbz^O^-&;> z-voZA2qpe;Ag;COaxRXPopBGYX;AuHR&4RI} zP^blNUgxjT`Flqv1HUJfcL(kXU~PmvmV#m zf>7mUDld(@v|JxTPE^i=QcLwbfVkd_c>`6%iM)FUOL$O*P$it`3Nz;OpwpQLWtVDN z4RWG#9+V^0Fiup)gYrwYW;l}H2wf6+I;Gg>KvGeVZP0ehbId-T8!&;&4Qra6I9=-s zKZkr7RvXO_(-?;u3eE?Z?T$+*!|JrfpyL#guXcds6D<^?j@TS+NB{>x_`aR4XC8WC zye7T>0QXe#obYG1zR36}((xeWeJGcRX4=<*^VEpW66(zt)qJShsYJ3k&_;vyZ$hZF znqeTDjJ1J1z}Fv*b7{#ur?|mPjwbuk4yH3k(vguOaTZVS`AHC}rsu9U@yPpe;+&w7 zNYQWaFWl>3X^@M$glZ6NXwL@qZqlw)vd$JiuxZCqb(@0KA`#n%=BoyXW^g-~R`JM=;K}u^DxXZp!DEvc&I~}=< zXEAVHp&g{EwkvHxcI8*rkoEXuu_3!&T?0OZQAg9VQ>S^F6jUojy zcs=#)zETf@vjJaoWtwN3;sftDM{#~}MT^_LJNpW0LITiBU6C4Fs@9IPkKAAJMZY93W zs{`o?Tu;aJv3c}GWMT2AFP8RZuS;?A9^N71ywDWI1a?|rsUzgLwrUqn?G zQ=%EIzlLMfTICjl6`k8!5I~@3n+et_ucqD`+2RqqsME# zUP~*1X^0>eD^I9gaQx>V_2$rd`15u+}J@4-H zHV(!U9XzJ(z`ZM7nI?`AQQR}VDFM<9p=i%m1o#Hd4;~FK`Uc}zW(lS9Ge#jJ3b_oC)!QcJ2(_Gl zHJnX%uOUhIWWx%&?`X(#iW@2$M4G)Wm_0G#Gh|nTZGiSn%SjgvmwoL6sXQE(I`@g? zI`^0tI^hN_pKA;}>>h@m*E%o;mr%pvv5WCgeGv-dF{@QPVM9_~rT28`&>2Eu92*UV zvJF~`q&O#YoZ02U`ikiFD@0ctz70{1P~HonL(VGZ2~|F;NUN0l#{2U+@(V;0P@9X% zs}YP;-L1psbrOUcX>Q3os@{*w_2X*OaV3Yxl^QXw^8KtCLX}%!<9^n}kr6p(Rz%J{ zIwG@Q(6ZbfO3u+`&u@+`_dty(yyj!R%%Vq2HEyShuv`sL{fMrpnbba8|g@a_e9 z#9DFBVt$Xa7R7il)QkW+b(WUNJ>q@4hM}ihyQ?y1u{=?22foUnKQRk_XV21dp{@b6 z>$K5}28L8KBsoHbl>J|o+EI$$35-*4=qb=niM*D{zru%^Hx+U{B0o+6a@&3$o1k+gozn;o0*<*hh+RY@IzgxfiYs|<%!uikf*>bw38mLSgPg$p7EsN7W0Kw#`{Jo{ zG|w5$HwIdIX9$HmBKh2?U*nlnK5t&E{bO=mBY8_gsiqcJNy2u{FC*m*S4AdMA7t7` zuPR;p;`wt*`!;(m$5k_H3Q!JQNW=0=q@BQ5dyA0tB@hBz-v&BM5K5fAFYaAXObKgp zq2}yQ&WO2R@_VhSjgfpRr8ur&`P_XxSMhXl9Lju2j~$Lq;o%wnDv&sJAIbaKFKJnB zG%s2>50Lv(xz48~qY|sxJfYBb*0-8PYZRQfg_f6U-d3JV`5MDq8?-_P_s5z_!$G9z z6HbCq+NL%Qqk28As+&==x*$u=pS~Y=&(-b7_SJ<>kM4K0g`l;sd!H?6Q;Z7O(c(&F z`D{UkPr~Jln?#BXak-EgzvH(7kt5T3c(U+x%biBx#cZnsC8&M?e1zpJ2CTw z^3LSB8?@s@2^Z}XNcuj&KK5l&_YTs@Ff6nsuDE$xHplhtq^4CJyI8_|qtJJeNb~Ln zmr!Z7-l$V7@qa&AI4MFkqV+D$4`K>xcSDdyGK3m+eHGf)1pb{(>bhU{1nPKCvMHh(Y*&-%JY;>LgaxgaB^2&V`E&*M7qby)z~D0)(vx9`sWR+b zr%(5jpcbom<=QsVL}%6Le`}qQ%y)9%-d0s_uyjg}_jh!$oYQRMTl{JR zHGdL4pbbU4KiRvG_*tS$=j(*3X7pj`oDfRO%X-&I5yDjGCCyNqbP07fgv}n%S{&=5 zix03Lytx(4cB+f}(C&_NFcsvXkP>pee-xt0b1=o}W-QaCH82m#w8&eitPsylVlJ@E zSpF=bOhwVh?Fv}1X+3wY9m^4lq>RmWjII&Z=JJFhJyzSdk8qdgF%`luoIh*DLEo{F z@|Ka7(M%j6!KhxSXVmiGYwlk4wI6Mg3^@_ryNrUbFO+?4P@(<+?^7zp;@8RQ>)b%7 zjGtno`g%fHoKxX_)=$wX`)aCC4?yka2z67Mzut6>Auag2RsG%yzr*l5PpEC`?KXI8 z!`s``@7v(_UGOYdP>N6|cfp$)sH=O@Tu1l7?+EJD73izuq~Ug=v|2BK-}`al zX*gs#fHn^k-Y*%$bA&owOGEi1SVt>6uOz>soCD}oF#bq{-~MD^+l*-_>^!yN9ztZ+{=QE#Z7Bx=;3nZ&4r{3r> zx@$Z>=jRFtl{jBZ?i61&$9FNt=M?Aq-1GHlrQ6 zjE`EaeHV{FuUSI*avbF8%ZOeee9Z~R@EoD8fRWBFgdOjTMogfM!9!C>a(I3!#60(- zc%D#R+dt#lChb02OK>Et}@_}-EaX?8cqDbnuzWQm^vvCeTQZ|jmyUgfJzj)6BO`W%3~ zg#_=^x6wLvP&l%iYNBl4eaVh{kP8xo!d*t*@ki0<;!XZ%e3-p&cTmPG>8Zi}Y2AJq zCr*o9rdCXm*6M+_>eU>4hEQI0)VDuA8{R&H^2y}cF--y4ZohZ*0bRo7QN26$1x2g7 z3-`9=7=?P!l~ZDG7G^ttK+PAWp_`|~{*bPOP!%5+TJ1odYA8SRlA4m_g@|go zW}&|-{6gUpN3RSQ3b!Q1^og+qp&FGrjTTd z{XrCFI4MHqasL;7#j}U5n-a4j?&s6BvIg!sxMv9UJg%>zS3IE5X!bcJ)7rv zAoVP#=(N#TNc>?3$X=^=aW6xEpc`&=bA<99-%tDYbRYD7R*35rdx8EsI4%?FU3q2s zDXlu7C-P$b$%_z0yk#nAhK+@|2bTbS)SGF>bgd=`<@eJ1!(t;@T)2dC|Ap_!6roBi zTa||o@xSl+9zHUJ3i|m7diW3>plLq$UOdbBQhq+XcRm==FGh|~*#GK>0^V7ahY#`U zk>uec&v8Bdp6};_T7JoRUL}6wJ?c;LE5tDm;dznlE9$77ydyUBuifIZx8vyri7$5VlL$uRHp2xBu z#IqM`d15#>2dNu0JhU3iF)G~YAU8*Q3Dff=?*FpjZuR3{O;6?t74FBKnx3@#ac`z4 ztKnV)_i=p-Z9M5rUPAd&YwqrLo)yMfZwqve!Sp7HoHIeF@t~FLM~(tgtlbAG!o3>q z7Tjy#?h*>WM$}hHUxhtRrC1N6bBg2Y3)>St-dj5X?i2dLC1(<52!&rJsxMe~6Z*&& zup8eW2Jf?%XqhRkzFO*QLm*U+Wlddj^XKj1e~Pli$G3Fj+E(g}3lX~g6C$S?3-c~?P}5Ci?ZuMCA((+)7NX!Vpf-}EJT)27;Z>~E0<`| zMkM#2hvpLwdHc$9iq;dIVqJ6BSR8+%*!u-M12nFC2?dd#c@ULq&I$an#iPr zG!awh!|;0kJhG_6`pc$ttscq~a4r=bk%PXmk&9X=<(lus^Qw$cdu6;d$VKI)gxWAJ zCJw&K9=LFXX)Ya^6PN0F0IJRP&1Cg7p>%Y1Tt-b5P6+1)r{Y?Na7@uFm;Aus*)r%~ zDMm>i#l=70E$Li`fH?@aou}Bxydf3*&lQYyS+-Zk**l52=;p~} z{g+_W!g0LA6{U65IMWMhb*f>KAfD?I%KP1ianx(kBZ$aPU=0zG$fG|yE|wxx%lFsS z$J9J_8eVw+B?yTU42_SM>()M$9defQ1!bFi2;XEmLa}E;Xzg2Lr%UgoYC2sQZ597x zO6)ZIt*Shs&atZOkAWASBTkYyR`%N`+2ora*NI@}*?Q!`H~RNt8FV7KYI|Qxex-)NC{Ew$Of8&;~zCsFQT;xDJhbVr>z<4CBO8UkXCx zI4&s~Ah+F@iS-iwQB!IaY)@7w2q(`dI!COSD%Ra!j5c{TrUCEeS6OQk;thCMHJEK-?~&4&tc-*PJS!hBtJo08q^i!;m}H z7-VgiA{3npamR&8uYFuh*CyM4tx2v14J^a?N;li~kmIcZ`Go9#EYZDORI#s`v>~&E zTHaITXq!S@i}5~%eZ5%b+*f@m4aU|tARi^@Ipb&sA$)&!CW5>nnZIw4@3#1(R zHBC7;dcwW|?N>E=HuOG4V+leb9+B&T#vJWmX@8+r(}hbYEVb5SkKd&%^MIl^pluCs zmlUUnelf3|iG8q(&W(_}Cu!P8f1nvg!H96ERo(2@f}`l%k?c*OkLCz9x-5Zbp&MO! zPI29o{p8mPHG(EVR%1$sND#`r)sdlXjQr?`6K1Zn))um3xmVeae9 z3%6CdeSD@Ed74B@!V`;>oRTLL@=g~mvb9vK_^BQ@<&~ppzgoimMS~CtLWu=K@zLg@ z(HEq9<-ZzhQC>-LT(~-n<0^WERMsQdLf%x!Omcrb!zi4+sC}2bMsq%zp zJA+2FI?Jd#K>8m8DBR0@7BwowM^BfmQ zvU)a{dRv7+_JXzS?}=nzv(rft%1C1zJkl*lFO&tG&81zcO-cNnVbstq$-(uf z%3yrKxU!5|YuGf(Aabo5Wk6~Ws|`n7Yl!XK{ly~fC^5OpYDh$zb?t}2)1d|re7>Hu5!xL0Y)!G1jF zF+7EALWyrVvM(gmXuV&rpk)Z<{cUs(K(EkJ1)-I9y;`MD zF$!g+Yn6RL2<~XR6S={!(Av<@%_+n&`{l*8zGc+9m+i41TXxdaLqrvIij4 zK0KSxQZ<09{gc~hZHV@xh-TX*6n%wSXxQS&TDZhy-n)YPP)_@vCsTwv|9g(~F3-n< z{)Q{m8dwd^7ZM6r4@278Pw7=e8@ny?87OV}K4R6$f*AL#wZhJq)CA^h z7NjVF+j+Ou`=>?AHHe~JsgoT!8Bd8uo$80|QJYVo7ItEdAD3>o9fNU_zkXz~f7rXM zm`f-cpYOC-Z@j}&DFx_@P~|&Z%Xf@r)@U7hv^^}yL9=VL1VgF3GDx|m)l{456(y}4 z=N^6ej^GUnwE%C?NAdg`9$|{(^+n$W(|`T}Ls_T};#LS4pX(j%3j5cP@*6NEw=2k#O_@@~+g zZy4O2;u4B?Z`wWulU4i$@S!k)b_k~kh5LjZZACHz`gy9J$0d}daDUo0CA~wf5@>#^ zEoQRU_;f$T8n)}-I}1L-IF}<-`DiD8SYI+a#4x*X+6IskjTdLV{3}Zd)uT!-c8UdyA#^ zyhn9kKNxojMYHnAMP7#bUlNMxvGFUnJ7mG0DnTB43XV3I!sw>N+j_f)ub(Eh2noxF%$Tf58 z{JuSsoucB~`66mnahDQl7y<4pul4&7?plAB&dnSqrzEb`6s<>rh7vx=JlnmN<*(tA zRgfE}t}T}VMmh;IL#R?)0;dbKi!PqgGrLgE$r8%D1*v!!%Qw*a>B}}#9jWD4lx*@`M#%9mLW@WW8o)bzy%o_>N6v)bvY&MrUeO|sj&!Pi z+iH#|K`3n9BaKC9-{X0oL63r*$NZE^>3wZR%(OOlg!IFDXI=X`x&aMQ`Sr z{*lHs8WHd$zs2v9ukkFQwAUJ;B#t`*qZXZ~LnxZ>Qag?5Y=pIH?W&4HaS8J*8AhoXVER}Ko$A32=t$?LqL~Mo;5S( z&qbGxpp?%Pq3rd+k&nONJG3>xQ>Zh9x(02@#Ue>#Ec(MxS_#Dsx=5B#pR`(S;ATmk z(rI?3Px}W8BAH_p#1llCSWgh2I~m#*=kK|U=y&h37_G~B4;`dd!8rj-PUW;*LPLGmWfbt`i_L2#?vGvxceFQ2iEAmZ2IMuh!5`Bq zXtjq^QFV60db0j-GK4xI?a9j^Eau@PEEm+q2Gv6U3yEh5<^3TR)8Xf;GcJ%O&ao=V zk|al{b0C#oRcei12&sJ@;y(@Uc|t9KU&o<8AXRdr*FSNYu|4H=RA0E?A&v4Yj9O!% zR<~4^XmklejpQM}#OjhzCA-8%kor>B`4UW(+EWl8BCg42?1XLfyq+PHscerdWqX7u zlHwIAJ0dDL-%kDuIbVlZ0VjV}gsMr0E-%(rCIOF45o+>OrP=TQI6i#VU{_~mqaL?s zRTMpPN#N#Qeq3x;6LaG1MqfhKcHg9fu=f)7oVcqq=f{P#zdXdWe^!WT|7_!0;`@0* zov(O2#W|U|6t~a}J8XJVZsHc2VM7x^3(c^r;a=G{!yd0sK6u-VB{q#Tr!dUkmr$d5 zpwU*LDMJ1HC8c?h{a%vy`=Dp-zNEl;$t4+uJYB6YMlS#xU8sSVhyZrb`WWUeC3a8u60 zd1F8g;_r1rI!2qFxL)g40#m~I-lNp2tl1{LnVh0aD4JpTRg?X>x)h;m z^-3p!2HbP46R z@BwA7HQA8fgm>Z|P@q@;PCS)iX^3l22I{STm*N>v%NatMh&pp}ten4UPfl6Rz2``6 zS%;(E0@cI({i2Lgd_nh;>`SG+B+n?-SAx9+k-C@2ZxTxN6~C82?y)cFcoT%G#`>yy zXVeuNmr%U^5=~C%b8O8`CRk{P>ev(Eo+1=lX&z>wov8!50$PGPAbY*qfkMy}_?;ot z;ej{~hqqJV_f)t?`=fRg_-yu@n(l9W(DY9sqnS4xOHTWk@|ydm=Bwp74(_SUb6mJW z+{;`5xzk1ZY{M}u)yf+X_3+E3`~iJ5h@~cve9I5S6NCz(CxXT{2U^5IyO1Q#1<*+r zQIOUQ$Gt&ozqAtpZMN?DI8Je$X!;iWDMF2Uo`_oQ$`H!CZeQH{;zZxOeT~|+zgT%l z&EDW^b6Vd6S{t^W#;6jVu_z%^ZNR9SC)B5v)Su?L)RMVYls)CQ%C$_=x@MatGjNG- zmFs-b5p+KHTg4U>MycL9*dvmQF;7cHbhQ^|9p)sE z?-_;RS2uNG*=nj5%OzE|z0l~F4F=DzWeG+5s*Js~2HH?%(}{w(!&Klp8?;=G<4RV< zJX-7H_;g&D2F9Hyl#Utwk|PHR>D{UyQLpQgHzEqdH?FZAVUCM=V_1(Q6z)-noFoW^ zKKU^};sA%GQdFp!!7E^Vyix0qi+UFhE1U5)$Ccu^{t3UZHa;xIWkU$|Ptq?lH|qMT zuIiWG%^$_ZMa6vSu_H?;qBf=3i-r5*7#O1R?UJHL+(bdy&Vz zQlFyv7m8DUo3yz=PIVr2o{$O?-}XnVj^Vl1a;E!jHCmPAwmhGyZ)+Vnm|H)eFK|9H z92e%cwV2!Td}axSxfP3;J~a}A1-V{H9XUcJEEpKt(TYpBs72!m;@bP=K0xF-MG>AW zj(~`Y2?t zn$ECB`)SN%Zk!@iTD2YY+_?hJ;k39`b$K&{(y1YL`aJFcoQeC@i*=SIl=nrTzSg4E z*>S}&m*UEOr=+LhsU>0?CI$#>-pXB^0&2Sz0b};zw~^Z>j&{c2pi0BY}FWEz(HlzjWOP zDdhpA5xYnuSwaOV<>~(tL?hn>TF_UHQ1`*pYwG$ATsqE2AWm^iYb?+CD)WU=t}n}* z$~pN+R>28E(W!}IFL3Tk;@sst+a(mwC*4BhPlI9F#EC;Zdckj*A{6t{MbLJp<9)Tr zE5uG->CN1vwG)h|+5jndEL8CUy{^XZvo|s2n7;0)DF=1O>Z)n%ACvQil(Uj&zcC+0 z>VX_wFgBJi$ya%=p#8|`Rp7gnFKk_)iGEe*5VsK3tudXi#CMs?nTle105i6go&3?DMwMSg9B~-de3|j#-)NC`Y z*Ouf<&mxwrfZ};zTeL=@S3AXm10}1SwEjq_kybm!S3jcFPI0G*xm)})enZ5xM$#8J znTzUci$8XZFu$!!l-Z(lPtt;3-@}>j5OU3VG!LBJ5|qCpYF@mmY+fL@B`EQYCbQ-V z<@?13nbq^g;(C5^>jN+rrGZv^laBlz(^scs4t07+PfM@_{UDL{ryV?P(`qzif>1VS zHfWjLm^Mc|o!0$cd27!ZK}t&zY9z05sBubfU3HB&!_IKN`pIid`$XHe>(IhDvSSjh zA`PwSGVi$X^sLH#6f_#!-{nPP?}4|JFG?66zo&JWa%67+ng5=ah5$JkQ`Gk8Xp4*% zPqUgLnxf_p0OUigb4@v;Kte_67!nn zdeG-Tr#XLw5m5?RK~nT)BO_joF~*Y_=V+af%~lQ*)s7XTgGnb zmovT(G6CrE^7|B5Xm7`Qy*u?dNU=dgv6a!s|6F^6onVv=`H(v%VNPqjlWk#x4&V0! zCy{=$s=j}b?S8*V6H)Zy=%5{~xO#WT+lCM|VU9n=s99F5ymh>p#j<9;uiFtzEKqx^ zMvqX_9NZt{t$I6-Imi-<&f;yvol0qm`4EkUQ}10%Jl2a^u^gwk>Ma_bAXWCGuQe!o zXUjaJMzEy~T3yPU5vBc->E1P`+zNqE!_MvKcss67qW<*v7fP2dQg=t z;4Zz3K|7=!ZS%OCxD$7q9$|=!kk7Q@I;JjrVp~ZWod)0DZsVVd>qRc1Zd7l)uu1D` zcm1h26Mhdor#P<3VwlgbU^z2{8cD0ieFu07#%!c7j;pVg=W%ABPs^ySMhRzb|3Vur zp>u?)$J0Lh_+%EOPilEO*=$$ma(K>jT#Xkbz4T!*3r{XVZ-R7>0#k*44ruuU;=c8< zSOwHKogI1b?f4vzQaar`@V7YTCh-I2n2@K5LU{>aBx4W<+TUaS&w&(OMy(SPZSXNq zbE&@B$KMtA@pFn%ln;l(p1^GWDplE4_d0WIVDf&X|-9-exWWt2)EQbuGq=0NXa z!?<#U3dVEY{z7YLsMDd-Y9l)uXnmVd!5m+w_LX^W?DN;KTX zz6izfH2Y(&K4(sc$a0E-a5`lw--G+&_$~KCmaJfWrM22XYM8IFoUc5gaPgZz9jG>`mtlbsIS6NEzFDzX}Ki@wOjG^ZBlr=gmmJ!ELe z@LWcPamRp=_69)qf?TLHo_%+jq6Rdc6rt$sT6Ip{i2nE(rRa#}#Zgbddb7~eJArwVwDfzfTZ~=8ADPMV;^+ z8am$-TRQ2iIa(hg6wT`QH9H2RXrdRWaGOK>GLQU-%A6t;o{iYMpI25&)~5~DQ8Rbw zaobdRA^kS-_qeZrzxiQ2ODJ!!G#+2a#TBVVV`4c!F81DkZc)2LStrDLY5oqacMP|6 z=XEixdwHiGVVHAs+X-Wl#P-vzmSEJD$S@fb#|~P{LVrVdYALNEXq%(v0BY2`)SZ4! zD8Fm_f_~g8S)0!IanYI{Zmm(JXjH#xKAKQ1Wr&!bFI2Kvj^iqu!6?Zi@YcMaVol(S zIi@s^@-DybZJsR^Hx%L(S{hY3N!;b@qGdS_=GDDRr>JvW?v)U8lDbRJJWzh9hn>qI zND666&cyZFyZl)U!Ka{&B#CD4@+HyodLPT>#9GOfq^P~^>9t?2q2~!jHE?+$KCIrV zfL8z58k0X_X=qy~dP6ls!{b8TJ;A6KTVlotC_|xKM(t`Dw!RuHXX;18##$x&zV~M> z`vQFtDzd96+mn`w`;jV`|J1>^?2nXWRf6!8SC0k^4Zm|g((UN)Rlu`Oab8vRTJ%7k zCzN*vpDKte-&X`|qcD$G;QpAq33VUWfK)X~C*6NmL|3c%!vvvziL;1rw#0_j=$#ze zB~)-_9($L!G8nfbQ+IRj*KqswDX;z8n9km%**wF}+^y-}xEbPD&m#)*3+_ie(qsvR zJp-wbti=Dv;?t`X0_RS0cWX`_tbc8(SF7ITiz(i~5{6k9sP{f)U-;jIiolo++E+F1 zf}`=Rv@{7qrJ>~BSGcZeZyNfA(J4YZy8o^7g{`w3cPdS)i+SCOKdbzv7=^mtRVbP5 zQ7Z+Ept#^$hEO5kwB8>Jtw`0q$OrpdVy5EPSpQj$3%R!1rKIx`tl8XuYwd*W96vE0 zS{&roYC#;v`|CuqRLK)cw-@a|xD?78EmF-VfFk8RL|^v+)vQ!|=4zQ9$eIDQFtz&P&St0|gky|nM7=kvQ1 zp@LsfV$f~)6mpfTTVfeP>9^0~+pCxp1i5;aP{Hue;R@2%7^!PH=jSU}*M2Q$fPSH` z=NVO=>lzM0ef8)cixE*ANs51xXL-nljDeA>%6Az;9nvZV$GaaFX;t|C z?EyG0;OWb4wt2h*bB{iZu6eZs&9zZ;P5o5Ms{?_u5l6u@AfYsvuMDAZ zB>oV}gsIsokHOTl92cDp$1T%NDProkB(Y5zs;1dFMnN8`Rm*r#u*qmGpx$BK=YOi` zE83{Okb$`>n^DW{As@h(PX}A2nsXj(j|8D`?gh(Y4n?o*DzAUs-$5va=nf#dgEgIc zK+gl{`X2FocS7lzNmKQk9Ra$34CU1af_>;|{gqCuXi7ehzZ-?jF{(kZr{0-x#}fwd z>(;cS{d40$e`FNakJagX33o&cHal~fvZW3oA0$+NGp`x;rpeQb1$A^CS=7x-F2MfC zD7C|)-H!uDPUhE`N0(5yZCywF_*QS7%;K}k0hMB1*hvxUjz*7CLLac#4GurUBSWas z#>H;T0dSTqp%O?jkN%Z(J<{95{4V#P<^ZZwj=`*1)s; z8KSnSH>2)?CRB0P!94CuT8P7w-y?{%)w!NniliZI`4I7msZl``nBLt{GlkbxY3$gt zFzM}YiX|T6nkaNWfUzIOUPny3G%j~oTpMZ3RiV5}TZl?G#c^G|yW>re$Trt0&r)iZ zOy@pBD7}wd&qQGeR!B z;$O2g|9V*SuaW(TAy3=YndKC5rusO+UauW1mg!$;U(tWQJ)5}Rnywt7?xvo)UQVaC z=XTvgeQLcVzm%)zb>#_lAEEl?B<7f1Swi(ota}>MA3@X!>szUQYH0k})rtEcJ{x$K zc!XyQc6H(j>CSpS@d!^Sn!TzR$|aNlikYt7QixjgQO4sC@~{-6fLbQu+iG>DVU;TH zBrEnEC~t;P?JA{>w2oFq=OV4&hnB+poF!BhS|#_}^oCB+viW(;2YjMdj!-uOKfQs@ zkN|n<$0QH3uX81Z=Q&@-UY0|)3K;SBD(c?L5(v<)d=yb=uhIo^UDQ9rP9jBv7@maR z7FkD%WP(t>9D@7idPH|wh;Elqfp9!7df^foAVsJ{*>uo(6ok_L(U33Ks1wL(#RkS* z^wE@kRB5a1PwIW?AAox=TmgsKs|s|zJ%3!ZH}6B@ZVwl>`JkNW(6U8ifW z!?=>RG1TnTz`LkAMOXfu<5GD+f1POQ1iwk+S<4b9IWQtMOvZQW%owgl@yx>|Se6TFeZ-!8u>p%^l{JO3!iJ>q=mQcMP zG97tB>3L;+JoodFM+LQ$!+Nz--1=rbPbjmem8{@yLXQpo+njn2WU(ztr^Rchlh@^A zh$1i0=w%7DP1)8!HU{Po=mb#OU;CKm69&>Mde2mG*5Ik#Gy?(h>SJ0a4>y9oZgnPW zL>r&*2wyAkL^zZp358)Lp7gyX>Ppj;luti@Q71#F`d$<2>((lwFQA7S%al4#-o`iM zS(W3;CQe{FY!;7;>*#7Iz?)kMb^~%67KYLB1+s%rJ-6pj}NY^*`lW)A0OlOJ+DO z({Mz1hof6(jxhaM2pS(56{Rmyqb!XIA!VC(?tk=Xg)?PVH6W`)K>Vhf>E}>+&R2CY zo*2es3J30TmLOXLM?Q`y_$3qgCM=u;ri{-uSXXFyY1#=w;TwrxH?$`)MdYbr;MY|> zY{}_9t|@1Zip%>|A+Db*El1*W>T%`()95Yo292l@CdsfEcZO4h6e>O#-ZH-Y^|+P` z8=xPeFCIJ@ssdZ)#e%;tEXSx3ybuJf+47vC@{$p@?yM45@9n_02qR}wmQZp#adNVU zVk@&7(c&@$vMc1E18Mf8X|V*M_7`S5g zGuiFs6s>0*$S;hVAIK5v7Pb0H(%uo%W5rWnEFpdyj^(#&X*>55Q!G}t+HfzCmgNqj z!cn}&(p)!45D7wwyCm%tW6$VO8+VJDePKJ)x30?WS(kQqC_SxPqD&57D%2Nz7lvmE z&nX{O32z$ISJbI&2vMa%WPDV$3Wv{Q0wFB)e^00ggp)mvR||I=t>7%jslk&XEIyq! zw?o$i=G?-W$qQ?IzheIRe1sZxSG?LyEuTOX+pBPE{6Rm{nUph#<`RTb)+juGf_tsi zSN+~4lw~Umf6xlO`wDSFVQPbd>{(JzXc@p53OneJ8t09#+s8VjuRlI9QtnSE8{@Ks z8ZOPM(*V#L3P^l8Lgk@n?1LVH66}qTk9rS1qZ)FaT8YSWzFJN?J)f?nT^8X_k>8>A z{e^qmyg%=aV@UZV$#M{0dNXaYHR{a6vrnNdUU&@jK9C7QL(N{|N$x{QNAw{Vt^yjx zla#~K`y<2yX$-Bsx5_2d;M!X9gqJ=NQq$)vMHeTj_2lvC`zAL9|KYEV^ z2{1z_v}DEj3~hI!*H27?&{;x>tW_pvp^T!P zGK!W@k4Vwz-HU4{iM5k>np>#Ne!H;Ap-}Xqu^i_f&j2?a^71Y`=pnd*AgUyKuSPj4ugX{nx(kea zga!!#PaUazi_b^`303}r$eU&lwkr((BEw$;>bOd4NAo ziWMzo=JAPIYNv3Pa}V|FLb#i7Z2Wq2EQrEYn;gdlBi+9Ay;Z&)nZQ%Y!yr+HCH8|n zp-kL0sN%a9=a*JC$Aa>(d>M*EQoMW>=cT?ggqpe&u@xX^mB zN3^qD=RBs5Ti+xL32dzlp}bS~#%X7d-K-9+7psk>sCd4Ild^p5*Q-ltZV` zTOQdw*6Y@~8q3($97{brn!X)8wJq~(c?;>eRefR`&g^9gg^tcpa~Msk%@L~TFK3M^ zMYAn?o7|c-Z~`mp<_X2NtLO51+$ug-f$n5`vL-195QX6>9In5BzFc9WCHpqk+tB`t zPC__1Vi9BmmAP6G@6YSwncuRSYK?J>MiFwBhObL zmt*{LC$*#YiyfwsDv4JA7W$?J&AKKG^|h1rZMO5WD|z*mY8gTn3Q?y9(C*GdX@+`! zAVsK>Spq%JM3!-jDDDiQa%8W?Ywx`%Tbx{AzbUBsuZH^KxQ1rX81#a&hr#pCs#dA< zSRw8lq5M^9@>B&a^feKk+z&|XDKgoRCsZSOF;G^i&?5MIkaouHp5!6Fe@@5c`ab0h z3Qx8sn1d})U(e}z04&P@t)7B*gF7a!VLN(Yx~|J8Ku|eFTKdm+(N|51QHemwyO@(d z&!<+|HIs$Rs1!v>9F!u?RANm4L1!6-DdFiaNDH8CA_qXe&Gny_IYN0)1X5I1jRVRT zOASbpd5#Ocv3#yBwireMuT4akE3F9+sTIG9#^f&vH4o~kPn6W8u0z!F6TejBHn$;w z!)TFx_3nb>mc2v2PD#*c|*eyQtT zho==YML{}$Swc}Rj|iVOE_x^KLEdsIt~Kf`$&vGx_sjU$A@U}lCsb%mtUPaz z>AbZe8dDyqR6!QP7= z=xYPJ?h}NX`zy?Ncm>C|)({?h;DB-B*VC)F%YVpQ&G!QVx{9y%5(tOmmpb zue7{+s57pzzbc=fz%t$*u&l=x%lRpycgleZHEKbv%+hp~c-rXU8O(^XLMkua}w1L*^XYHZYzyzU!`9OV7ufg9&@11&=P-6L>Q9Tl& z)RrRDNZy>;Yv_(n>Fue?a9mi6YWFSq8%W!}ZP|N}-z=eUKfedM@hAH#@ifh(o*C4h z4s(P$8m+OGMPqJXWzoYba^%VH$I;_Ko>16-Jfe3_5mAfR+j#I&^klfp|5cI|eO;LD zm!J30|DkO!fctR}&zX>$#Q$m;;H2I~vQPOOAX>QhK-@cS51o_f5=y3vzN6*$Y)O(N zmH;S0*S;GEUErcAM!^@%rOqFnaEiI#GNTLitPG-cf!AF`cKw`5MLlkx<@Rb2(iTBkd&d z?eBA1{_>7tUZuT{*K3f0N4yJC=>O;37+GOrG z!|DsTlVzsK?_(J5$iwo4vf&qgmFnv_`U-VM($T!6{4Ju`lc%t&;VtfQuYtP-_Xwi! zeD~jS-9v4zEyT5SP5a5ed5}2VoO?kWB2>wF55Fz6F0v{~dPFp8#wkW^JQydNVVr;7 za4_!uu4r>Y=TQ*qP~JaLfH@z66; z5YmFO9m;WBxC)5A_xk36M$WU92A$iOcF=MuPpCo6Wk2q*LJyV62An^{J*{g$;x$hB z0>uS*LXNOw94)dEF9h3B?-j**7Y2+rY4$+wzM#vvd%)yFh;*gwbk9)xkcfBR{ZTwes3`v0@J?KucQCH~K5I*143X!! zFb=fRR~}z&v`_ncp%w2aqsSL|dc+oA#wU*0E3xjWU$O0O_C?mWc{Lcz>HR0C zg7J%wa3{ho$sD1)@gESU-B#wSUVBf@zof<$j9W zlLdVgz{PeDSgv9g@X%{c<-!(r3nf1XbvD_bg&IGAi7^fHQCLLLiNAFFH<^Q02$IJI{ z-hBT>iprlx|Al|lsOKNiqs+YI06t?)sCS7!`t_yCgFL2u2F@kasCx|3wPYcg`lHT$ z=05IaH16Xp%V8o)mQc9gicskZBDwHj2W#gVqNUFKM|@m#6oy!)*gT+e-dIU~l_=-v^$6|>M&X=Nw3zb@ z<~-o<&;66uVM;8D$off*0bv*)|K!WQdNfvc4(KTay^)9D$`Hy5^Os9hSdu05GulUU zzIt($jCa+eZ*%fE0*EkNm2l-$ih?|NR6_qAb6~iq?>wP`Uh$be)fwT{%n{_vh$3ne zJhM#xTSy*MA$r3y@iONt>XJns&WzBi16rZuIwD$<%uBk2@;(E!sj2Y&(p7%!wW*iO zdu@ru29)`Vb?an?P~U;48{oPT-@xTv2lPPRXdJ4YEa$6lq2qiaTie0FK#l@gw_ zm64i1P=DVdq{}FjkFJ^$3+kUVZXC&6CH0EmLLRRVmT-cJe`kC05|keMrH9_Vo?WVK z{Ii5YOaE#cN7gK#j0Jm+4DhAi+2 z@7ce^b)3kow=R_O&xo1;PZ7A5!`rjqIvcLf!*6O!tgk;aeTAJljSjV86x;A% zp|u;38{kU9OQX_`kF0V!zK2i(QPCv$!9^Pmy*O=iiQxWNVlsl+PdhmR2*0m;*a$=Lu!^J7jl> zW1WRI#BN_}(pDeptT^wP z_v1PZmr&I}%~5q`4eGPwAf;%)6Jv@{y9y#%4e3wBvu{-R2>hYdP@P1s+zU6monmE)9 zxO|mRL49_^t*%cW=v@f3yab_IerfvBv8dwtfPFZlRLvuo`>M}#s?}^k;Pf}_+v)L8 zUxYG;SZ+W*gLhNO5qN)~$8j>8FG!nGwPEzLlW=)$Flb85Psk(2AdmO} zeNdIgoqN@nO>|1O=Lob^#Ssk8WP|wfDn-Mo|GkM*TNG!#9y@Ar{#|(TH9{RC=Tu*> z`SnFP=Un@F+|PM*4;dG=1LQNssA_XqjrQV)#XS3;c}?>i?WK?H=1cdxWnUYOPXw*U zbA<9wwZZeTkVniG(J!F{2)VciXd|z4Py1>6iJJi3Zkdtv{;xVlb73e?yiVFLe(e+F zWs0mUK<-6ejoK8B4hcdLFGe3^NLTl%85>j3+3vI-nNY;JanIvsKzjT&iTUE+SEdL> zVU*6d4Ze;$z~_~VePhY%TZT|8A;pVmR|KSdMnw#B;N{1X273TWNu@IlA zYGAkW=N9RkVdq}gI?S8u?Kp+X({GPzC{HM^C*^l4%=5P1(=d+UdiNDu7(!vsr*r3j z_BL~nf0mx-oq3~NO2ZIzo?G^9ADQL2Mw}&Eqej6tJ4Yz=RY$b|Iu>e8Ci=Sr6w54z zoqwaK>99=*hc{>)4f`;y;QWPK$SCSlg8iKprBcIAC=~9n;MLOIF9$SpwFk@nOHpQ0 zHV@E&!oD3cyq{*qQh!l&4?zSs)V@w^zs8W-&kwbc<+w^twNte#itloMiu;1CJdx3PHCLD4 zqh$coEY5NkQ{|}bF&yPx z6<63ETEl#cXOkBC<3G-prS@u`GwgIU z$~(8&Er;I9I(v+69ivDMIPk zDNc~vTv&Kk#ad&{&Ix!F6La0R`>Zgb={ZSPWtQa zVsDjv3sDh}@NAS`;f_+|IJnnf9@meFt-$e-P}BP=?JvRG6TC_r&qkI?3dNBW=X%_? znC^k5ur6pl2gZ&MaqI}o8u4tEuv_gEqqZg;yU(zz`qKW6hKUe&HM|=G?=o*GK0#l` zVP5WIJGovptAw+s*|%5=fY^r&2hV}7Q68mwBO+Sc*G9J1IYJrAkJ7!q$Iw@KRUP~K zTA(jNZK!4|cwugH%)WLSMQN58J2Hfje?^p@*@`OpLDL6@G%UwX5DH_x?n7Q@527{7 z{VU6b&8Qnw?(xK2v;^+O-l5jBQh(KR9fk$k<9eWX9I@B=8lFe#}y8Bqs1DA^Yq*_+6-Cv-f77FRgW-6j|t`S8mv{Xb&S~u zBMjWHv$%%x3dQOB@u;%es;u&FRQDzI!=)GlBUW7>pX-qzlrM8x5Es;Sd0g(_e7>rY zVUg?x+R*WuJ=2`j-_%%3HR_ecL3IYToFSBXKyhC>5i07pgGOZu6*|CFXIeP!ETr`v zy<>H7N0Z3?O;aJ#w}~1U%G8ZJ+6I-?{^r9$A0iZu1{y z$n9W+kZ%*J>y5ZS!n}!+P}p`<2?WR~iMP2{l@|y-$EQXuJ?H0gTtN2~D#b9|KfZ=j zTn;H#;`w}p0tV0h@TO?@+3=+bzElU^We9Z^=CVTd5J2EupYiuXEBc-f!*iDN^(LNd zB%=4?Y{PqnR&JeQ4d)0&^bU2i33r#G)HvafYoD8Z63b(=+(kY+%(TBg zD*sNpLO{Mmdkz~o9+n_%o+fR$CkRyuziRQ6HMrMcPlNjy%op6N;qDSD1i!-eX|!rY zk`c=Kp;tSqP=|+micsXmPB4n)Bt~skYYQ1dkz@cpuOvQ{j#S7jp(s4aO_1yP<#Gw~ z?i`^;;@~t3i0hE6_IBh6g|ijN*U<(KIk)E7?17;Wm+v5II0uK(W)Pl%ZzIhm-qErN z`7a(+9381q+tmWvC6wmxm;#-S{_$VqHRRnJPZuzp6rpN*xM!I*@Ae}t3@xB*nVK@3 zBD4Zh4SH@EiDt8e(v&+I&F0?m#}4>{G+R!An3FuGh&I*lmD+LyDM|i=sZg)OIWQ8l z-hehuhB`GTK`29=#(WR8C(Gp$5VY>wV|+a!Qe;yyMW}6RO&k4w)T(vv7xe0<0Dhm>V@J+^i!v5M*2F?LR44Sc^wH)*vOy~673Y7F( zM~YD7-QAw%0C#gl@A;rFu&lHZ+7+KOgd%V6WB5(DkJf2j+>;jpx~+mfnk5v4-2icI zfVc*C@cNK7Ut)-`IbY@oRk^O&u7qF45Fj^iYcP87?lqA23$%}Z*Vnf}Gtpl$$7nx6 zbGFbs6wSoW{B}jd-uI^z8c*32H(1{=cEXQyTV9= z!`*{X`*gD>7T9|l6&Zz6{&>}i2{k=C+UT4_oYTKGmdp|=jC(N_zD}bZTBFRMvjbSp z4EMA;IWFVxUXAN7EVDY~!+>nIKr_q}YEBrvu${53)-CI|5=pMSldBK4YeK1W^D&cCHE;5c_=~j9QcZw$t<{&9&&ae zp4jJ)j{$82(NyMD?1{l8)aOCQ#kX^Y!Vb2s_rq7?zP}Sgh!n?FrXzd`y>t4Ku488y zWvbD@ER|}p_2*iZc6OiAq)95qIO=*A%HXOL_Lv-_P@DhwVBAv{UF9oMc}B_TWV9a^ zf2!jZDYPYiy3SvblJ9HE=~pu|XlH=_>Z5v=1ZpBdD4eVO537>oxOBiLFShg%X^>an z*ENACl(dh7I&Xkfj)wbkxF_JABGlRN>sa`87TiA#<@{1FuPEN8_OWCLHQLG|hCuB) zOQ`adMf@6^ImmIo^vdEdUt`@L>u=wizRa3`-`DU*ky&Z9_`sLkEB+cE)?;rkv|?XP z5X$edH?t?T;L0xTp83FUM;>(Dk#_B+2!*>WH7|^fuv(V+V7QE_R?Ajz??jIWE$JC{ zmQc7BdL5*H8Pw`s=tuPPQ(|J#t8tCYF)F>#4xy)v!DiVe<)DnbhR2Hp$xcNwV zYP&+)j-tKEhniODt+FvCbV&F!f~gOK5wffKdS#5x zu{r9sc=kih<=%Ks=?Gqwc2U3m9PY_v`p6L~q9nW;HQS5`sl9!pKR%9YCC4tNy%sNt z*WBHPBdOf)OMF|Pz9y@+92K7kJI-XQ*-q^DM=Ov%8|nP?y&VxcnSf^_P?vNGRfD6| z`LD563Q8?QceI6o8;^OPN97cu{B=y7bDSC0wsTlt`&E67>bZ>e!|V^%ePU!Ad^bm^ zeIUc5=Mu5B(w9P8P)lv0asCxNH+u z=v)D%z}?@-6%vH1_nxgn>mqRgXx-yDsMXA8$up75ahW@oV!e>35>xUSKQm=4k9()5 zKz$Kv9o6QYojN6q+tME3fP-cTMZOct>@Y+ld#@f$pDMG2I{3X)quDC;t)G>TC#ezBib@*WRE0m2J|lgj7SEXL-BmR` zmF?pHcE>UI=)obyD4VWV+H6wN^x8&B}}0vKv$ZgGK>Pc!jc7NQ-l)dNk2aZ(A5c=vJZ@-5hpXKHHt&gSeD}gN?S4ljcLsyN2uV* zoO5PH$z6?J!R$tYcd!4fq=@8P9sKC;J@ zk|(Rk8>FLCrWDs0Zss6M?#fEQYEG8KmFBa(vI>PhFz#rx**84TgnYnz=MkM#s3)pO zkNVadw3`k~W2(6rA!7}B&X=Kl`_n!!$k!0WgR7tqeTbpXlS3@IgEsehcv$szhjAv_ zDZEuBZf-sAgQ4y1LhP(gFe-6zSN%|xBfTn#sfBu)GsckDrBii>^vH*+GK1Hg%BMua zD0<|!^)j|~J^RNb6!xwfugb1RjZh@JjG+RRz)&+knIXS#A9%YXeLVMwlGgtu=-ZsH zTmH)Y;pWyZ;tzKp*(EZu1`|C*qP+>n<*k?XB$KQU?|G?pcl-lq`cGrjB8{wTCxCDdsChVY1)^GoXJ8h3U{5M-$uw|p5ywDf5eH)y}m2%`?u7&z&(9T zl3UKFc_6eD+lu-EuKYksHG+3}CkRzt9S9300NS)$!tDPOpIt&N3bTc)jhtJ>spG+O z7gL-f(uA@!r}!#ME$lL;rd9Gjp!brU#WTbXv}Yswmt)jN@5X%u?lZiQJZUl07-0O4dewJJRkLb($ZZ<6(Qn9U%!qksXe=+ZG32C#xXo z&9@hUw&baqE|*Z4EUp{&j=?xyC$#x-q17WPW>;s5P)q)(?9q@;AvN#yfAG2IqLNNS z&Tzg|YBY+LrG_gnSx)f)&!V)Tp0+u}{%`IZ%V)$ud2<}s=IKfCRygL(D&~tv(OsR` zVtGPcVcc1z-&|oRnNGDj>ZZ~%NU~BjcsRxtwQW7uH-)SalL(qL#0Uft% zaeoY^uv<`h#}~_+B9tyQ?$X2Z;#x|uyctH_I5svc_k)5gCb9fkM*S)r!>>rySA;5M zy_PYdm*DRlqiO@~_by5aoO|7JdB2P}K6(!X+Aoj;S;2ifkdjeMNh1>#T=%Wy5zqWR zo@UxKY~{cuRD-hFMou?3J={_$MJVEwt9bvOfH4x=fp*2;9b)@JLW%zim3m!5E4!dR zM5vMUp`iD-9HCHFmA#vI&*-{WJB4j_$)QV}kZQR+*95L=;b{Ps-%bBOK=|-`X?t8dpTU+?w4XdaCG9l zGig-L6NvSJv1dabP|puRCG`=F{^M zgt7#l>HY)AeHwCWN^2XQtJ~?Yf4NsXTtcn=C-AD{cg07YFCrL8B zIm+{2BT$YP@aJ~;uJ~*mhwT!|=>y7%pbX6Z++t!q`Ezq^mSC{GlHFqK6HGB1nPR97 zs&92toZ>q4t<1jMW?=~Oy$Mt^4UpS_z6gbRA*uoStHvw(bVJS6tJxLLa$L$Ii#|&d zW#Gnu44mV*lqBpK?7!`1EX}w{{`_d3P~{RDwq-2Pma>XQ7-dN^_##`5RH@%X^xKmO zLe;3Z;`hqlq>MAURl`T*;@)@k2Zwr1s)|RxO7aned*&tX+Y0UO*gOZz3-apKLSzUf z(ONd7W3A@P~rBtg1_GJ7g%AD}?%LA4(c@8O;uY0OQEP?)C%%#*R#KV3rCEUtNHs-?TX~gMRqJRhUp&XQ2{Y%w`0%xMTKo21Wo;ExZ_#sSwi*q+rBr0 z18Zw-JXd|k8rwnd)lsy^9;_eSzfs-vs@ktQ_iO5MXDnd4)d~Uib!CMvN zr_{xFE}@)0ySV>*Gk?KS5UOU|q*M)44#$IKqw+$^XoXWK%y7iUZId#bqDtjeNabT? zLyYBo)mTh5k|mU`7upewH8Q0T$60HVtD(F(Ldl_XyD(KuQKy2uY!##qa=Dx56s0ry zY%GCF`3*=(*Y027S=J)zOAuy{(J#dv7oM)m%X1cMx|R>wPNLT5_n0T_5q7WZje&gW zcp>+0E$dbnwu_A?HCWpB0nTbv7UD^W#~7OFq!_i)X~0=BKdw+Ajx}Hm&2aHsrnaOe zpcaHE#C1858fiar?V&Vj-=907=0K0Y(M4Du&_)+~xBDUGn=83*`M-nUjWG(Ml!gCdLoa?Q2+v{md()m_|B8!_5PAS&=cU?ja z@-ANKeZD~ZZ1oA7-x-?cpl8|?Pi3#tUjOGMm(#R@<`GTFxj!~VCZe>=QSF&YUXA#& zuiDRC(Zl?nEM2T^AkDwlks}m&1hqP$2AY$~8xi`Ea!{{b4;(blDIVZcfY734Jy8ty z5VVZV&4c_SD|2{Z}El@`lp6G_2vt$Zk-;j zFfK3j_YwW3r5F{gYqcYe%e#Zhn;{gJdbh3Te#s-wWIPLkHP|f2Wlgt5ujn+a5a$@J zQ;jz|s<4Juz0r{)R1NU?2>hzT(M4KG@gnQ)`;~QLp5xMx2sr-(jNpjMHm zrKBGDaKgzubHBeQHb_MoLXC7XQE)8D5{iA(p|3Brk$968q2x@Su#4bf1Xc^^7C~Z3_}@0 zo#0(yOFG-lljGoyK9=j@j^31~_qEztLVX%!!J{EeD_STiKZqz%w!-@waaUE2bB~r0 zTO7v*oxjRT`<9zJ<-D#5dk(~24X7~z)GT;c(_=Vt9HMY`xkjDIO1`&&1J_!7*5U@7 zFI1>sRSA2MW70Y7#qyzzBc8b8j$FH-t(NN{5{R;qZ$&#M0V+ zS~L7rRc0Lbv`Y4Xg1%~No^p8)Wv^?X)r;|3N0v|<)LcX{e}=uLCz-^V47A+Oaa?G> zpXRe4jov1YXk#PvrO1v343Q^PiT(Zt{JO1yEcX>P$???MKu>7Dugl8i<2+ploGCG0 z$*X=HeX81#b88%_ksy^iE~5ga#`2na2a`gjMnr|w9IdHpH8Va~tN(%81ki`6tZu~Q zZEfUldsx0susBcR`+G=VK(7QjLYa^X$`T>CqwF@ces)Q#=LvNjp8bhy3pmHR_tm&w z!=m5k?TX8KE#ITGH_XCb?Wao+>IrR?7t9}`n&IPX`{ORh6~$g(IV{=%tFhEV%7Vh66eiP94= zus?FXRLoH*=OCUIlIA(?mh}0yh4z??0^WtQxiNT)bM5rIiaf2;8F6_+73K-nrm>FH z7kHDwy2rabjKM0oI6Si_ z4D>u5b`pdVsZfj-H6h2#A;;x4<4)2wQGNw$CdDWSe5e(!%%ovj0JMtLt7sQ@*1?q} zRJ}TdW3-ma4a-+BKgi3lE%J zYksS-ra}Ai;O-I%zv7$KTLd9JxMN$$EtPULwgaI&cnZ!oV~;qYH%uq4FMxZ7P{E$D zd~29`N8u`#;F0dLoO?4wXSjGBW-J3e15=}#P<<&kWwa4FXmyuLeH3)2=ay$WvxGvfwoxns>4j%g`fxX#scG!hjvS*QKjJbruJS>NB7*7W8xVK}w!Dp1XFg_AW-2X~ke2%%Lz#SVZRlPqZ zb2xLR?rPiXuO7yMRV!r=KU53pR?0C-@hduI=YaC)45`*&s!;d&K#G94%e#nl(ZjJV zE&zQ^*)vV`>nm1lk@B`kOl4kJY?0NtrxI8F$B8JlMa+=yRIb%#-;N1W4z|T=7@txc zS7@*DK!3+lT4|oLmo4M)v@{5jAr#_il!H5sZ$Mv#HON3xx~Y#euhI^;vGQWqzv9qg!^ePb|<&v7ABLkWGjp z3i+wYqaWmh=p)e65>5Y3Pjj1ePa8%LsC}&g8iRbMnl#6xRryiIw9K#+gJT-Tk8(kl zP&$IMNscssCHNGvT$7eD#ZP%X+JHOK8RoGD>;C>iYraWKR);!^SVoC6DH|xw z`{tCN?@lO`;k=hb%)8T!c~=25u7l^V7UJIip}06O6n6=A=#y4!?G&Lf3n9W=io8k|WBDiDs^QmK@toJ@Jfk$q{8nmr&TtYLw(yQzkiLpGr0JXvLDFRFY#@ zNshJ9*HLE7G?$N$dbIP7H~hVaSH-@<4 z=3<@YT7siOd5;wz8Dv3~C)9EXhv73fvxfumygIE7sNDOXm*esXmXOiZpm=IuQ1ii> zO%Uo(UeJ(>x<>>lT6(or_1>?lu=mbE=^y&hvUMQeAE9Lv8)>Q^de;V|3)97UZS2=g zJ@bf0X+>aZ!4H(@DeaNTp;H$bZohCL&lru9*Wk#Evo_GivX%G*gp+VJ!WG2} z+OGxsBed9S1Exr{G8H<~=+FG)q-ya@ zjOB@1-*cvSN@>p^eJC~>eFe*zW0abcXc&c)=VRrZe55vzGf7eia&BsaS39G?fzhP1 z4(;U#CFXN47>(}TnZewbv0QK@i0%#kc@&!gUH z;u+j%A3EqHMM3a9HTFkB*+ZaEV%Pv0-Z|bF4w2%xFrW%2M+lK26z#+ctCTQ^3eliK zWQXOe0aF4hLMxRPEFVyMj!~$wRv^94wxen#$|PHEZi76d`lG%r2hzH3PxMK00-j%c z)QEC4&M8!i7;-vHF+nKp*+2w)$p?S(Emd7Y{Y!tMgeuiafT~gN4$c=I_3w;B*`tCQ ztLESfl>gKdaKr~0FGnc!+m=3@t=H3vrWT-ffilWukSC7v<-$pL3=qdbe%;V_hskv& zXCaEhfW(RSxiovx=GVKhfq%^kO4}_k7DgKl*|Js07NEo^h6YaMG77DM8=+@3R>~H* zG*yefXg5-HY8H<}d@eakSh5lNO}JJ<3sLLiIf5BNg@Ly4%VM-eUjJ%G7)n1^@VYye zB0GzF$0d*g`FZL_ev0w2{*A4Ds-5F}8Ltj&Z3B6k;$!()y0u5sa!>=7vuS*UIF^A3 z=HiAd@=tEe#disH+FgQBX`)jxcQhX6&Mv2kQtc~BI}uWTiYHh?E`STUI<61JNJ8dv zW(egqj(+MfYG>KmTH-?~uST^&TAkl{5ALmjTFPnXt2Hk_wpW$D3?&nLH1gXrybqP{Tbx)n0U8%&O(Y%BWZC# z{WNp*zoUz0{oIcxT`j=%p`-nthI>3W-0Cg>33)DjiF)gRZufK;P;YrcwSe}}g5w5! ziQ0H>ghSpEsHcTt{ElmRq8Dd5@x=CigGL!W1G@y`O)yHy4=gP}tDMBrg4xqdak_+J zDJn{mfp=nn{ueYffSg8ZigR@8f!` z)qDCh-$!1Lo&<69$uUZgU!hVYjzx&hGpd%ujE0s8Jq}R{_Q>c2p@L%&p+m)S2wTnN zxT@8dF%$Q8aLx9%6l*q>;4w|LnW|a8R)F-7J~9cGYKPB3m(W+@U&)vlS1!S$0>>3q zb*;yKT^s)oW8VTFMRomucd|()A;ghJ8!?pyDT#{CYN@3yEfb_bt=bW(__I_elq$9A zZ|h%MN-^AxA%ur?YwgSD`qtLR*4oypE!$sF@x8tuAgri>in=N)Ld^cph z&ywh=;CM4ZDD=g&jMi3JR>zSK5iY-^uO6veIg+{ZKqvoEY?p^_uyx(e964Ow4)(t} zMeDW(iv2K59WNZYx0Y#&niaH;qIrNOT$!9;wyK#Bs_PN9*TH*nLSd|pm^_1bZh~Yd zLtUSRbZR)>g-a-|ou{*$dSxecau)V_r0akz6NExJk*6}Hy$p%ZN2t$=Wt1TljJ#<# zL{CHYb~<-dm{M3cYDkI3k!w@Y76H1}mp*I6ige?Q@@HTlXwc(gYE_V~Q9s%J(r_cz zGX0BCe%n6W{QVHVg87?>Wd&Z%Fsh0@XE4QFd5Y*SrP}zhswB#Kcqkv%B)`S9a2}IO z9qt~C!96q?9s^}8PAJrSVI)m^e;q7^y^b>l&rrTfp6QVTtp0ip%h+;P4Z>*!^5R*F$LYl?T##<$AqdWKPZ>1Rk^FeBO`G4<_r_Zyw;cf5ttmyy>@Az-e>9mff6q{c4#Ot5hbAYE)(1s%L4RJgZCsd^$*s?j+3-fbbLLpW1 zj5v%3(*&m&?R04`%y9Mb=)KiPD&0^*GlUwrXr!fAN(YL^JFUHJ9maJ)Sh=HFUg-ZN z<~YzgO~KxH8Se|gdVu!|K3~(L!}rM6S3axOqMcRzE563}CG=zieDtKdEbP-%`NDKu zLJgo4qF63xm@U0%Lova$pk(TtB)-C>aDqwsM6D6%Hsd@IdcW*Z^TC`V_QG;&Lld-^ zB(~>hRZDBkm5GxruNNJS0*ZnYr8Zy^`GkD6cVoTC7bA-Z( zv@JKBZEh0!ig7rX+yg|>GkOn}BxyCmwM!^N^jJ;sD+=fNbdFf3!TC_2 za|-%HhBmte94D(fyC(KRTV5cJt zfcDp!IYt>t$XlP)h*2<*M~s32=hM(e9r9ivR0nbicTD6D&KQY&9-J+~KFY1HQ_r^- zeF@`&$G^^XsLEO<^imWl8hRL)P~>4G%B>x@Z15f0BDC&-UX&7qilT?U-Np8(njIh? zJO?YE&(PAO2qmw4gMF^X*b6sWEMI&Obgr%VMxD%jUCGN8OB{z%#%PQfg&d=7Zf9R5 zIYxN}`+Vim^Y|!~^*cv(5a;UcLWz4?pQ|@#8je+qZ+wnZqdCMWT!%`jX{2}yeJnC6 zJ}e5O+pp9HZUf~SL0(4s={L9k2|^`nRhdHR z8j;CT%~_>4@V@KRH*}92QEd&)yaD3y4W+g*~uKj6H@ z0+K|X99MP4eLL*jH%sMyj5l@z?_HsC2CWFmzpm3NeADlT5V(pA_vNDJc162qijIZ?J*OyI3OJe1zYS$45JIOzRs} zxF0KMkKY`)S72Id^rq)%;~P}J&Go>t9HRC5z8&Jr{4SSwwO0+_+Ols)+zEamEOD_K zVU0&Gw6+>O8J(8v==vC}e-RZ+QcER4sEFQQtG_4INklDBKC)AcQZ=1q)V+i1K!>J{ z{s9Q(%Sl9(m$87n4hMNTtUZ?GEDsziy8@$3;rjw0NkG1+6eT#$o7G87OSViRi_3$f z9b86K*{yS|IHAbL3fy&6>x3Ln*}%I~sedHYcJx^xy3FSOPSfh|GHL(z+b^>Bp44l0 zqBAJ_iK=$Uf4~>3FO}>Rp_W5GCIP4x1j5Q0L{urjVR0c{bBg~gI4N-IW3z5vocSlXMY@H!Kt+Hhr>c<$q9HFQL z)dG*K<1L+g7T!_&zH$^Bh0NOfowww3Qi33$` z6wM5y$Qx(66WB6lg#4AJ5x53a{7z{VhJg`*%HWCkQpHmt!+VHjF7k z6^lTaBJc8D`i*S_?ooviex`(qa2dc6oKW#Ip+Cnst!9q-YMk$gI`l>;&8YND(ck4n z>u{bZX(Ff_PJD4m55T%a-$C6^1W>Oio;aWEQF|ZK8d8MXg}y^0_}$1?nV75IsMO*uNAqgNF`}kaio(Y6l%h9GTZr}W+3|a?bwBJjjUL!)$Q~b7=?EZ z@|;?Z>FVkTsT94vPB_-LC|j1-$~)JJMXNj3U)vp#&<-*>Dx5f>I95H>n-nw#>V0Z2 z21P%`w_;kjHvaSHhxljm{TC8yd=)(c^Cq?wNuy5@3iBm@iupR8cIwr3clD3xj`WK< z&uM~lhEuF_oC7g`Fp}6$om&Q(bBZVZEv?m7ZNs3k6+L;cz_g;*c;r1`&B31h56V32 ziN&wdd^_c62A40xio$_=9W|P);@8xWpOZMD(84bQ??whd^M`YCfa6MumD6xE-QhB= zrW&u@Vwr1&=%4RmeMk_>uN8IkU9J@hwPMR$bi|dK!8NT^8!E?WRK8{mDPKMLu7ToX zozy;~*PW;8I&#bxYAY({ZnxWtg|)K zM;T+>?Wk|bdQ0?wYNHoHO*=l5E0@FjF^!0ebI{~qY>9A^kRqVASybvOr#DP8!fP2P!Q`R>FNp@QYIa>RpmGDE0pJ9$uc$-y!6Ck;-WpPQ-m zoQ=2g=pmxKduc6x&dZ>G&D3qQ_L+JxwiDk(dzeymY-<*k9Q^OF=V^2*58}EczJ@Di z%HJcQC=&Vs+&++34zv~+&pi%~lUzp82iW#w>Oc6pi&hJ86bwCbf>8LbM9*rLrZ?5= z#jk!jM-NRAssU3NjR+_?0}~b!O?XQ8Tc5Wxv$Q0L-hPUg0Z0i-ux_bxvsjNFGvDV+ z@j`C_2V=TTuP{rO!U$TzVf>oULnVeM+HWADt#4BvvF zZDC~#?2qtoFWT{Axqqxa=F_^Edu&;2f}?s|A6-)HLLVo_W%WY#MmiG5a=DLrc*ox> z4Vq($b}o0)-m=uOT6^R*=yoSVezwsf6l09s*x3vvIzy;cAL`x8B~&oKxiSFuKncI@ zEA6Xp#(aWKP#{z@)WL;GUJ;>qJj&vRX5jiFj`bbxVU%ApdAyTYinDAuy6CYQ;f!-@ zaY8l0FPvdJ3(h}_bXp7H{Bt-jfU(G;NYZk@!{xrq(NT|kASY)phtwe@okoICCVbt6 z*u!UofMAW*F6z?n({Lm`0JDP#e0oV>Y!F(ATx}*EQz8p0dYq9;N> z*d>0oW$sGy<}tNPH1?psM^{++);OW4_XI>wgb~mpbYU-wXQTNd%VkDF*A*`8pS$)Yh0;$iXL(W32wG`m8vi7URq<^ku8D zFS`o3KM4A@af0HF;g@rd=P!g_)W(q?5=yZ-*6Q?@_6Q`7=Tcbj_=w%xSStGK!`mr^ zQi${zkdat8rd#v}Yg&d-)ppAUWAx;X*JU-hk~@OR+YCx^9n_Knqn0f7mi!A^xMdOZ zez@C0tsIOaA&)=7{q84FO^aZpmoXkaL0$YP!6QyZFHWe3YC5eVpdJA_8{qn3IF3=0 zz%u6&YL>o365#hAt|gD?3m=9z6DM#TDp7w4=$xe9()xaiP%i;q%Npl0$wQQS3%SS; z3K8ga0b>v%-OgV22GLlHHXe0mj!=dHos)VOG$QA*diHaz(FH<{*i&q$I|}(Iq#^@3 zvA&Ba%uh_^=R{o=0;sr;G8Jl06_o3v9EF-)1(onoQlYSIU9brrO=mBfxT2II)I4~9 zpj&vdiu@xOADL+Zjbj0cW80I_%MMj6L3Y2`Cg;AZ%Kbw9{sYk3il>`8{ND{@&4NaG z_!Pf7ew}@A#h{*58=Aj&2{nqp>U!jUUmnTfHTuZL*`GL}=xHHou zFALxf&b`#k0sR$@ec?zD%2dDfF{0vkictGj+--(qJ(NbBVutyujre6eSdvcw+4bZ4 z5c8GfT@^u&H`XMr)wrJsN@9UfRDzSNui_Jwd0T&}yjdqAY9mM#?{11Dhxot4ShjIO z1$*JiReCL#P{Doj!T2K9%8^#f>XBCBMBS&MmA~k_X1*|c=0nff1FH43nr^d)BES#| zJ?e_snbTlo0mrwe8QtH;r{vFAj6ZBzhEVd2XKmd1?0eaL^I7`q>s@S5Yo`_}5rmuZf z#EM=9<21Arfs|_oJsFkXhS43UGV*XUKAW`;TzAA>)Q6i~-XqnCEc!?in`+i3Q| zE8wnt?%5&Z?!@fMHaZyP0OK3r*Gds;vhu8pk$kJpPs|Q#e5J7vj2AE#)MZ;c#bw(% zbF*2W*p@`UN+j#6%xUt!z#GnGUbVeb^w(PjLPbr}GU32dXbjGfVsxidLwit`dgKrJ zBqa%!IlkYU>=b4ld1|9Mm?c+xaY9AKSok8HPSlK85qQcT?ymOmKGJrXRz(UvZFtj! zHxnmmsX9;|MigL7bmvg1rcMeRj>U79{;(OIJ81ZP4N9M>$;yK%8T2Bn66P%Ap__XLNt9ksJ z^*RjBFphe|PB99pAGXmJdp@;w9EvE%O`)h08A4gAoe~f2s_Kz5HvN>5 zV0=D8ab%V{_Rnakxy+h3Y;EUZolH8@b9zkRI6}v^D;)J5LOM~YRcvT~2 zHud7{Cu+NEyWEpm<5RgG&G|~H^_(_b!HEhdaWa>jsh(WLyMgr_a!|^tlXWRXeV)0! z+Cy)IX6-ay8-QLuqf+E2q91B}EsQ^Fb<_jUM9{zQ$^JMEEiE((Xc(WUkth0tVOk(} z1EWL&O@?3tqQ{ zif4p#DfMcFFheL)@1D|D$}l3Yh4!@;a)8Jjp?H2`a~F=tCr5Y{9L}Vl_kfmE;1u!u zrQV{|2U;yV`8_Jxm#TF>>lCGRsFk~^-f^lu(LLpJh9oAyk{+ zM#Mav(>D7-4~Qc7j%mO-r?_{_DEtyH6xfR+_EtEDLUVnu+Xd!c%@q>oG?K1Ezq|+3 zqJ0d;4)`D4PFNK-m}UMH2owNg4u%(PrUwHeE;6X84?j*|eHBGeqXlEC>qK>Yxo6n{OY6&inQJ{$|+$Z(2F zPFL*%=&feVJR4}?iqg4o#`UHgp%UDz=(y%+7ZgxLsX#X6N_k8_XY3v;P=FXTMZ8)09KkyqySq5r~D^;i_28oi*kr_oYu zhDDL6aTcOG;<${moYvs`%RW&N+u-frf|L@3s!TyY)wEMgt0IL;+8IJ&3e3*NQ{}YasS$Xp?`ITWhFMePDc+C5{ap1Fm9NyRRY@-} z3cf-k?pljN@6ZcJFc-LinaDw zsA(r)?SQZLWx=&JMJR3EG{mmyAk)EGlOdELl2%J>xmCF%TStw|&C}W=u9=Wd4*l60 z964c>^gf67;TPuVmYn*ahF9iZJit9()8JZ9NEiWiOUL>FX?*<=%YXFY-f2M^Bl#NNr2WWnogfrarN|I) z2kGHn8@xvPXh)GEl+h?f-Qq2CFD5UhJ#0S#PjC!BdoGN(3H3d=IuDNT!*L26r@_&M z-ai|q6N&biIi>|Np*c|N+E%eDKX=84#r6)V_EMn!MW~wYNJ?1Q)+p#ngBYOzXFeNo z)>O8N5wFg*PD9iP^z93X8XTQl(C02)sRzB7w(m04UC!6z4qkkIiMt6Vk65 zTUGU5;^OpRk6f}o1pN?3h2}cPY+48P@pNu6F(O3vfLM3Eze0naDquX{V!=K4bS*E6 zjHfJGhz=kk>a7H!$UhhMmYbAzrdR1vIl_2gr)%AW-tTo<44tZa^L%(SbGqu?%icFC zQqB>|RPR&V0I1jKE!hkp3ycE1JZHD9BLm0bD;IIy{m{2*-OutkkK0&3LW}1%;mGXE zz7~o;B;t%hi~qH3g_VIeF!C+6w)sJ^y|`?o>3UjTJ@0Y+$Dqtv+M+coWrsR0E>K3mq(lAZf82G3<)@ef1%xK@})i%!exLe#ON`N=&mX|1T!I$?BDwZNTL zoKP;H+TiYqaGnjc=D_(RIMSpcby_Z=exPV^e=SHO@{A;DMDyXCAQb9F3*Z;)OG%|K zB|#H{9szC3yL9;?eW_oVXTV(p&I{ojh4Wc(&Jd~<(qBxG9nqqAzJqbjP%<=%y5wy; z*X4glwf}YC*79}&ze9mh3bCNVHaDW;#aZ)-`{39Z&=1jA)bV!{#0j-t*|rVwu}Lip zjJF7NKlOvxQf%J4i4Kg_Fs7t2&BAszK`6a*H>0c$sit9@kF^b2;1r=~Wm1eSx9Y-r z5aGSQ8A6F&dKAcG+x34ngq&C!d*=vM&EH)_+q~m`D?;5zJu*jydO+uQw{8Wdde#pS z734apMwY?UMo&zJlqvXeVs}@@k3p5Cf*&8Rir%C6rt7yt!-N_@fp~b6Mx~*T!I%SKAZxsmTr_u)f_Ui4nc#n|}D5UixLZJkI$`V{3 zlwBRa9VZlVT4Bwb+|E{rSc6?gMRC?)4EeB-uNT|p|9jeIyMU!$4#z`^7S4VvKfy}- z;M$vRz?`KR)x#0JbiU|Ilid*0$}mc6QK}5w#jOd9|0YmP&izRBqHNcR^?BJ=WdW_x z>4pMJf?6P^u2X*?kh*mS$v(hCW$IX?<7Y5mB_67!?w+A*+I@WpV+#FxRH9x zIulV7m)1Mv?S0Y5w(S4Jo`bV1xL@s|JvK(Ei=WAo7+Y#}v28w(_odZ#zp?_?s9i$g zJc&$}QaJ@^A$@UGyC=^5*iJAlw7R|U6MG(}B+y@Av5QL~=OlHeF3}@_vT+qhYuC9k z)R)RAzA8$fQHrebDBRC6%HV!b+`{|OntU5)hoo9KGbpc!wlEIVbt+#A={rUPHQuio zP$zN5?4jLuoKRxbP_7MSTZ8<%jEV*<{&h<*X1lGqPcW(tMi@Qi^lEf@MOz(0Jy0P9 zpWg33wdF6N{bE`H8W_37_yxB)x(w$Sg*^QXo+ujP3ymG}{9?Oqg$sB@2^s)!K zGoSESJPm!j|X!PwL=U@Y1$-5+c2 zF~S7z5A@h}5$Zt`?wlC#7A6=K!Hy4o1c?^;{!?Y^L$sducvzV?@(t=$**i!v?j5st6zkbza_rn4e6V*Tl< zLRe=Z>U_BRIUI{m75*9kYThUX(!U5rQjjr+BVITQu`EYk_KkoM_p4$65M2 zlHPX7c${zSnuT-aqoP#0F|u`vY4t0s8uQk)4nT(hpV+y2KFh80T>nBtn zn^Br-e!NM<_9%3diklT@6i1rmyom+nvFp%MpHReYH0y{p()4wWr>=y{7*L=yB2#!*45AhcqOJ4O9jS#J~Ri8G0U))31YjQj(j`%r$6y9r_ zWyKW=#sqZ7;g<8Vr>Iqmp?+kKSpBbFszEePq*&^+B^Nan&rE(MT`~*A;%l z@8kDt)mo|2{!)aJOMBvOfZMsxE8lz*JqI)?YWNRB>(Rc^;wbloRLZ(H!dZa&U|zf6E?mg7bVS zLhWsB8*6ihX+8Ijec|BLKhS=pJ9!;b{&g4Yy^v~-QBZ$r=3>8>t7_eabAs(et?FMj zJ@IFzXPt|v)JxpA4yV1x2~{4+7e=icxt-X)nQ6M`D!tGZ|J*_P#B7vXw7xVtoc)xY zI9JaDh|x2BZD{pNN*g+n%Up_3d89nrv2;9Q+KZ3eTWmv=VOqO4QeLp`M3$*?N}gM9 zJTY>)W981(-;r`ZT979@{GGeKG@Dc)R5HRXWv*V(Tv+9Iu>KbT9gub-uAqKl3+P{^ zFM~3q__c)kEMIl*|7yNg2TE~L?dQ|dO%UoeC1aE>=}I^4u;u3&+5b5qQvX|)M=UXm z%K4&s9zs#{GL;(1T17lUEvfj+{M?*R3wemtp>NVXJS%lCy-BD-ISTH|nE@2kDJ*kV z0#WecCXFJHQBEhuo-)PIM z*+KRRYfXwRjgnakz0TCZIxoe1VJaA34*DK>O1Zr78)pcGUm9Dt;j9^QiC|4b9^_q6 zB9$dVLao{t2vu30#Bmj+=ckm%&)6LtCzP+h^<=xEY=7rz4-=8z38qUZ+T+kHTKDgt zU^Whd{?>M;CqH_TTfW1fKu#>onq7;ZZQ!-CFkWp zxg7)gJ#!!61wCL={YD$q6^=>%6qr_oy>1zBw+`2%@i*4m6_6_YE-)$?Sg+N4-H`JZ z=D<1+QNIrGfpJbz=e&gOf%XP;4 zB+m0&IW>b8!P5rXk5oMuxe_h(r_j4p!pO<<*XU9aiilZY zzR>e^%4tOlk`a4`#y7Ukr<$hfogSrLuV>1ZtnI?t>o}n%YTqw4YOmsmO}15p`ZMq$ zjb~g&C1-GZHTwlyj@#|qA?dy&aelA`sI&vqHcqMYb?d8nk)xSbN{^Ed9xu`o^@1`$b2NX(_8Nn!Ug$v>p>PW#UQt+Jy`B zXl}S~Nwj}PC~Zjx+M~EvbOdSRz4*^`|41pE@uWXK4$^jiR>}Pk31fdms7YwA6-hVH zIN=URQPle>;=NRPil;s~WJFH>E8Lb7$Tu)MNIN;k2}MP==nFckYXjn zSHrzUDUBk}ZtGSVV$mS9EH(MLYp_+Si<$2%EDp*{7@Fs8z|N}zXPq=*`vJCUr3 z@W-V%#3zF0H4jB$YU!g0j(4(O(O{fxC!XOq{BYSeCM+!f$Gh=DAfwCJ2RJ7bDv? zp+xSAcKFtCP`c_Q=B5SYQ;g2D^SNL@{?TI*e~;o$`&9-gsa@oZfSIc81 zEthFM%d{ez)^p{w5>;uH$!i11Yq64-+Ec6K^D}FY2H1UGkL@^Y-~KzA?tdojxf-;eIsjVL>Blo=%}M!=j=ARBl+589)`vP{Z}P z))K9CXd00K4SE~r3kjut@Q_8;4IuN;#E7ixKN z*^gnFrQO+vnz=)d8W}?2yn#FmT5+6_$KJE2S#%Q=|OTjTTOAcX|aP zuqSj0B?fM!eeFS-7#E!E@!RUX1fk@U#j-iVN=xHZcd#`X8c~ZqO=K7q{ZAKvU7ea^ zlD>ky1;&RVltpcQ#4^wyBIaZ_dqS=423}FWXIjUg+(Cy{`e2Z58&I&8@?cAk%}`^h z=h@~vN;!%Xsxn__V}kXE%fuMZUFw$!(d9HHfnzbvq;X>})VwIyyu?yfA1ysDW~9L$ zqExL*Ee*Y^tKL`Mw$CTsf8?bR7>4B(O!w(1aC$vq_9>UP0 zOkC=5TJmo66gzU-&f?phIz`Q=ODMTt&PHx)1|2zvJTH0Zy%LRGVZ1fgOfW4dy>9n| z4(1KDtSIu+%RAemgHom#C4NY2ptPUDFf5$Kz}U4IzZ`RrAryLuHG9xQ%Q#c-j*G%? z(U7BAt{l@sU4AuG%bP{)lVyjSB|V=sXQv=pFN|1npAEKHBVxOkjWml(W6ti2j^}TC zv4~koZtqX`CZb;kXq}>i9_7%BDOPm8^xWATqt5Grghs(Hu|HcHfw*}kqCWnzc44! z7*$#sLK%F=#hn$r*FEMuTJ#)zbJq%C<_LuzLU+S2^kg~!XY>^MKAh2`=}tHolHB?x zt&iXr`Zs+B=e9+s^(>qtaDEQX7Mb%H@auW_RRiZH<-w`Nj1U)Sdlx6vAkb;;j*-8i z^^gPH_1%UxZ%TG9JB%AFw(pPD{jGu}a)8J80T#ajD;=zUtq2xnP*zBXLG`it&O}!=8KVjzxh2M&5$VqB0 z?%qLLy8M+|2Df$=I7Rfjbw{+Ll53yei%6;!TvzfJzldvxXhbgM-2wh;wljZekQbwn z%YQs!`}`S-zdsF`5{?!vJlt9HF`xYz}Pgy zsH@t&;FuUk!`oprymN4=gSp5N>U?Tf>(K%pMy(!*rxzc7!Bsdqs82^bN(gj&=c z7#BzDt?kqjmqx^iUM2e>Xr_P<`OUrRAcfJzLQFOKF8SwOseL z6bW_W6TJRq%(O%rj>Dg@aUV&BQAp>tMt@Ey(uDCN>dYzV-5g3$j!~byY3rDqdUiR# zQLUPxJpiG!ybZl_iaO!k%{J}c#QNB;>tj^y_(KG#B7v_J@7E)pYGq4%GIRU)u9K_z zRYH}m=;95~{HdIX_drX&sUbzEW?Wrc|EBUVwvA_Bl{am1?G8J`DK_x?qE{i&%bVJz ziq;@G&Lde~^F9OGr+&x_{;WLOVicH`D!Fn2l-EX}hrViBMNF?&S}RB=_se*>+^679 zK-@!5D6|V{F}qB(eiunz%^L;34fWe46t1ONW+&-Mw8j@HU(HLb@U^r?5j#YAKrvLF z%iX4{f!@r(5S{7=?zAHKkfc7C35sr|uty$f-O+ z3pw^pyRJ%`L-yo^LVQ_j%5SZ|KD3H@WVF<%aV(uDKiYvB(ZyGVk%YS{j3g3-63uT8 zv1MYF9#TAflbu?{U+67cOnu8=yMIB`9)K1LI=Rd$T~_g{_9$QawE_R6D485{ACQmE zy|x7){#FIsuj+d;fZpoL)&x_;T~sow{1`s9$&Rn)JaU^CQTdX}Bjib&_-%K!U(?9` zg=x9p2u`yL~*Ymbqz12=JDuR3G$4GJK^W+<&a!xd}I@n^C zeZzp&OKx>gs+6}|p0_LQVhV)fsIR3w>HH!W^1A13>tgzjpS)n}C)65@;kQmvZ^a2k zmUIW=`aSyUWJJ(5#${9;KRGAx1Z#`@%@*P@L8x`49ZdDk#&d7X6r=LC|HaWB;9{Le zDs|Wc-dVKK|B+vAp%i3FDDD3 zt(NwPru^WEGobzYRj>shOL%HaXHaY-v4M4|457&S1izgZC|kOwpuLIaYsd<7khcP% zs>Pw85~#e7SSiw1HDyFA*lg4$y|<;xytt6LwptJwy+jKZf_;wp4ty)K;~lwQ%- zKBFt8no9XnCBHyxyH>wQ`T%_`^uA1%Y=pXvYQAFzBRY0u3^56{xBVZtb17XWe59gx zaxdF@oFes+*&Q9z z&wHCu630mByMcD<*ZvoRT42B(2X{b2N}c`em3}pRxeTFdx+N5&9-LQzv8dsA&l=+0 zT48poz0NtN1@AiWF1-)e--h#9{b_U7N{$FnAkL$^n61UE zOAv)U@S!qE^CU;Z8*xBjN)1qg4(&}^aYEq}JvT^g?9rUZS&~z9eUz9aV#oG&nn$Bl zL1$fcI7=0|NDyjP?|)3>R;)2v#mM~JMpML)bG?^1MW_L^w2_Y0pi1%}{_d4lllq+@ zlz5)YH|7=dC=L*@??B350S+kMFQFRt7qNwCMGxQd?3egk;!bqY?6iWC-CAH;7$-&V zPB9{$wr>_aP|x9+^&3LrJO_FY*sbE82xTnh zU-+ePM2BSoBUlk{pBCG5ggP3y#adCPC7@~r)dv6+IFInow-sMl&W7k=mm(^-`nm(_ zks1k4hJ4Dm9=GF{>K5Rhdv4o=t;l4cTL(23@4=_|sfqsF3AML2754}vF4Zm5P`_}o z`4j^x8kwIWl)U&cH6mQwWzx#e4ATT@U|jBK_gI->zAlS7(d&d|UMbLPLkFVpDc(n| zFUKifgVs|KM2#k}|*X7C^x6zt;;*GEFha}633Wq+w?T)nN_9^kjt zG=<94bId*3FaJ@+A3~o=c;&y-B?tYFnR*ZEeT8y+fZtW) z3;mjDo2@G_+Bu5V0PjHG=?6gWAr^k3HLh)W09JgY_AllbC(KVN zH7Z}fN0d%Yr=a&UY1;AMb4`nxNA)XPa?5GOl#arf_KG+6_uPIlFXQ1X|MZ3(e;BH{bLrOpKjpavJH;q9&OYu%9%m03KbFy|EU&s<%n?faI2FR1kFvMqLk&=R z=1&?lr^N=hcNQ2WXEnC=t6fx=zzyZ~Qt$t<{)ni1>fqZp)pwvrbn>6OOwf+Dhm*Vq zC{CzW*>A~JtPk$2^x%N=6NEZf_tlHF%^m2j>-iq;P)rc2r=}FshgvvjNt_YflAs2k zB2-lEU(!fIs8$L0S7Zn!zp%}p`J>bgX^l2bv$?+=H3m0FC}E`!FmXSb*8J2MrcHU8 zC@^YtDL*lM(uk{`hwyBkAsp*6L^Y}SG|Qpz8*22l>p7-_6yleunq~>LqdIz9>8UR- zLYeTSCE8(%%Vv1urWfp%{#i8Vm{4ydm{yeEL*!Xz16%1s4p!o|5Kf9w;t=O&{hZ3r zu$_T#cfMF*VOHFq$Eb@ww(*x(`kJjvw4qD% zxPo2a6g?3u!`4v@X|t$$ql1bR_T1fgUv&xfWe{D=@uZ0|4kHBlVX0_UsLIwtLrKJ_i?=Q4!C^sy{q znZgwy?0=f&a*}R?oN46<)dY9;hxAQcM}U%I!V~=6fWM`13WP#DjzJr-YyvIR>w=}y zx`IZmBe~S9uHasO$2g(nhF6Dt$JzKDZ{Y9fGU_Dt9lu-UJHG#}ow!2lg_LvWEn6NT zV#s+@KXZ;bOI^WrNVMY0-H2wc*Dcz2q#7q>2!(l5xpon~BFg8NmOmEHFK5U ziz-VZDtSLFw;{^;DQa%T^hfOuWka+?*$@?&R=|=7ZHN|iKj@4P*brG)E0k|ZRLzDc zPN<+IQ8gPPmr!U)B){?~&$;8g-d8|>a=E^vO+bQB7R4XTHlSY(5r0%$2s@&NSN&7W z*A;4Q$OeR3cNc1f9%Y$fS^;|@Ub&e{>(Y9zFGnbx@gsZfwt&sNgZ3sPDZd3q;pza+ zxl~Dw>;clGe^sQ0`3mMJPAGZ6(0u6}$<{}0muX?m8d>7WII_eOa+4rb6Y@1`c)n7h z_{uO}4SV6seALdB`1*8riLbG2*?{q-4QL$-gxaafDDKFn*mrtY)<2=`hStHl27i1s zIMs=Q)`I(Vkp|QbmtqmuvV}za8t(b}B2(ZBEhJt#Q;3rn3Nfh82f^VIO8=^?t-78j zuF+$dYPD6@(-fhGtF5}8X0B1ScCVHZIYQ~$YFr6z*o$wL**|;>=fAGet*pTG zv##ZqT-n(V<8vTRsIryn9$rVrNJsM3M{EP_<*wx(W-W|WZv63>!5ddlbZ96+D4Fq? zD+lziYk91ow8lXd>ks-Oj5j|?p;E)5aBhKC!WWqxnQOHMBk~68hbSYxN&>w*mYy7; zmZ@1Nk_h%=*ZN~Coc)#&Kiax4X`C;-4pF)TnEZNah;ZZZ8zF7p1V7{O?*qJ<>eEF<_vb7Uy2(EH9vh1uI2)>)`LpAbZ zwab;b*l&*=zoCqK6&+ot6(dED3}th9nMe?7x7t@ukp=Zi`n#ppICX0^mQ`@2AE}{()mYx)$#2?Gw_22qCymdltM}|?eAT{-VM6ImTJ_9uq zm%CAqej|g$F=&xr?I;imuOzib#W6n3ZO}t}{SlfgwQeF>*AK(jjlkD8YdhkMn*4|@ zUMYEisw0(eQC7r?s3~ zANu93bHt^O+t2|+GsE}egu*^r?yBv;l#L#o7pgO@!3mC-0%$2>F4Ovu-y!q|3VmS- zonX{EkJ;jvsA2`s?qEd;qmsp%$|ItUnR=9gxzQd`BMexGjIg z*CGOvSODW~M!guw+w&@KUFxkH9=BaW$S7WP)iKkmC1MKJSMV|3{^m zhZIi%dHqStOWqDoPcF$@J_GWb18E%mn4RGiPl8|T11UbJQgoSSu9V_;;bL7N7yqYn zaUAIPev0DdM{Rj5);LJ%+lsH1z}GCe{xhQdk`e=&GXS{>dggDzgL`T_ur|m4?3b^* zYddrdZn95+-&lXX0ry-&^+eP>)dxW1o7^7C_ke>b@b+J7I}(IKj*YLEY}^)Q46(Du zvE*bx-B#O?@=+v#Ta^U99FW_~ATL76FR|QZE#&Dal|KWd90yvjd|>AoWveec2~bBU z)bBwe6XD@ogLdK1x_=ZGd|=B%72+n4$RX;xwmxoKw-T*(b>|#-Iw4Tg;M;;?9*f_~ ztqI$XJMas~L>*@dG3O_x!zI*Ib@y02!*LoMXTp(y;{rSr>O#2cQ^*x?UJb`@;kZiO zOA#ta{Tg_3JsdZ|@n<-0gCj$zzr)qq3SRK|kGhxhX|1b3t%u(a!|^H{1wy@zR|@rk zI)4b~UFzDpt&%T1_5|o6y*QzYRd_PssD;BsdEKT*0mH4=qGff0QB~}#Y46ZdczD?Z zT`5AD^2P@I;wJ8jKp7jK)J`~~RugaRdMb`xspChp@K>)Jh; z1G=pop>&+TRnXQ%pcIRA4AE#rQmB*Q)mtu zv>4@$DSms9mbMu8J!)gE`60CTgqoCWH(UBWGm6|VQ&z$7+fcs~grcz+S~Hkph=(1N zQ0jKADI`zT>m4kGw&YB<{hj@conh{kA1t%NcNC#+dfLu0YBuEY*QGp8R(WhvZxuc} zkKX~F?+BB}_#I*L=-%PyaoR9>%sy==?ojQ-eB^cqSy(83rZ63}z)0PpwX{cZ1aQea zw*0D~*`I;iO0z#1MJs|a<{k0xSM4Er1RX3#sMe^OooN)YYWXb?DwykP`L!}6)j+O& z{SxyxViVaI#1#tK=0`rnc+a!t7n%EA0q)&Q8TWsBmENVf`}^@N)_oF$`uUv!i&;yh zcEmF_$#L=axhX;!2l5m06Z~(WaR8Sjp~^%i6D$)$WK}0(D5V_pwVSQi$eMKVCX#G{ z&}=zY$ml)|rP+u%Fd~z&oMD{HIMTba*lzs=QD}OOvviR^VifCQyMs@+7u#LDw*~Z7 zLdj2x?PRdF zxRfO*dJc09vyoPr4Y87DArgdY5{;IaIKmS@dBrx7rf70o!uvV>bcEEK+e^)g}njlmR^HlLU zypLYxGI#ksj8X1e?jVKS|B97X&Znh4(P12LA6%%G{1AIB^G49tZhWIlf7_hm9=`Bp zXUxYI%D4#Hh&!9gd>0k|rd!P6;>1oC?=)I}N7NM23{~QY5xQ-iUbzNIC~XCQ!%G1j zK<{}29l-s&--|-Yy`Fb(w2qhbDaB2{oNm(ytvDz8FXkV%|U8c zT5;Ze;~j>`Fs)vUa}C2GwBAGu1dO0$smNibdJSvWt!NX=d(y~$6}6Avm=|YMD&Klm{{syqC!C4GIj5D^x)?cWHC(%d zI;($zNzokF)OfP*W3su93>p{}kRn7S2(OR`%O?o@XfQ;n<+xcvxdHpZ(?tO zJ+k{xu0x)QUMUw~ z|IwRzCOH#@l(Z!EpttYQC{vTW`xE=QYPER#@mY;oN;;z0IBzBckw6-FKiKex=$)h~C=uei7O!bPwmT zllDK}wTV%rfuJQi+^+@QDNd*!9UXm1Al3}-M!Xfi1Jo^-X)VB6ec^ys%x&2bAKDmW zRQFs7MyY*;+Afz;R`H~ec8XDZ@j;0*;hB3X^;O>nR_z$aRy4=7dYu++cSkL-ihpyR zngK7|qvb{Gk0(YtN^;uVCDkg4buXfhgZB77wA{2f#_Wo7fZSiOPC?HDquKbqdNhZ~ zXO?C=vk~|@SgJqR!4}_tUvImFqIet1s_urs{wSQemUpeU6HE)=US{Q?KiB!d2+O8V$?d`cZ^RAoM*>AXq}3}1NU9+7@LZY`Sr4^a{4RJqGicxyKM0l3mRq7tK&RdW3TbNGbj=rp52iD%Lsj)F%( zO{#{~>GDM=lJ`SfZ1Kgn{aAXao0FXf+J6xWNA}Wt+wa3JP^Ix7SQ^hUI;?-Q&IIE` zoHyQ0GX$=jsA6!pK0)U=p~T<@w)TJJ8R9Fg_>z}$&2a! zfSh6F2sK*rUNrH>23x0sGVj2$@w1{`P_*)09mzPjH3x>Um!b+1MOIXP`WnUkK9%uaBP!W z8!XZ5RDDj4#~hUIWf-+v%cn?t$=3nRVv%<&p)dR#qk2KpZ7*>@5o<|5mq-CUOhM%_ zV8evFW-$6|V4ldz`XjJN>Fdz$hQa5^AE;Qp(T->RK24=|80E8kzR4vN=C(DkPP-p@ zl@PIJy~mtT!C3LZNEn8ShM6K%W%LZ4`U9#2WH?2N=EP4V`m;UD>%%{S7^snr(Bmf4b^k)qA- zLBdHf3T4Rw1v*3V#GNQM_dDG zuTT^s_(uG{+{3_ofIMnd(i%b!?z@CKYQtHc%_bOh<+S<)^3^Gv#*G)mJ`f6 zLy|t6BNWa^`-&w(^4nkcly=+8b=jyknEf4O!3*H$^FuLb2JnC}AT@ucl`B-&ouuSGp!X$IB0 zpY_#xr!FYf<4Y-D3ZvIJp)Nr$ds?c;0$mlATq9jVt$?1_kLHVci7#T&A{DAFU53oT6+4Zjyt_G$d5~oP;`A|SX@EVWfFo1 z3+@C77Tn!Exa%Ykg1dWg9~^=+5Zr>h1$TED+!Z$Io?yB1} zw{O)s{Xdi(IZ66&9Ams=4&%(a+ORzz%Kkik(ww+j2ci~nH+oTKn02!u0u$DMlZht6 z6?y!C0a4IDds>zv(vO9jye2X0#-g2RvQH8GWYSOr+>Rk5t56De10@8FaH7oO~0> zUXHTNrtpopAS|6|q8h2g;ZO|F0qA=cju*jYi=cmf-3(7P-EGbzQS>nbnJvEO8gy2R zJ7%>mSn1UsIPUlv)k?;0sSD2r*hMx8jOL%S_%&;N1N+90G+CK;nMP_QJi(g7^5BY{ zIVsv~nH7Ll%WukBps_O6c;;od>K>8x~gzek@OqNn9mLAyLZpt#ii8Ld9!}L{Au(3Htc>ZSP#1jYcmqJ98g_8=m7?JH6-N-c~jA}ipbn4ZZf9`9brgk=cr_i;{h zWs@f~d)pu|yf{}$3)T7xC+}F-xgNH(@(=a^npMxRC3CtuE}VRtRR&kPjSGI(F)>Mp zRFghrshe;{6ZDnWPaYXDeHZeuEalZwOMkX~-m4I{WHnqD0*_uRMM2nU8rYUKM3GO5 zPV&orcRq}CRS7VSS`ZcY=$Mf^JF6GS4IaXVAuM=TWqhzvq*vZRc(gQ0F=mcxJuLWgGI)nCz;;l#U6PHu7idDRnX|s1tdd z_llD9?jnS;uYWe^qCdOor+0rWc`RDmL&~@)ClSaG=HpAPhL9I z&Rkkc3mNHtb~8BPtmz?Hg-b{#FLCKf9(3MnON=}EmaT? zYOlOwJP!lo`QBQPbq1FO6ncR`jK4_Yf`VzTeTvTadlX6Qlher>Kpb zyvSPXF4wg=*C=Vfce6|Pj7wIFv2h3TY18Yxu4&Tq&Oq)H zww%IR$_H4E+U}kd^0BAulXvh)j+=}qRza}#H(2aZT zVOg<{Xx}Gm0sDpP$d$ee7LH6?Z~gI@{#mp6C##`&rdTqabV*^YVg!!&X3Z@Y%a*qs?o-=;<(r?YpJgHyZDo)h0kF@R7rgi;vGT2yM>=deC z+$NiMAwI1wc8s|YM~?lL`-lFn*4%Df1dXlD--j_OEb+L$jMmx8F*klv&OQrv`a2|o z4TWKUt?kxTIX5fcxe&YATC1F($vR&kWO*dl5uXIf$NB8Kn9uA#D&7fH_!bh>NjAc$ zNrYKe!@065s!kSjjt8^9DB=u3cS!t_Ec@KR4K6{7_*-@&uQ>cp>{$pcU( z=#Ku=T*If{Y$2OM*f$AgpTWIS_MLa2l8VBOPZZ1vXpmZ`pr!N_{1Lwoh5Fd3oC@uB zAextmtPXyw6dR#p{foBI#NO;rgJhQXqX;rTCrr}(PPaCO;$bNXJGF0zc&9#Z9*_JK z32Sg&%H2@Efw3gENu~EBGhF`ypm>qkHNvXB0&3xk``9!$!?#q!GBz30d)~`>X|EV+ z5DA<$+Z50$Etul}oSOp)e6pANBeC|j_EuRH{8dz+$fkbjFs=OOqII;Lbv=JtT6y^B zsMbnAph|)?mwtkNS~>j#j|7uleSw6qnV4^k0LIYV_&UW*hSX?sTzm5dj_6FM2U$iN z#3=?#yaIRf<2LT*l|7iFoDF<^J@yBo~BFCV#Pf9ojSl)&Z~pKw9XEHvSKxv~ z1xtS+x2R*(qfMD^#@uuIIk(z9K{O1*Zt#qoBak|>+Nt#oexjNlN}P`G_x@9h{^i&8 zyIkMUTH%;lckPVUrzdt#2XVv5qIAZ6rf<+mZ%z=VA8K;&_W~Kc{#%i&0~+rcJxN2u z+)&p5_WDe%7PTNs#>l0MCx7EVq0gQ=yM(Kelx?AL9bkNqn1tq(ZYYWPph9H5ciPU( zC9A$)@?tus{CvxXWybZVT<138ioRat{G(NSt}z(Zl3Vv|V^0lkdBzME&=uHrRmC*U zxKwPWyS(ekV-P+3zZx0aAa7h-!!R%xcAj^xofpWv<*2HBdh#LH|>dE zr!Epcr99Q^$teW0BM!iN2K|Ka$^{b%1VX9QK@qDztOT((*ikNm0HR7Q z;JF*p%)8|#@H4}s5~d~RTqZ0t;sS+EIYFMOky(yj9Bn?}C_eGSjB}B0P0nXhMAIR( z+D#`73m8k`(6sQSM(V|z^1C;hX(;2NB{3{P|8Z%|^aoYM{CfC=0F4f~zY{O|kIU5O zSDosWhAh^~+3i8rHRXY$v)d;R2ZCbj+uyC5zV;acQ5^$q=HH4sWb=t_36KdtCbk~P z`Bg&Za|F5e+nNjgsYPv(3$E7#IgeNgp9<$oa2J(5=6UP?6yt|ZPto=AL~@Urn<3$< z3RjPhB_3^GWSNB}kbqc4_OFk<2F4Ks+tEMU`4<>`X*c>h)YngA6kwpk0`KAoi0Ra+ z&nBJ(-46B<)>%v>r+U6rEFg89(m%NpUcWyJ5W2S@wt=4IoaAMP9?eI(2B_XcYV2>J z#>m%KIT3}xqLU>?VqtiTYMw7^w}HNb9G?}cZ`rR_<<48b&hYE%zK?$qmwx?5$itYy zQLvv(nn-o$>+iGoF>iid&J}OR8-~b`pkCdW3cK>4Sl)7;vJHZVPC9xm-j2JZh`#C7c@_E z1Lt}!d)J-=zsr5-OXpVjK}pqwVTCH7IL}RAuk!j*2Two9+WBsj@2udO-A9Hl#wp%l z?1i<*OfQp=Hu3S=q@Ef;?@}OWna5-acOLp`qkY8WXY*i!FM1m-32o>3Qzv15B1Ixg zsUA?2vZAOV3gRl)vN&m^G?`0A(7%viQDDP%N+VG`BL*G7ERk81hrFu?JT@~L`7MpL z89;;IU42KjyE-yQv1ec%T4w=yP<0HvUMo}N)Iw?vwbQ5w@8vm|Yj7l^<&}2jVFOsT zoLSYSOwJ41RoOvxJ|K<(=Rz(TU>Q zVkx0|(VK*9S7IDP^kD=(dDuDEugVWG*c#B7ihzdN+~3EbE86wAVi45NsNaGe>eH%f zj~9<)sGT3ltvEmv=(|>x3vZYxCmF8E(}%6kHq%{nubz&KgMH**_{Z+eBq*{KbE-agBdPy#%vfhOWN}B44xsRSbF z5K6by=6GjfA9TsPw8xG}m-H3{6hDES*t7>D{1OJl8oCQXDg`N|=$vlro2VxG%+85T zjly3vP#0hJ3SD8CXUQ*1rh z$5=4shYz+WqmCV(q+Z3u;63Wd%~@$Uj;OJa93-R5S0gNmWsdX0N+T3$3{zJvBM-=- zQ}%FlN{W!TJ%Kx}d9c%n7+pk~9GQuVH5h70gS2N9GF7AQEbv|43`>M6^YpeqvYYVM znx2e-^)3>Z)Q?@=8dK)`)bw|5@b{~d3SU>GmbcvD3*ehA-$9Ij|6KSIb#Iv%VlFT( zF}^f+wBj3WnjJCRP-RneQ-!pr#oG_qo3x`Xe6v({j&+adEO;m;lV^9vJZ-AyGw)t5 zK8rp<5!p*D&|A%P+=9Nv#WuwHX=X?7?NZQ}vJvL#!)^zjX&BsT|3P`Y#m0VaU3OgV z*l!XCV5-OJ_!h;{7IjjjQL4TI8+BhZoYeR*mLs0kF?{bT%TgPBCus5Fc zg#SF$WHZZUn~I3+hO3`vo2SuO=|uW&CElb7lc)5Bz-FX@%Ea-MymLJu^ibd%U{M86Zj~#zg_pj@7;zyhy z7r^V@oTT=rGWa5TwsRJDe5TjyUgpS?GKS$P?ke=C=pXbEiG^CkT+oIe7`Ga zB)Ez5Ns)LfG}kn-mt9_p4$cQ6^TH0j=*6QE$fW6F9As>EHJwSze{9NOA5w71PhFxU z(EUl-*7-!h@}*_&i#IOSS6D!q%L_3 z@7vF)TFR11viX8Jgz!(QFL%6|UVfS-ZG;Ox;AYEIk>{42$XV0qlON2!p=A>XwH-lU z{;)vF`}gOvI276?Nu|+{%;v5qOx(zi!`76Fa73sdo^(su@+Q7u4<FDsFasl#-<= zEzX^vdPmRQb{KA0x!@==DsI-%JM~xkwMn~#+8l1Y+{X8B9%6C!h@~L5wfpqh zDDYP2vi7rSOb)cKJ-IfQtFKhXZ{I%DO?kEA2v_zpFDEwE(!IGRJQbq35G&jWUZ+N`v`*5dSx}Y#uv3N z)&&FHxcH;)}FsFVw1PUt45m{33i`UlWgSQ4Yjx8> zxoe-Jol2tZtFtSuX}2*fhdwa^5z;)QKkNY7j=X-8PHEMmgSeUs^4{YTN8D4LUMfoS za@E2+6L29cwK7Im7hZn@capdV#cK^-a`c@RI8GWg(<0Au$Pao+zOpG6DnzqevQSd> zBhAo0Uidm}HRLh;zC^5CDDs7I53SDisw&=0kA;Zz0!{QdC{ONAt+$CUtx333rH!P5 zZ&(DOJwG?pikMA&P-%S!lXnwVs~1~EDtJ?9+dl0=aNX@TtY@Fr-4tv^Qol%+rx7Xi zgf4M4bv?V*oWxsW92;CpJ;On4e}V8M$#kuEsB>yd`9#dKB~!);%GI$tXGK$fkn3+a zLz6V)i#a4EFE^e!tf%t(0r|=w60R)aH6_ha&Uq9g3fK3Iz}UQAh0%mAoB*`l7vCD4 zUFvyBx3ndZwKyINJU z>DRvP6?bw;zp$uqHY$Um4w(3AgJTb#DhJL;UvBRwE3XauNj3NP=bJUqXOc7OpdY2+;)3a3kagDz=t=_3HFV;wfu04J}nMFuX>D;D)HsaKihi0 zC%a6QC@2#9N4Nxs`Abt?4-H7G9XD1$Y6PWqmcsae<&NuwbIjjXtVfsTTe6CfXXQ=t zNR0FlIUD;6JdCEI|5&ZwL|tj}VjS!8!`-H5m^i_j5GTkf zv+cB!D+0E>o3c(__Kcv!3FeTFE)87y)nAk~P7nH?mY5dCn~Pq4VWO0*dZu(jw&p}n zMn4$ADK;^B3HwAX%(?X4GjXY1e%=pZEdpNOQIdJ$ejSDGH5GJ}0K_RW-ApxhP*fL% zMf&|)Q}8W`Q`rG46K-mW)*hPK%`C(%5!g?Mn?yhp#wZi_N{{)jlF6i*i_kTj#2e&1 zVwajb%GAY1MDpaW%scu$S#|Jn<+}lLpn#xRr}FtT40Lc08CQxJw_48sIm>%++Gyk% zsp1lp#;$eQTa+Jl7`{PtDz1kS>=dPv-Jc53oiYgOT%>C3tCNncm!P}Iu^n^Eb(yFd z7@)Ksr(B&lEgKkbbI)0TI7Dd9js1c@f$NLwTeOq*=T4%C5yVQ9;sY4USQIWE7^SH+ z4ts0)Or@zN)JiIvDZE9W>Rw1uR+uZirgA~797i(9Mw|DLCd6v4iB-2G%mv4wT0)X) zeDu^Ku?_{VP^;cbmm8OvH(5%flI;)X9iZ@bZ(z#jhAv!1CHo*2-VDH#D3paryFD>E zK3moERCtffgVjds6@ey-wcj=h%4hWw>xc@nKH?Zzkg=LN3|Souxs#sy3;-|tAv$9n zh|0@B#DQR{s)AyY9m2YbS^#BrsGGwiL*0eg2lU+wu6hz(?Obd_fLR|7gPeddnmP88 zYfZ1l8B?fApKTIKUp5Rxm@H^%=4Y3H&aK71MUm{KdqzCHSuH`GiNy$?+p2W|;Y zV(WQU=;yC15?XU(iT*SdbYHeOaNL#D7LY}C_@nYlT$Q&7ZI>_Rh)2EbYU4Xiue-cz zTXy?ACh>;P;fH5zcc)eed8j^19|>QO{7WX&^hBX9`ATd@Tgv>xxJSsR073C^umdo3 zx%fl>(Pa3pP1X=`otEF%wJF%UMO5kI(1WXME7>Iz6o2sn zK%3L_!^Q=ZLh2D~TcmPD-oK`Mgv}qsV&lk#KMUqclI8?vWxy;N=23q%z~(H&8p=|s zEpMosm2nl%=jLpZmm5)@$Y;I8kZ3K~aSFLt<5zML$R$I&5<7yM=WABdt8!iKUcqtFIHPgjY`4FU<57kuLi6 zCEHc!UCjyJkuYcu}4$iok12#q{gKtWJi^1N;|ipvv%H2hH`uVlk^(hXi$ zoK%#`v4x2ZK7`&Hu6S%(?dgrIrjkphgicKa6A8ypfY=ED&O728xewFjkZ>s$dW?#q z_M2PA!x6$W4WrAf6Y8U~LG9|wB40ZAc#Aq@tDz(kpJ#J}28*rs_#4S?moybX;B9-! z8tf2N#G)E z9YY$q&4t3Gf*6TA1@pUfErUX+A>I`4?~{-wjxv6kWPN5PWYpf$}V$==ui z@IiM#Uc#X#`izV?*Q(~>&USZtk+i*`th(U$0PmTwiKa?qLiteAf^d#HC$U+_km18?TsUrMriC6U!kqpI9KTrD2Sety3%SLMFCnnF7@K3@qIMx`#e2b&vfx zI`Q^dCv1!hQ8~psX*(Hl+kDo+p_xoEA>I-|t1@b+N#I$`%HC{xc!NRAnYMBdKIr>c;FS?6H9vW$c5IXJVuTU55g%E})sYv^m5s+PsATIkh0OXA zm4={w=qDQu41PI71(Dv}SB}}8E{q0+!)n$jf~!r%Gn8gA@8;ks$ElFoa}`teN=pVB;e|e2(2ceg?IlVV)oq>Mmv1vV zO$Yr+OhbT+3o>V}aUNqYXQ;!~w%;C7wkV+X)A%i^eccpzvX~M!SM-wTD!QJbcj;#x z5sCCjx}tB^*Zxc9i+MieBk2(@t^~|v+d|C)XDzh|HR@7eSG zhv6kfR}Uew_|a2#;-djA=p@q{Ve2jS$*(n%Ra6@zjgCs6dN%-BDopzgG4&T0kYJJMKr_6B-=pfv6;vv%RqQ@_4SqF7`t3S$qu|yH!Yjl2%YV%fs5% zken-Uvu21p`dG03hmN2nWbMi2cVGWZz72(k{jDsA6=RrLh;QJM+1T?S^#2!F{ZAwr z5}-99N{pPn8#{^my8Zf3beSxbn)O3oUIX6UP8jg~<@(vW&W|d{b5K#Ry~~ZwtZB9= zGm?w20aJhpGRb?O5%0Ynqr=9d+-05Ksv>+AdS?}?klcNd!mN5!lN&sV1#d;@*7sk^ zMfw{I*g5|FhG!49ypV1lq@>_d7yGhGQQ;C_GvuT|zj&)^xq zX25MFpyT=W2!gCJYOozKAKd)b2_X6ize$`Ghi%_SQB83{F)&`3WrP2z4LLx(EJOzm zgi=Sg`$+ro)&hM7l>+aKDM;}y0T!mh#xPEbW~ z(-F4SsQ??)o4x2rJot+(sw77bcNn=uZN9n5BLSCAGxjFYf)~%{TTzl9`~IxK_cA}d zA{s_&ULErNBnx&YqwHJu&MJNV(+dlRS`bKX1>SBi7VrH!%Gy&mp>!}fxac0UcLd!Y z;6tp#pkO}p6*Z72xeR4B72oN)VGcvrag4it)Wl?cLfAyjVgc>`xZ{|4esj*15^MNo z7=?lavsp!#)lKN_%bfbNVG%yX=XM_7=s%7UMZv7v??B>bb_SpL_@D%%d+IX4#2Y=T z&8SNNYFbkfOAh3gu2)4~f}S-0T_U?`1Rxt+u92AgA2Jqoi_<+?wmcP5ZCsAyIFw$$ zSvObXL3o|`F25p*?~15jhJuEER#*0_u!Ns;z1Mx@Hi!|gGu?@f%mQ}`NerddCJC=q zDzMUCa+}OK`xwWx5^Nnx{2UI>f7DmbWGxS{@D)#`g%wrrT;LANrz9zU!t^m9t=YQKjo6zjO&aAMvXv0WF7ROO1agR?6XF z&*B{@7Upi;+i!JmECHKu5Uqx_>q^Cg^}pLjpm2R0x{AnO-I~c&R3lwpI%)`#sN2Bl zN;wce=Ninq5dP?5+PJl5zuf%$!_3V^^X{&q%Qc2pfe1SGEX!1Av){F@c7*0#q93Gu zWsS_esDkhYAhXoaFs}xx|C9S|d>WVggiO6s1#On)f3N0M-bJvQM$yfEv#hhejZCe7 z?3_6rNwDhVB9YJU`g{{&?ay>CX=rsx`ecVXt4o9%3Ouv(7ihgm5h3Y3R^oNiN8L6j zHpay|nfy^X`$fKlbf&(AOB&?GG;jtmM6W(CRc-L(oxMrF>rq&FE_x1Zw0HTOiBqaW zqV(AL1N5+E`&CPCwb6Wx)KH|UQPh`guTj4A9&JAOBfW3k`2#n0gvg$w>~*cz%+yUJ zm{7e^&u3}PFYhtN(FiJg94DYBG>Q5e?7)&sH&_y&vKI76DK<1kZ;Hm-Z8JPz+s>< z?280_e`p^Y`|8t%I@w^I_w(y#CWkFc%U^gtOTPJdaQUATDb3V0Iak)^h%7K@D|?%P zeR#r^Sz?AUbiDc6M%(iGZ|VfC=wphdeArgWmUGKVH|~K;^<(BXNRVY` z1Djo*!x`c)@?R~M)AVWyHQ7i^*$CCIhBXw-47X-_h>C>L=%jq(lx7=(EPH_)omO8b zip9f0h*n2wP%{o;ymDahmjaHZ1+icheSM`D56TlVY%|SA)MZ7?G!>^WK)*lQVd)01 z{kTSyqh38*^eGuj;xi~&M%>BmVg+0~buvO0wM9pUQ*awTByMJLX*-Okre{|+-Zd0< zAf02(V_wipp0f|6sC0y+ndshUiBw^&8NGjMj)}d^xuFVU!eq>O_Oq{Sd}3zQ0L9mR z(-8I6RF=i|R$72lXP8-bk$el_Zw-%q{quD3+pGsG2ruMgeR?x|wxxK!ZAw(Bdi_N3 zrb5T(ff*)Y*{e|k?Sq@dl|LlfaN#F?Uq-FNvc;ZYq}NOXIs5a8Ch}y8>@!{8^f}%pWQ-{#N4m>&JqrD?|p=ySKgpsSJ2zg(I6Cv1184tiPoP&rRQ{d27K3ZLyK+P zijn!dc$02SuXy(2yH|;FvA11>}3hXD}k|4W^@b z?I^Q$&rlyQ6#KxxKlw)f!U^5GS$$rbNMMHH&Kl#|PVZx4);|6Ud9Dl7R~JP?>KPKC zc$?R95PQ(j4q=HZBQ!f1LpLnSMTt(m$h+uF6l;;B$w~Xn8<}SD7~M?zyOyhxtx{5LJtzqNAz(&GKgEJE?WY_J3U)vn?1-dX?Z$^$Wp<^TEJQjLiE+fcW^yYedX z2H{B2ho}+BAN=nn)&5&F|F?+eZxPAgW|9A8)+6y>T6{5oxkp&^ucdhb{-yN{_gD8X zH5cz(EckDqf&UJrm%p7& zUZ9>{h@(mOv)IUR*QJGN+tq7$s6-t{v4jxy{|wpsSu;gZcwyH5_jU)HO)+v(T17Z_ zd~oj4|BYsK&80vZavwMS*-}l=mxn|Icj7fU^(1n2qoAjU;!DC>a18 z#o^xhCn@@g;p!ED49DA@(yus)N#R%%i>p3&ck4MHX3qA_Or}%Dr4<#>(8)wrR#yl6 z=Pk`c0jdcV#Uj5JO%6R(XPk$I1rVM#Nso?&z3+H&E$!W%uWAm4_V-z9X3o1qTLe5B zBs*HwAMzDfO_p*274f9$`??JuW;V9^J?5v9H@dd^6%||xuNWrF$txqgF!`qJ;)+m{lx2AZ4K zXB-Va)(_D^pMZRFYz~;giSf$HFVHJ0GhYfYh27P3Zge6imzJR8t{e@mG{FaxJq2%V z5_h#KHpgdeuS?@g6OXeYTHS9~JEeO zf;bnKI-4!gA01f0#yb!-kD^q0Tk@puVk0-@nzHI1Qkw7JwP}>CnI0Kf?b3F~G;hXO1vM z_G6FWvmqb-)(<}`^cRqnz^9b;%np*h4E-_r$)B{Wm5qMe9IH!Ur?W$)R(Bz&?QDWo zf=apnquq;vvDZ-% zt({%n?;I-|?VI4oNpov_nq%~|F1qNxJA>UjgQS}M`hN1{i<(TblC+$1=>@RC0{XEy&p^x$o5=n$f_1@zKd z2zBjT+L+E#qwy7;d}Gtz|3=@((7)*PG%>|9^VI9juLZnYgxo5DFR1$7V)LZF#rx=o zx)3t8vE?t!Dd(z)RKW1k&W2$ODs*WN&hIUl(VEw``-T&}HK@y#1H?mor$21ulf0`m z)%aNwhsHa(hMYL|T9fG86^r8&HV5dm-)qZ9lSJE`;m4MNE78_!C!k7FXA9!`1_ucd z+!LP&EKs7#)7Axz{q~jvpgvQNX(-_%7EShJBWpy#C_|5uLHG!p_LbU&Tz}**Kg90Io;(+>9`1r;cUUD49ZWODI%)^!{F^cdRhlm=+TGUacLo~5v`m^q zxSDZ^9XD|kr`%?2)d$ziUPZPwJ|^L_@^hc5?c-;S1s-k#Pm^akqKV?FEj5*O0Dp=qd$cd|{)YZOgoC z`PTgk@eKKIV*C~A)z7x6epWx4y%$T96I--WR+8P!elwh|`EU*MxCbb3XC!7EubhmM#VX#?td2Gym%&Or!y&p>b?=rWV5dvl&)PNAZ!2+S*Bv@Zp|NO1aYND2A|)m4C>W}dl}G~wn5gNcrJu)}v zFcM8aW*ym*P+mYvAYQf$^VnCPhGK|6{PZ-#sG1m~&@Jjgr(-854y9)}f8YN87g2C$Mik7kJxy*?2t z@tCmVdl@UOSgr>9MfMFpt?942oCEVXva2kglSGna+YhA9(WH&JkUGa*t_w0Y%MuCcz%-;=Q zwdwx0kC7MI7Ftnca(~2Xsl0r-%%IDcyLumU>^deBF#xJz%xJlNvd>-Ny1Weam95HJ zX(YBg^O=WE8d}yX<~!j|ElN4I&zn}9a`G5OJkYiqc@5rcPJZ80lTW=Pz1`F_nwJ8| zD6I%-NL&KfYP!G!HiQpSf$^t+XV2OL5V>@EK#fo?eT@0g(fzHHs9noUsmcqlXeskV*|B75R678DCJ)Y;-$Z?svzI%@O$V7Leap8B>Qm6IpIbHCld z^6Vv2d82Bll&5-jnb#MZfirsycFoOaws36<)fz+}vdmXWMZ7${_VS#@Y|XP87CHQi(`>8sX8DKPuWA(ce38{+cbH!=WW{5dJf|0pTGbB%+i;PQU%u;FdX(>c z5=n)~H7B??F4twOA~&=A@KPW<^vZWAzf^E3ZmYZ9!Pn7ksx z6KxCRE^Z&&9p7oV2lEzQKN^y|d>3dTr_R!<@w$O7#w>Bv6e_C|w??ntp_de@jh8ON zod3-_rn{|^azt}Yr6Hd}ITl7$D|u;_&M&K^r#!FdOrM-8yet^XspXZzb(xF7&*_=H z>OEPk=-gqh%kh+?=kcgO3IBXAlGWbQF2+?q;lgg1GIcE(I4$dV4mB)P>sWt5yw6a` z9rgMobvkC7OJrxM6{BnCV=>`5!Jm7uzB*b0EaE6J#>i9xNG?(6<|ALI`H=6#{c5~+ zUX@HqPrmn!J%o3eTZ~GpnwiRUyXF#k*rC0(w#fGR67zJ`>U9h_@!RF|BR?gzKF*bo2()dO#QVy!vmMUKR?KMA}b}X=kC=C+fF4 zdkwWbCspGjseS$f(3E4cXTOOUa zNqyeF)_1iY)U7IpoAWrZ;C#n&SV~;%=U97I`|@rh>n7`cv0h~Co*9Gg$nT%P_qXF&f+uTf3g@o)Z9+RDA{~e99g))Ms1U9#zso2L zpWB36;ETx9bImE(`=#OZh3~0S1Z?@d7^5O$Gcy({bZ&QiAl&ZSAVGB7**3fk zDCk%_XMxnGH9u8)YwxO5wBHKdl6rt~-L_WwpCCzIfTr7PFP2NjV!-7p)#F=@dr-8UzE?b~svy0QR5B{XAUtGi1nk@Er@*=b@2RXc^0fFGYk^L+L zX)asH&B@I`7JNE+bA#382Mkoa6~bz5>su*m!d9Uz%2SM6qwTHsO_0b+OX40mWspS+ zh65A0?buAD8DF`@)oogRYZpHKe0a^!o0t2+&Wqp0D1^{y1p)Iu^S5iR8 zPOA%jCL>>cvgp|Q#dnu(35K)2ngnirhwyE~>SfWFpNbpX3U@#YRMWoV3tPuRGOK3l zBfVSVL3)6Tfq70!{eTIab$=6 zy;NetHiS-neWf_OVmMWL_Ct6DOG>s@N_M-Nub#SZbME5|z*p}`DxD~aqfSi7oBV#v zV#O^P^15v#IOwKBd&P#QklqL4hhyo5|Lhz20@=6JP(_I}i<6nxr!K1_ui9IxSYr~Q zpgBYjC1MTSa+3Y%b(xAW-oAaUsKAF~=>g3GVkbimbYP5i_>Ti+ z{XEMtW$i67oC)bdBdYY9DQ-sBI?bX}yOm-3>gA)U&BWk&-A^fX63l@H$a3YnhMRu7 z85W20YcDP)cs4yEvh*?Th%KloGc`dTD?AkQE1w-BEOTd+&6k{dR{<1HPul4+5N(S` zDdzWv0_3Wr5Hm~Nqla}K!6S$5>!5Kp;k=ef46^`xa{PbLcje94D$L5wo{(f4#SI<{M>Qh--|+ChoLBp zzET&yT@RW(;*XxaFFxCtrhf##3)OG(ToG@e3qAbCcyjGM-JiE>1G^}^E9Clcwey@Z z{$a7s>X06(ZRur*PkpwwLP9BS!s?N6-%VluN*%Kq3{dDmKjA;dA(e2VCjC(SaY=L9 zRK&e^wN&B~f?*?kym6!Ojtj4S^7Dz-!`bCCsz&9w7mKsVWnRafU;bW)JM0$sU^+&Y zcUT0-z0ETUm;SVi;MJLqXI)PY*%oGO(=;FPy&HUBw26ujOctfZlCOk5-@edQ^Tp#W zg*_EHIFb7Bg}0MHYiz-k5YvW!H>$U+stnWHSAmUUsId#mYv0W`oCNKBJ=O2MAG!?p zZhdAZ5(cQ%3gRAMRRgwDKowiqW{dlx$*{w?R=WD}7*4a+{Kfl!0IEP$zc;5E?K|MV zP1pn8+uh@H_!FH&L#OMuSxu6&k^4=mQ_HEo=D$ucz2?2%?Gcxb?narX{_u*sE7&<@ z>>K`@gnh$%ldv_^TdugfTB29V$n=oeNyZ@we)ZjoVq3s9jW%z5C_*Deg!E^$WvpD= z==VtTMgJvAmCNx)IRywZLe=?(0t-w?u_y%`^L6tlS2~Rs-`RM zHgbo>b=I-CX3yzOQunol`1~s1AM@t?PPo=@yqQn7>F3{ihv}!^dCgBw)z6Q64f^T# zUM)S@Pg+W3if4axmw$`*1OL0;5B*!cyZ!HZ_xQJY_xiVcXa4v;`tl?CazB0fF@1S} zzU-tg>SBwj|7nWpmKD&mt)>#S9O(u~m)_Pq^xZMZ@4q+Z{hb`* zPX2P+xDemr_qUIEe;t)6+AMYR@AN(Q7`j(QvOFkNz5xryT15FQ1dBAxflI}RdAzJL1LuF2rMh%TrwcOGAz~K*cJTU)( zIz6sis;+#;jHt`kjL_HWxAxDh>7cc1{K$+&cX$t+`oL)q{PP3NdPdb!&13HP|Dp2N zT-Vo5nR4+pAAGPGGTN`L+}U6I&@~^!IA=|@lxKar%d>8z>pOJaMAyx9-9p!Q>AID! z@6mM|UANP92VLLqLa5Kv(`9shfvzvo^(DG4r|Zjft)}ZMbgiN53cC8~T1%l+`d>WE z<6))ZvrVasFZiIWZaAbx$9C7Ay|_K{OUQ9QC;jWgr><#U)1)r0zjRHr{o1_`?Ci&k z$C@U~{qO5fTLLYXXoWN}2Qwln#+OU6ZfC6vq1H70^7{6R5qfs(nkL*2*Y{caewe;D z)BUr}f9YRmS-fT#p_pqazNo698f{XfDpERiY6_*&u4bz?bvV`Q3^hy5q%^0hL)0{N zm^xIosOd^{z}OfaaF;caUKpn`U?jbK#g{`P>FO0<;gJ;M=$aK*&@)ER{uOKK$$qH* z=NSJAex&PHezfb?eodFvgxP@GzN*rvd-Z+2Pk!6CrhnU;x2Lmtm-U$Cf2^Zp)*k#F z-QC#~eGt0Z-#0sbXFVBv`jB5i1ATVS$9K-?Tguw#pGX`1+|K%EV!!&-&YE9!l16{p z&advQ|LRRU+wO@rExq{Lr?>PS_hh7S+gGzY5$6GlQxQj$Sfc}oI>;x?`pO1|MuTSnJ*oGTqi_TmzVP|WdOjDAtBXJVsmnh1sZ0NL zGTgg;|NrSfD`KntPuc2%cKIErt9@ZB9!E><6J2pZP4d-T9-$nLYr29TV-6EEFI4^Q z(`-d-$)e}c_Ou#ZOxJmItxaci%s0@lope1#SBb9n9zxM|9$jmDat1}ecGC3}T_w8O zdkIC?d33Gq%^MW`+DX?_bd~68|0JP4sn*=^N%uKh6&U6AZ~2f~bKWP}+v(@K6BPcF zT#k{KKUpf3-Y!a9S<3Oq%W&x%mFMO(KWmh0l~Dnq!U%f4h0<_8(B!5Bb%{#EXDm!0 zWx7rY22~sgrJCHR-Q@a=atP0P`|~kCp5my#O;LFjkE0&xbB0m;D`3+Q`B#&@P}xDB zMX5$sKYd|NQjBI>2d2_PbfA^5nt}G{XxxwXr+quBQh7#2bAc1hZKrD&UBgav$eJ46 zNY^I1wpddOjQUQEibq%Py^u=1c22E|M^d{Y#p!MIHJbArpHXV{ z-j&f@+R0j!zo?oTKS=S#Xs9D3T00{tQcjoKjV`r#8pm>-5v6CMIp3lCVBE`A4=6s0O81qA^xL25`_J|Lmx>*hXw1EE%ga?X?=lF z^VM1PDRpf90@YN%Q2niLk@{twr|zhWQ|m9Geo&MYX%M%A_Gu2K78z)t)}XdDyOdgs zx`X1rbczdK+a&dzH6>0d&ZQI+l;V6!F-0jZpcEHUiYZ1dq7*$!aS5fkoKif4QuHas z6>3Y}Ds^d{&!{0v(dr-m{<-R`y0kjB?tIl$*QfsGT%vyIWYir_hEbQPEzafYQfG}i z%LyoNn<&&Y%I6^6!xkn%wi%C zlKam!xtqS&;PL6>)QnnwyWfi8~_h{M#aK>eh(6;FgHH@TQ2n=*Eca z?TEN}MlIPMahG2oanINmas91?q%xzt7$Gs-7wTS3&eN{^Gl$9P0N#n&~RVbl_;@8wkA zXHb3H*S1fKT+=>nM*p)zD)=^WxnrFiqgtrGiEB73bbYr`I}m4b=2Ghr-*ED^!kL=t zh%?nKpg4(p5NFy#oM}rlmDO2AtzKYMM}+>6Tth0QpQ6#lrkb?q_W~MAJk(dM(7nfX zoz-87@Z(Dev54w1O7%$W6sVfvl@x~KSV&(yj8@cJt!8{|a#D^^;jxZGC4htxY%C?0 z=ypsH-DW8_z9ZaZz)OHXuW3);29FPi98s1)7Ep+cV@6Sn^0NI8m9OX(1C#^wkQ}30 zDfcMbf;Ek7q#9gT>O_7_PV!EeR+Sv=EY}(wbrFxzL9ir>J->Jx51xxUi8z`;3avn+V=e4O;YUQan)@a}zqxC~I_we@cmJlHSBg8d4hv zF5C{jLo%>MS3y!7^nB$;Ppio)AGwcHUc#vs1x0C>Q>FeKS^exvJBaw!>Sr&s2afRF zdLyrv*0r}{Y(-tUG_sGBdeZld_V{YVa#M_Ay_0fG(wghg)j*d^mm1mCM_(FzMzw6R z+*W$qc9-SG={}dP1YPs#O3{^J)B<{1NY^5|Ji3<9wVbXq=I-@T0l?76IV+SS39=JZJSU0>}cX=3F2q-h<`C^ z{#<&RLtHIRTy1ufyQq!$*~}&v{Rg9;KgCd?vygbJy4}I}s17{M+@MYEa#FEIH^Zpb z1{y&}M>`wn4b%H*`!w8_;ZA)uH${3!kgjQlEIxc8o-OboyW2&dhZc~R6xVin-6YH5 z3us*pq|=bH)%qR}S3%+$=;?Ftb$y3?9f*5;t&jJS9x3ok$y2$<9zs3Vksb>Q_ZhX0^p04|_Ezd8UVP*A zD^%2v8p*+)qK zR`E3YQwds1&E5-(4N~`6&#D2lPCJwjN3A11OIpSba2N3VMyao-seT5$?h&dHLb7&8 z3Up~*+$q&4Cnc!J@Jhr!g}wq|L6gRKvZgDI19$vJk(n_0sM2x-kL8o#p5Wqb)?MtwghJM7wdK;T)sp&V|J2^-@jrs_5PxwchGgTW>m>e)}U=HoAF< zi$<0-pE0CZlCpSgYflG4qJE*#XcTsg9v<&VjFiqq?fSus9SIIW{IJL~+C(gXJzpD3r79k+Yox`&OnHg6#n@~(Sq6^(c;KBH<*m0a6srR!_c>W-NSHB_5Wb4g&^kw|AG#rX2H`j_bmM*JUr z1qas%e9JK^_%I>Vt{#*voRX=byu>w0J((IR2x@CA9W0~L-$V74J;p(u1&@a6t0`Px z8&F^KPfDn^TH@w+)U}WlE!sby%|9l&W4d4~`QLEG4b<1%LsB~D`2+JxdMzx0e4!8Q%)H+0~>cDd>H~EbE z0=3Y8gYqnD9f{W?>hbJ;qFBmFhEZocZp&#>+2^!u824%@*H<4PjzA%DlCMxW9fG=l zoaC?Vb!hoKqk{WLttRSG|Jj}}v|vioN+l^UDqNn#1YDrVDDVQ|0>l9Zl;#2t_9$mZ zPw?4}ggaGBwY_Tf3tVcH_XnekyC07p7nVofQx)&H_)32zbsIIdzH$=Uz_4`~3*5Qj9 zCA|P;eC!SzEmlTH3GGhfnh4}=xDBM|wWlBdBMm=-iVB|?s0Ga~PMw-WS2vsR%_{7W}2bsAU-QG8Aaz9g*-I(dwt67XhnPnP=aVsjypdlU(hk| zWj|0$C-mz zw#0h|y~|08LEH&+YR}$g^KWYLw5k96A!f9C5v86;Cf;J&_ z+jE2CBZ=Z6VOp&&1&2B@l5ktz31v7|ic!M1ymU3?V6H>0d8)@}6nLm=ySayJV2Vh3 zRz3CD!KLnk(U_NERPe2XN#;58XYvR&5UY&0_frhH7U5r-PC*;sw>N=WR ze}ri@a8rVEYMtOi^5xb)$rpq~zed~o<+xh)oAY%IJZm@sh0F*F2L{p?=lkYMdwSJV z5(<=_V^pNSBLEMC99{#>g!mx5Nm?<_1;@-YDoQOfM$cSt*5Yu z&g^n$(RDbrPLx__w(62PWYj&ZhtU|+9Zdu$95!x*&oHWW0{(!Oc1ITn!4)$Txx@Yu zK9N7n@Ci%TJ9?IidTy8#7Y;M^HHM4O%i!yWCeYi^21P+dYen|07p{po>elJ;gvL3y zmAT2utqDWT6SY>V)ud?JtPZ^vW84MAe`YS@{P~Ouryx?}dFi@!74DL04c7$f&G4-T z(>LjTuC-cbVvb8XACPFZ*~GE(t!5nJn$Y7$7B$gU83_xmW*jnF08j%V$pJmB*s3Ky zSH&dP=8Mq%dFi%1eVoClAq;yYtGgn_(z=Grkf92Ry3m?Ae0fTWVWl6gtnS zz$Y!IDc%}JtMxrTw2X~J6NMRu`>J3)No2K-P4_6>qjZn;KhhN&y{W4>L!=?gQ%&hg zT#)`Lo~!qlI?>|pOfI9A1x<^zRm=A?jWmSXdrV6#WzMekH=j{lH>_W)aWWVrhRjSu z6FMFz*w8puDk5ZVrqPEC4KQ!5YW+N;o(<8!Tr5dewSIw7VHy}OXD&_`8RZxW)|L8S z&p!Mp6lp)|p~i$e>)oV|IORUYs79jSMLpdBSmhDn%sjIeFt;qFvQTFwoo10~7bvcz_K@g0qdzQZ# zWrH_FJJM=d<2Y#)<49rFWHNbJHY{q?JjWUpnQ6ta@Iq%)r7=@HKxKB@3}=E5Q$s1X zmXz<;`AZ3EweSXY9dSvD7x7f)1t@Qf;@JUB6Gk!u+Scd{qfD4E`WB6j5;`X-mZjKs z=Dg7em6<}ao^-I(nP=2QGHSR+3WDN#0sq_Cb2(ayq`x|%)8LwsB-*jqW?Cq!X)HDv zbF4BKmKhuOa6#!ffEZj~=k%}7s#eu!)3Zy@DM8Vj2)$|5U#))Cr-G%f)31gsy8Dd6 zFI&Hj(7n1enZw_WlOIlXmOFe>P99XKD1Z37Y7_^aTUlTfbmI(_x(}`7FW?q8?a)B& zP-IjDt*ZOsEbu`>Md{si{p`->GLA}a&wt8{Q1nH=yNyDoW|zkfq%uNZ;v#SQp%6Z! z;yPUMPn9p8es?aRGvnj3C9b|uTscAEt0P}8%iEz)3azd3vkl#2t;viZ-cuDiWqFlR zOUkjwcs`R)b`OOt&Ne-5xeo8>@MoBikiXi28p9WKU*!Dh{+VhwoSf(5-q)Czs1Nw< z)p}ZRa%`MNof(5Nw9woi?^8LVTB3C59yvh`tapP~5@U1?HALmDIf~!q85Pzw#*8jl z@gj7g-OwuQFhfMEAB(ak4jnv5NNI}gVNO0#zeYaYIL8Ib#dxD7S$lL|xpy2!HJysf zSUWG>YKts5u9v*0G2zFBR%6VkfO`H>8LhyrT-RuDXcYcUSQ;31?e=Z`g}oU zCF~h@Qg+cpNE-}dv&(XRrlVS3MLeuKhDNYl$D}$kYUki{D_^9t=NZ*RJ>regon7EN z$d7ATyrxfg7v(Q7>RgO=ie#{@OVjGLx0CMZQXjt?l+6DY85N_r8nkRu9T&@AbBz2o zwgl(#T=^Mw9nR^Iteaxg$l5f?^p@wqzJTPDGc1xz4i2w;h;lxKD#vFOG^Eq%O9M%M zjDXBbBOuEaYe=486iSQw-*AxUQ`6NWeU4FWRr8=+R|6ymQ!PYQO63_9?0K6;xCigXl+P%OG_V-e#MMnI9_v?r1i7AhFv(UN zOVy_%@>?*@`{a*V>8CVI1h%8KV0(K^NBW1hN+(#SJv zgF;R0?6F2EuBPD`rL`8PgfynSUg|7JiX=b0Q#p%AgeiLdBT!YGx014;xu+|?^E0CFXtHL1f-4R;+HoJ zSZ;J1^{%F8Jhd_6M*4dKjDC5^*ZS?mP12s)VKG0v{38pdMF(tN)y1q&K~QziuiX3! zQS()rQmW>-i;SvX^_gES!5_)>HA!t69WZsI=>R{BuEo`Ze@m1TUaE*C}Zk;muJuoqqlfDonn^{2@2Xo zG??RHE^IN$CehJ=I@~9nyr3ZO4rM*8N27k!y60G%a1df^+%GW7p&E?J8;OH{2cMF< zi4F!MVOOT@)0J2El`+MK z9?4oaY3N#yaXUp)2x%sm^R=yoJV!K*hPZXN*QGkc`3e>iwJ4#MFrD~}s!)rd8~ShY z!gP}9l)4{JEnzyzNxmkamN1>K z&~9}OuU4bQ{;fnMN%yJ)FRaWk%HF2p`-um-!Sec`-(iW(K3v7ma_Weq$Gx1yMH1{; z_6B#zIm+SjH9~Fp?;2%zqIIb#6snCd^Q;cfpzqw2)P5t9JiZ5|h zQA(Ib)a689g8C1e*E#I3&<`40PmiKTly|y1%{_zaEO(U9m-5a~8+aBsSbA8()Vciy z8ZYTxo>3T`MzWjh_h&y-ubw}Ulva+XBUt&QHZ4es*AI88Tc|J2v)tgh14(t$MdvhA zOW8Eu!iufPsKx{d$#fw(M58L5*pdeU;vOz4YF~(Pa*BeTCPnpGlnsQ&k+Z#YIMeYJ+AL-bq~ogDtn~x)Hkm@(+&5OH`hrEZS`9=fd zTwgmj*CxN2`C~_gvAO2_wvfC!{~s9@^7E@l1yxmdYW;y^VZP`vaO5 zrf&Bb(P75tC7g@YF(N&VAEC;U%;g7?KBGY6>ZZE%WHt{OMq%H@e6^)4Q!IxThSZVI z5#{9=#dGzf%Yw6EhJF{xDpO#iM%0Me^}M7AZ5R5K)>e59?6%7KT!B&hLvJp-z4E+G zKNpWNGWo*L*Oogf&o|Pud#t1=Z>|e{RiWn;qlQ9n@}cLPe)f+wDds{cUS58_A-#s4 zGlIgrHe0h$%jh)**go>w0@X;a9G4Rc-+*Vcl0iH-e{5N*og^N7E0p7khvJ%B6<6^e zipx!!xVDGly0I#*RPrB*%P+@uPbjYYtK!PMdt8LhG0KMAtSRm;-6|#oEVJ^Ax*BWS zRr-2Z|0^(RBB_elXfOB8=-!@UQnzETYB;4gh#$c3-d1q)Q$~|aK^ttC2;*_4({r5fgGgws>@9YDz~gv#fgV)otF+879{FNJ4pvrepJ=E&dgfZXH-L+wE3HA z{rY|tw9prq^aD)HD$Z%Y)f77WO&Y%i}E%$||RFe>=_TikwZkJ(abKU1O{qfEID z36+aOP>F)ZR3d*|x$gh^R?;G^zPy@u$P6xT@cdiJ0;48snXpDyWK_5Y;uC1q?(s6Z zZ|Av*Be0M436x~G=LodW=s_+?>iEf82wGW_E{(6_>T>O^m_3U7kvKCBPLd47+$ z_r12NtI@Ur;9tj^)_(PmGE3TGR>P_Op)I1t-4jGtn7sF+W>btB-}{L^+8#L@bf)H> zc8<>|$Zcw2V*>J=I)UWn1JAP^8K-<=Vc#Wb<=D3btK_FcwcY@Kt zUVNf5^DT3JYt!a^UQp|4e7t_&*+GZMmC%N7W-9(NWY$~y4~%y z?z#QTyTKn@qC;+xQHRo#7hTS_J*UK$yXc=MspUL!#VAF0fgT^7<@EM!Lav|-{ARTp za@#1hPrp-)`Vc+k=*zi;{5U=HO3jdRE+Hh=l6^*9O24p{oS{4KzP(3g=P%Hx45Ruq z>SCaBMA2*3_M*ibvPW^vF-&J)spzCb@Rj0Xm$^9mxsZyQCtCC-8OQ0=+4HPG4 zmX0EMRZvwaWao({2ECH!a~PGKJ3d9sRVh77<(_CptJA3l&Z7E3jh=`a-5T@MOtH63 zoj5MVAkMWAB@GI-5Tm=#DAa-joi7T_xw4{r4r&-{fQ&+k&!P51AL4be|DDSEq)9c$ zD6#deq>6rR!xkV=9wqJOPc&3`_Fsb1>v>tOJhc$EE65-B^vgx%3 zwIUni7NUFEQprC#%va6Ik9V(LLDF=VVN_`?wQg4AatG_%X1+IQblt&5C&wsTug1GX z4}&q!okm|2#T%DUr{o!h@Dr{TQe5b91x6uOjMv#1*L^6?+u?{bUM#0*9V~T5v~`Tx zzwk;e5oP^x33nmagkB3kSzAK+F*!*IYLfhzocN5&VnEG^q88yL95>q~uEcISZUtGTIYvarJJ}Q|nsHZ0{AFpq}ccQu{YAf%3 zz&@^=pcbhFTYOAY@iWkKNk*~P$4IL5h_ht9Jfj@8`LfGeCf02?Q5*OaqK0^5LCP2k zR~@1b`#Ttga4RTWJ$8haL)?(&5KgwseVQ{M2wTupTsjamh~8pUCx{+y=oN`;!9{r@P41>ho;%7HU#gnsqYuPEKu(!GZ6 zYv>-M`xSKe8C6TaRwLJR{|epf=zclf>*>CZ?wLixbK=1umr3>E`Kr+KdV0=DzI2J_ zYRlHsbXkXQliztpEl2E@*w7CDTx?H1sO#-?x);X8^{fv2uNrZwuG!)uBj5kzAwgWN z5gS8!bKeithR~a#P|G~8<4!T^t2+Fa5PEay*=N+IQ25^jDFdm<&6CM4Udk(GGdKNkL+q!rY}1E)JHFjBns~@%S=jE!m-b!+HSkZ zsEO>hgHIfuxMFnib-{TgPkg}8*R$Xc*l$7--dL+f;$I&y+FbNh={pnk68{6HjBF_Y z4dszpvVRd}rM@_lZFDmqFzt97WK5^Rjmp;9#G!H@D3?*&SFIYZSSqnrO=C)4P;o)T ze{Ay(t>7d|6_Og&BX&6!1V#EL+a|m@D`BJ}Sns?aYl+9E62%XQ^jPXKc4Wa$N-+|+ z!SdRK(bL?;99M&rDBD_}SD!!|1edk5jnyXXw_?;>;(@^z>Jrsu&1#EDpHb(Myk!}? zoMkf;v8vQFi_6+vjf}?osTQ$=b3b;yQmKOBS&7_YQ(sxVXAX9Osx_4`H4}8tO5_Dq zwJIE@UFKhmiaxFF*{WLGP;_x|n4%k$w!=pru_F7=O+0?Po{_(T|LBkzpGTV#25rAB zIY}{UqP;m`y7eWl3)G~$&Vb5z<(dHH)JR?b<&VOBA-M-1pPtBhMuMp^mi`}`&bx3~ zhB`naD*7X%tP%JvnmokZcf0)&_0a@92)ky%rihYbd|l>{{0s6y=M;xQ3&!Jtac5%j`jhQ9uNT)4*JO zlV^{%sZOUM*j@+u3%j&(lCMD3W0ijy$-RM2-BF2pSSrUUUwJ`cJ}2HJ>zS0d%d|}R zKNdys>tv#!QBGR@JE3+sy`|DkUA)Wnb&@5XZsUGbWK`n6Y?aB%j&tM*`DE>I@0&@M za=V#UtIDR4?8A$+&c0N4xr~(4gKHJn2+Oa~^#4rqE8TrYW#24yeqQJJ8OpKRl^mnl zWf(QljNKUfFGiW&&%An}I%JL8w%lN~?B2+C8)=9+?UrYt?Xs1nJ(~4c-yZC83*APq zRU3EsD(Fh{nl?D*fINc_6&V$bJ|$9n!^6HB>Gl>rNGaEJIjW(nPer?3_Y|R=0gC+@ zu`wLo;W;E_HNAm#7)d=Ps4ZO+Tl?#N?w=x@N%KLX{V2&hylMy2g0IPnc7{<|{Q0-! zAk*vv1m1+fN&7^a7(!XDfZ;skubL=rQ5AisRxMxBvS3 zHxZ3~C)#DlQvu{#Q(YxbQOWuutA#Q)kSPef&W3I%d4$z>worOcaq?L6z z8A)-y^0D^!vjv#RIAa}2HsD{38knwR&IMJnH9371wN&Ymsb`XB5AU(&fUY zaCqeg8V#cGKcxFY;nc9kI+2BB1M#1tps<(5j*}`<>nwESnI*P0B`%e_6sR-S)r#&; z)LT>Dv4Qmo;!qSricwMUQ{KCMp0s6DS}Z$5+R|StwA#fpr$$cV5pSB<7r<5_!ziAq zX_+9dsS;PN92eVH(-*`!fVmIQ$eZ95rJg*aP>vPZ+VWhJ_z~%HgF2a=Do7c#qye1z zW^%mw?RIqI<0Xya za--=?l#)rqJxyw2;*^j^aI}i27-i;etrcF+ zw8yCB_l5M1H(NRP+)CHHom9jxiet+7OO)|ZDkI63hf$oH=?NCZtEJA8w!9knyR4XoM?U|9 zX5@P(PM2X6c*10yPW`)`$T2ForY^zrzI_vOy1e8b+;Me<(*>)>a=O9?HQl@K#OaC} zWi5OsPUoI6k;GRiiRXd&q!_gjJCz0l&mNSK-X^-YqH`RKakZ2SpHWtnq~UdXB!%=} zhpO)OtZ0v;Mm#UWDBuOTcO}VJ@luH-_bnvVKqDi0Ajha6B5_EsU7Y^zaAid*3;(NU z2<4oY-hca84S;9#9+w%H!Wl+3;du?n_(U76CZ34IT|C2#we{;N`=Zp*$6)q>Gy^-$ z^Q&iuHHyi6@}$l*G-0f|G4BzwfbLRXd?V>Iiuv=_dDKEf&i>Nv9!dia+N!#+uJ2?R zr3P)@qr(RS%mZ`XJE(f+O>RkwF#j#2ASK8K{UL5tTeJ9G_a8@*ui@aOQq7wD%Rs6^(e{ask4MuyDoPW+uB{;z!r5! zc#B7OrJ+F~kN#OE#hTYJBR_G9nM#U-)Pif~NNR<G}K7;~hQcBreCi>GEKKt%lN+ z1G=wA4lFk>s59Ou?>ZRJ)B;YWenQ-&O=Sv#3cMDUFh)DZtyF??if0+hskS%|>qYKA zb6nbI8~XR-TDBRpA6ZbLdA%PzS(&}#Jf2^d@c-HHRrVc%U4KvN{_{di_|TPgi43FS z$oW^rE@wq(CU9W3#Ghjndou`+izMg3s{!k7#c7FrIbT_=6Jbv{r}WbpYZmI3_C%qA zqH&uv+IV^Yyonp~s?PmWJ=ilJye?LZ-wp2!#r%YCMr5SK((Qee5?X8Tw6gED6r+Nl zwN$4yNH|2(xk_vrgZ8Vb@ii81rPwXi#RPS$J7D5ZTTpr-{9LX1}C{c?<| z-ZLk2ejS(t&cF{|UUJWCC1bw!;Va(5(`UgKIXX0xdq8$>EF2;p0nb;1ala^W*@26< zw!HOh%ou3<9C*rc&o(K_iq^z4%_&Arw7V!+c96$e?6L6~#h#J^M_PoWQS2kzoYEHT zO=@Q5Y%?NfkEMsj2a~+QcnliEDSKVWF$%g_Bh}^^(OM^Pn1Xsu{MZAR7Zl;^HPXlK zmgrbyfl*Tk0c4X#t^l%r`;1j`Z!I$FT>cfbrum+3J)iHpTGhtdR+Zhm(mjXk9)9oo z6U=9LWfE;*J-u>MOx~x?G2;+_9SpiuEaryugk1QHV*mcIZELV_ylz}&EAg;@IYyP^ zamL4E6W!+|MZ^=cT&}C^b1TDn+ys9L6_i6L)Dz;IIX2D$qngaTKhX6S^Bc~^eG%D@ z%&2#=r~@Ur9|~(tJezg)A!BBbmc#yDP?$&f&b$d{k9hy~__&6~#?^)S)k<97oII}F zn7EctqRr(Q72e~MI=abSFu%!Nc&x~+uVowEg2a{Bcnj!Pjf*vjp2 zdSN~88viDY0#`h8%sLL~rG}4zz8GcVLD+d=G?fPE+zR1xPxXXT1^S5SaGismOYigH zxZH9asDIvzEFlYwLJh#m#lg*vqR6N^z55e8Hm$SKT_D$cy(WbFVJ@SB zmusgUs4V)BL-~ns?|$v}M%Sk2)Q5!(;%S2-J++(jh8-pNIDc2Sc(vWSc-54)E~ zvbU3D^$Uk*M{Yejt!~q_jnfXYl%RAJ+P#T7WljbxNrYyo^yx zYN5d*`Abl@s7ej6*XkFz-gxwae@sT1dSN{~6o)&ylwMnXMMh2SU&gT^FLH4#-nw2odFgyV{Wz5=T+^${7Z*aul}xOJjB7nn2j8HLu_|LsOM9FH2< z-s_O$-4LHe-aMMaslQG zvHRR{@;dkNdZ&MRcd-2RBv35lU-|sX&G@(@?iU1Q*SW#6*OO?^>UMNS*QSetq83$= zN?T&DO}H)Hm6H2--#Wfayp+z`$4nn$Q_`-}q3H)x-ekSBr{<|M#7f{%1^ zE;1{Pb^?yJ#LTMCB3>4gyrGtJD@`8?@6IzRanIXa>dZ@AcT7nK?|FT~y^rA81xCSg z&g?3Yvo?N-b3Do%y~wEL@8T=PUB!H&5%y5AO5UJ%x1i@rEvFb|V}JS#%2$~uilM6|;(M*s6Y%|}t_Zbuo>5o7E*42)TO`bE8Cokas(Plu!p`Lb+VAjSytVi*qNgd( zd_g&t61mm*adSU9SqoWaJ($XvVwAc<$`*Qey$O$T|X@DgI$;{W(pvk%l(+}3B6iy2u1t)tVFBT>0s|~4QSPl z`zc02Zz)~5*jGW^b0f8Gb-X^KS~34j+#IDQ{oQl2B(-3!)!MtVfkxeo#I-)=MQem! zxppZB4%U_R99B+Hf7+jfwC;qy@*L?O={@9CK}Cs|W-%7s)MXRZ)jU_xtGK>CX6kFA zRlst6NnDW5s10G``@S0KDRvvxlO=ww-E&!eHbP#i1Ebe3XNJ-n5y zw}{TS*R@#Ur_T5fc8M4HjA{W_f;CYO=Xt3%X$BD~0q#``jiI&omBYx1?I4x@V9 zTNKHU>(+_k-g7{6t4Kr1XjF&rg#pWLfo@1&ALA8I%-Y1g zoS^9Iq5A9Np|5z~O7HU@H?qkSRbOZ7P`uy0lA`|FroVcjP{neJv-Q^{RdL$%-u;A0 zG4Uf?U6+-w*IjA3QTn<~|4uP#8@-Lu+wJ=8cKYqm?;G`RpHVl`+gq|y8@JGN1J%`S z`uA=0JHx0ZdYjj8^Yqq@#+|#a%(_$Q{zJOw7!@a8bx)RM9FOi}&K=@bSWH) zKQE}e$ENaOQ;KO4e?d_1;IAI>7X<}>&jXUue3T^Gk>>ikP1jdCTwg0pO0`w>l@8Yz zj}^_*zb^@`boq?RhGsY$enKpe?VG$7tKaHtpnFDAq_CM#Sn&_rp6u$DSP^jb`ZTc|9@QJ#8$ULyH) zdzgQ5YCC%_qmj-j#XR*-Rzl%EV-`yeDMlTBIK}_cTghPmt4U)ab}O$ycrM=gjAF@* z;tDYT9Kdp8XU`(o7E*k$mdr3J7(R5Iog!QH{H-~-^-d&XhRf(Ex>U2VRYT%qKPWzuUtqppbd*xE`YfWSIW2Mh{W^Fmcs8Z>MwAws9(WdQv+Fi)61gPo>en-18ab4ER`A z3O@f9?|ned@iq8iDT#8X&Nn>AxrbLnT8!U<@0WeL62I4|N-YMnNi%FKB?G$DOuFjq zMCSZ(t(smM^dCBA)h2g-Sc35<*(;rA)I@fsX0Nnb|7x-zDQX{$lkJr*GAg)zT0&)C zE$@{MzWwHyz0&TdOih^n*D^YOuXIXK-#jY8K0Chh>X^OK!H#LXw(JY)@>eI^#a{ML z&Zuhp%P@bv@rR@jeM)N-Y!|m4Qt>6Piq*h-r^wE1`knvOyKyG=SNkc`Yt^S-W!tv9 znBQ-&<5nM(S(YNB?vXP#T=hvp9+0zGIJGxAc?5JXFxuQZrJ7=tDO0dYQoX+_RsRA* zU%Paw!AHiXs{YcM$S`WM83&VU?gArOr6!q+#w>LHf->dcEEm#cT1OZ62FqS$8)8FE z1woCWDeMs?y7<>=iJ<#coN)Iw@ctUL)hgKxb<{zpu5kgX@g50oDnlnFS>^Rpv)y>t~^TGMut%% z+08Ea=OLt(><337`PCVu6zN`1_nf3izZ&QlzBcKvF5Pj?%QQ+cUrw=w#^^%^W6q(0 z>{6Oe_vwS8trr+&Yyk1)Q2hmUH+@jSYN@ZtD11F^u(BHzU!(LD?_05dsL$|K6V}mR zXTY~8Y%;L^$S8b;7gg1yTH_jpyd6gO7VIA?$0ZtEdm3M6nbb+kJ8aN%GK_*WhOh9; z2!z=gYU}s8KEo$?uaM$gr%gT)PXPIgQNW|lfKCfPZJD8eWBe#cT=dqQ;1hHn#i#ZJ zHQ+4bZ@$=PdYU?Bn)n*9$8#3rT$j4YXoeG=xO115JN=8wbzdiA z#{D6QR4h43N@dixd-dLxr=};uaTvWecaf>Da2(cKV|OOxFESh;VQ~&+qQ1&FBt&TWKlid`*MsNk0AlkOE|36fFo#GkQBm|>Lo0}QDC)4fvv-|A6Lcdyzwrx$a!IZ5&MSG0ZT zL~=l>C(kJ6+`pO1bjq?*n`$ZRRx?#gLCTn@Ppg}b61i*Z1!uM)t7+d1 zmQAM4Ok^%8m+{9_*$M@%g;@iYUCJvhw;rZcPU1qC@9j@QN5c-`VD)s-c7UXNo>9RM zrY7cobA3y~%*N8o;6D^2S>GT6zmxT4lg_GI)eukx?vd0o??H!48+~Bl&K3xz! zDzIrhq%_xi}{FNle9D4xV$2MtJzvB^| z&&)6?((h1Fj`DJ_IVHq^^f2-D8&_VAQF1EBY3v{Hg&NiyeZ2D!FYG5iV@5u8y?i;h ze^1wHhrTv#pTT(mA3@;0qYDVo-#9|+vqvD@K zoNH9ty%eZoiQ2*?GMlaXKBqRg@KVXC)rhrH>Qd2RB<66csJlN~UGBM*hJUH_ZTb2v zy+!R}yanPD6z6kR*3Dchwfaa`bTsCpT$8$(auOioWThba3y~gsDxL*;tz{FlrFmM7G0mM!jGyjkRq55>b9{wq+Xz9Bn2OZgas{@&C?iczeaZJk&CqP{yd z(cT+k$NA|SVrO^N;Aj}L}Q-uy0E|0iI&O<3i3>C#R~gx z!?xI_5k+q#ddUkauKfglIe|Xd%YLNY;TeYZ3yfkfVI)sX=GCLfsIXU$g%ep^W~w#( zFn?D1EYws+Mk}jVt=~(0`Jo=w`U-0&ynEw)G9vndnm{UsJlw41;f$b2Dz!75CNAcW8icw~-iH|)PMt4-&&l9ENe>R-^ z>eP(1mSNON;_1QpqsdA4r!i_WFX4vY=07Vn5tmbKu@(wnQ3ph~MGFP9iQfzAq_=n$ zD|q(r;yd^HgRBSH{dIu~9Iwcz5i4E~?~CdgLSawyVKjCe^A_8vVPBW~IV089tbSqT zCbm3#VP##&G6IrPN>FXeJEPz8&cJ#}_W6|?V}v4pxRLklI-bv{RfJdtzw4u&p4u`z zBif&!JB{lU0;58PQ3%JUYSt4!+~~BzhGIjFoa@>=YNd0MB8?~!cx;GvImOYQbab>Q zr?&L8vMg|GDVb+fK(QWy9n|!r6Z3mjyLt+YsviHVed!cG7akuclZxEWj~gHPEaI+S zoJCwSiZN~1j1;4Sd;iXQY*fnt+}pCU_YJ+!XVhV^LC(UbWt|tJd+oP9*C~0PoEbp; z>+`}_hga5viou)BjAH+3-H=Fu%9T;#4^yYMVX3nmzJ7Fyc|qAdo|Q!$G9E3@E_F-P zOQyii6Z6rG!dsjdFtXuHHyoddt5}I^ogQU?T&G7Fk{Z++%X2Sd)K#_`nWNljKk?=g z+rM~GoM4fQw_@~32`b)~4(g|hZngFANz~gJR9~lmdp)lu`;3~1&xG4EbJ;|)TzNhR z{ff$(V-)OFj$pg7_VgmmIN#VZ#@9@qQSa3IA=eccg*Bnzuak3tBBM;WzWZzyT-P#Y zoe3e_FL3V|x8g%%ZTG=)+$ly)xHd#_->TO%{V#;|ZRT#L9vqjy%ooCRZ%+FRJ~$Sc ztHh;u{b5bj)fO(Wb8fMEoV=i5y$f0CD!o=7p*!r5^g42ZQM``aAYY*$I6++2lVf=H zoZ=VEh-|_7vqsiz9o6MHgW}}{q1-Qu%q00~39U!7^>VZ$jS#6Xnz-!!<9&A;&C_Sp zSf4q=J-otBR5S98MpvEl_hhD=;(l0$n=`4gay?T{dB(nsoS;-kc@IYGR?lsuOU;zs z8`z1FXVh8W2;2+4L0>-j_hi`rAn)YFeg#G~XiMUVZqKOJtC%)^8ch@>#i;f`K;c?+ zi0L5;aKFTy=_F}G-a%sWI2U_H^!_16Sw|4*-^MiB%a(}R9|q(fc*5`*rJipo+o69! z&+`8d_64;cmB2h*=1XRTQLP7)!StwD=Ku9g*>j){vLC&iq*yaHUorRz_?lSlV;@mo z;(`|P2MYJZEbRrQ5(2ecU{rNoa}BQ+FBto&EsI|g*;o6)fZq7)@g;FD2kK2KPf&MM z`Gi6C9H&nj;=RR;ns2p|9$lq+xBbaCulq zo=jRRGAhhRgM%ZSYhJ5!gkIe*GhY>p_4N7rgu$?1eP{tGMg=QL4hfCd)I1-_ak;mks}#)E^A=ZOK>CoN!1Qxn2+D+Wm!`Bv%mB!x5q6?QbSo z%m4RCBFue@iPcI!qJHOG7Df8l<)OtHbogbhS?C zN_vMNGmL`f)f%EPF2N5+q$IaR61ml;*9QF&nUgTJ0pC%s)KI>h;vIUOsya2aLxE8y zwQO{P++%)~QS4y{{)<>69FKIrVl@0(eTIiK0cEGY5|-R294EheSi*ltl#u{4U#T7y zD%#g@*)vh@E5c10xdwu&vatmCInp1$V(QEAcuON%G!)MPbk>M+A7Qi_vJiF0fMm5Qv-=Hxf-m_q@OCvi{PBF^Vagzhj-b9mwH0VS< z&mL7nxciKX@h=)LbZTd9h_fFap4XWjNn{umM1%tcZ4vRhgf=}!II=o%B$?|sJq=!n z`D}M+6?GL}#^WQSKAqM4{gFtbrJAx&ot`N4n_5Ntui`b1eKHGsdJXe@oQ+pxlxt?P zR!ox}bup<`<8#Yh3sjjlUp{19&-fy>T#8X@UZOn5TU#}|i;>!A)WmB|6|R|)xF%U^ zGNWm3t>FOW+4P3-+&9lCtBy)OkNf0=BYa_PxwUB&XdS}`D?Gcnb__4noV%JEyFpk6 zm~4$G6&S5t){;Ha$UF30nBB`3O#c~4_!8Her+WPVw$=Q#wPG1zA0p%U!p_9~N7lL- zM(sMHR#sM!x7o;>(8WtSuQ^8jG_s84x81m7z7SvIo_iF26Yb|2W%xR*ug!Xeqi0vp zt_4ONZ7qY9M-cSxPntXyXVtpF^+&SYS!C2BhEL97 z;hy05igmotD6Ty%al8^5wQN1EWf&Fc^V8Ya@H)NfqgO2Kr)%&E^G#dVzIDhl=ZX`;d~! zV}VgG>70&}&@j3aM=mnz68kC_duuPHJFE^e>MAaqrSs}u$zxg#uaihBy3Q7D;MIR` zQ8sW>jQSjfMIKH=xu`Za>K6K6w9t;ugny;ss|devU1e|d$D_4uN$_#hm!zmmZO}_8 zwU1EzXVHBL-E)jOiNbw2RPw()A!SB;g2wWUa>&o)Pu_MXx`u0=e%ZpL-YbrjYT;k>`H!U&0eOZ~p z{dHO{6jTfvk9fY2c?O9qBPgQzRS}{6k4A*{&$X^%zJCGn+}t|DO}OvOl#xzaXr2?Z z(L(c_Jfj>NEi})mr+e+-Jm(NC*9CvJS#mCv<1!=PMC-OiMpavVy2d}5)(qVBq8U;O zY{ix4T_4b~?7_6c3@lJ7M%gh~G00h`{1v;E-WImB8rrhPM5AEh$% zjU+SctF#uyz0m4*`y$DK9<=ZlbC~bZGZC=JK8p0ma*Fm;$!&1-%QBCK9`l}=2{rHK zWZ^2Uop7li+^c6Wz&Xt`&QH6_aNmbQi2J!l;tqC^vA^0OgSv-N(tmiY)Rw}CKP4#S z@=$u1^>Q*e47OThYr-Frnn;&xqPiAP{>+eRM^g)tQOif2)o7}GjNa!2g(+zLwqWXv zo*&oG`Eu^dEp2%7HsuEYQ|e^@a%B|PkM?r4doNq2@W>iOUrrW>jFxHh9L3B;c+ZyE z2jp%raeY_Ml^FXdj9N={4@qsP=F#ZaRy574D*}HOz?%PjNf6A5fg)sG?jgh~NTMNi<2=_Eud5EW{ z4@xV68%(F(TVT|o^!CswtOq^kuqdnrJ(Bfd&*zcsw0C8ZQTQ{9-X0!`<8b;tn|{xx zyStHfn4!26w`J73?gte*(UvG=&N_DoK$Za&Ot*$+gj9?dfTbD;|;lUyTC$OuS<>faD$BdKAMSPWXSg~2S zAg!K%JIQgKY9|VkuL-DS%>1gL^lDGA=JjOo*7UMR=mx#_+Pxa64K8qmFsIcEC zw)=$~fE8V5IgNxj*A*Cb?qJMm=$Bna$kRx_N-syA&Q|d?LCh&KiZzkb6rW&DdF(~m z8tRt2XVf{)QftU{H*t!VQ;~Iv*F)58t#kNn9qbcKZPMBa`<@P#*CYa7<&yYJT)svP z_(-7~=YdiuyaGpbTp30MZ*kw_@NH`yPu(lj(15U8A>u+tc05A{^!M;)kyYN&CX z{HC&2ewkRMEE`x_E}O|gfl=0rI<8mgj@o#$5|=|Eii{Eu6+ssT@Q1gO>f%bi z+|4p}2v21?)0(+D89Uo0z7(UX^T9K_W+bKfeMWJ)!ZopJYC>63(`rslBC}c3S2?HE zc|>kZ2>e zs3CefiY|wGhy7kjk#+8rNFq5#p>C>cLCvuf!5n?w?>H1Xv7s~6=pgK)C0|N=jWe|| zfSumUNtTdWEp7?7qe%_i=_A<3brg0TJC6I+Fck*>LDbh-v9~g9oBC=vu5wR{LF3;} zxp$8^!{q8&35*XdIehFZ#+q2Xn)_xW67a&GSJwq@_)5mbx**6mn*)rMIr|(Ph+jwinE*^u8jaf;*#n23O*#w+38AvM~1p zs$utQQum=$wC-mp2fAPCYeG45%4dJ6jk4l^92n~H8O8Z%oSHECs&3Z|qj-(Pv@X%a zkgjuzTLphOGLajTFQ?Ad6f@w4t(EeOdZ%4~d|trU41I;yLe0Kb#P8GiU1StyJ$&u| zJ}~Qiy;j1^wYt|#Hg1P!h*Q^yB&t(tSL0XkpbuSR@-=21Q_ljL_14Ta6UC zqSb-4rv`dFd$cD2C7pp143R`Sl=X7|CiP{z(KgF)VWSgZ1?d`kY3h`|d*>$7zObZPTt9&{N%OrG?h^+BgRqHf=Os zn7ukY_8xd)Wr|Ud%9sO_4pWVUrHjuf;6uonND-FUVuL+ABO@r%K(O-k#GN)(e<#1@AZ9M3Cwv6`#8y;WQ!6?C{DwqhNP5hu${mw-_(t^t)dFE(pp< z#7fKK<+W~!yU3`-28Zq2F=IV%1AILx4}5Twc!2G7{~ajct8=X0Q^{*8go4!g0^3NT zzF<#o(Ws2P`HYHZhg{@*4&70%xpbfZ4U$Q|>$r&|43P%!IU4 zimfV+_RTR0zT_7=8!?OT!_E*MKSG%ZHWE1w)JHC0}~g=Lx+UqTaN4)w=kE%w!j?Gb7(?`prbvSjFqY6g}Zt z(rSC1`=1h5spkt^f=-#onFoJ{aWhJIDMl?ETI#?OxMgS_dwAtjKZr89<()3a*Ks}7 zvmI~RE=;TA4ogH;r^7ROe2+UBMmdUlJB3kyo|mYh`sVY=iZ3M>1f0e>IYtF9y_hWL z2{V=KA$pmcpwO^9&+8Nyr`I6G^~#0yIr0>6O^c_t0;4X!L%-pCcsz4AD6Qrqk41?~ ze;LwW*t-Xww<~vkbeZFBH7Ra-LS|u)!Jb3R3 z#%_eHIHY{{8_WxX_JB`UsiX{KA98>ZHN`02YejK|(p<|DB1*r2!`9wfV_)rth zliItoz^ILo2o5|aGi_L@(Q8(S2Qd^GH8!4(@_8}l)Gl|M=|d)5b;|62f>FURX}W~4 zFqg?|t)Wnq1D{bFr%JvCT#%V)ogbV-#E4VBUA* z4&SXOnu4b(HOFhj{4`Z_ew)@ium%v|w4x}*;cO)20Lg`#ZxO%K>|3Fr#bS?%dW))z`%US!!MGi`VUCv)6gcez$+Q)m7gWX5hZy{C8op{QWO=Nu z5!(mZfA~~ShEWSi2AI3H*4wW=pJ4R{K2L(vak>MwLm3q%)M#mOn$O){OJ6@toS;T{ zTK=0xQs5H>#ly7r=_A@I&O$AG({K~k(?Ta;^nd_z0YKSI!UlhALoqPBC zaK1)Dep@*ACp9I4V@Th=-lRAtFYl2QO)mWFO^O4Fv3X%M&Qo8%Kbc`v@X!<ISH8-$dR#w7x6h%fst~45@t@FbA?Gb-t&oAx`WsP<2{$wyRHXai)B`Eax zKh&4~x66v2u^shXpHb)qEn5E^Z{>YnI&;I=y4N;_)OKh!Wi4~ja=9DITn_7cUeh=k z6JtkS;=+p7B=%(Y?zL6nhB31R`b3&tdqXpB#2tz^nBKu_b4Js5w5`;)N=azh?skKE zOt0xpwBDCu)Z$$&(vDQ( za=#Uh3wpBp;SmX|3Y99OEQ8v4#5i98{Z3qx6}h!+FOL%%qohB6%hUvV2s}5dPs$l_SZTgY+YuGNW%?s> zdf7K9g*&7Mexhp>J89eB1Zy=42r0LXSuN99aYt!zxff`dL zDtYi}sb$^)wYAGleS1ubTZJyrI;*fB=6`8a=%f1jc9|ENTtlz=3Zx*RSA5Hijf)Tw z*!}*#)CsB{fF9X*L?ZWXk%ojrmg`^dg)zCvf7?hyV``S_C>WkbElzo>C;Ixf;f29> z;nl9vQf#gNSwfQ_QDl^%n)hQ?eG^g5rFv(U=6ddpK(Q@>65Ebj4ByiI2RtWrV^~jn zvfP*2)5Cl1vbB-VsAof8pX291<}>wkhEc()BND-RvKMS%>Uf&XF)C{;r$e1!h?4~WIxXQ#T*NhY(U`&fV&S2@8zIc?GJ-mNyhIhAgU<=7N|GwCp-?M*8SAx- z`YY*B!E~X^FhyG0r*VN%X6&+7S56EM%RI%KE4qTQ@LnuZR>)4uy@lri)+%k?KNex@ z{hBF8u|&q6Jr|3e8%~3dNIVg&L){`$hn__Vp&yqxSyIc~V)QhY)FwGSJjW<=+Fo!{ zeRhdVTDFl38pKcOy&*1IxTQSu={FCBo*&fD#aqnSA+%LHW;dJRXYO}} zV-i<$iL1?&^}@?>e)=I53P>^Poz5y}e*fKy3{bI9xSwmw&c z_oq`Dy-wUIFlw|EPxn&pFLgX8EvHvy(y$bUTrd((7a3K0xl~d*9K5Mlh3Ip?2UI9r zA7(nDto2mZo>Jc{>uJ#DR?F!Ls~oW}`~-48MEbU%uH3s4ra_`zu1yEJY$z2tN=8sP zagWM`d|@PhlS+fs9G%D9_snQz@*rn$Ny{AInUS=Um$=s4z%A2?^><3WUbjp@MVd+P z3gvv&Te|Lv?%On)&6r@n`n|Fi&?v34CX{oW5`;XvxA8a>Zk34Cu00yRyjRy_icx%W zAL_q?=<5yDv@fU$>O0J(GPfB{UOfwF>mCE@$=w#F`^!RoXpMPpd*tl=ZKe+m8f(;6 zCFf=yMRzLme%R*-YFpOj9cR;|epIx_`vi6mjC6QKLKOwYdkZ9-8tRbsxq&SE6N%#d zq1%DFnyuFsr$^X^RqQekgq~B3TJU}0+Q{jR+txED-Vv;K^LVBl__qr$?D5!#!uptZ zQ(M3(!C&UpBXa6NhEeZi83}%vyWP}895n%(P|(GX|H?Y@=&-!YOI)C(`{WDg%&|oB zZZ-T%;?jJtEmZe@=()(K6`?n)^z#^h9d}gg$Q29y#nP7sNnX9f&?+p&SFtX;IDPKk zN{u3)KBE#FJoX!Q^oFU_}BJ%3G>`!jZhg#C4l%h&kx zSV(`Ae4W(X>^QF{VwMVBDn!^F1*=IK)3f2X)M@t9lc@fpQo z0~(E0t&bJv=SddZ(yZ4?Nsi8ZzdHA3&$XF}LMd{La&!xslvjmQCP^mGC|@gS3I)~YL1u6 zn{kL`z$#wt5~l+N`HXTkSDTc7c&Z0`58OL}dSB>E1bJ&w@kJZtj2N8hl48^`t1Dp@QOpsmLm_BP@figz zr=D%lh=&oi%)sw@@jBo! z_?b@}avUcwanYM8Z^#)$*AhRyhQ02S6!d+T1l_`&Mq|Cq$l}&MkwCU7l0f!}KLtV2 zFP1}yf?*rdOL1L1G|x$cqHUFN|BK}bdK+a+M3pW}AlPHpulf)o#i&rYzEB8}K!TX- z|5vpPFrobfqbBmg1&-XHPkPQtTe*aw6@F3GpZq~*Mle?6P`Ue z!Ul+b7Z}C5$~x^=V||YwjVbsVD#ukU$K|Y7ZqTUFmUtuL)F}q{znM=cIbDb6y!^#jABCG2*RkS$Nec6p|T z7bx5De_*5zIW3XsDb8P9gNhO=Q$a-_=-TDkt!Omx+`wwq&A!13s?^_6%M2!->& z7?r^OHpMIQ9^Ks(o@2^OA!T|lNQw=pE7&K}S9*5wbz^rLDS`tQ85JW=Ti4$cgv*7v zf?t%9cy@otanYOFsOREM189qWH&AOEbn1sft2RrYCWV?e#(KZ@e>jmW*Gl~mzGiU# zO%1h4hEc(9OOskXVWl|7s4;e(+6zQ1dUKt+V&6)%MV?VHaHcW#LSlt=9V`+f#P20v zl#i7d50C3e>@OYTu^$lZR{3Emsk&cC7NsWEoX7RlKpYCER5XC^wBZc&&p58?aNN6v z=TOhINn0JA7r+a4i<}AWx6r#_(F@5GqbzNGpdNWWiC!0M{(CY!hvnaGD7xBGTrAJD ze-lQr_Yoxu5@DFfzSZ1oO_p(1x ziHlEg6n}NW$6bz3d}hZT?4~L*${vh4k-_zKPXGEW=~jI%v{mk>xjB+SkT_~>lP>3n?>@&)Qi&D5Ic-Zgvf=0SKuo8=UUWQQ(@QP3U$DFx| zoJX;C(%HaPpgBgpn>W<_J%$R+o?)@)kal=nKNqBoeDdBrraWz}A=)+e64U$QJw}c; zU!#uR*+80Ha7QT#lzXq}e3aUV6046Wbmf=_PsNz!y_#g8)V=SP`$gE#cW<~4O=OP@ zEhQr&GY|tYwDY8TUR$#h0hmjy@V?Y8NVfvQ`%M4y$EkP6-OV{iK)J z%PaQR@@W6N=aVhS-<8j;^clt5aCqM%^&iS(VsuxzCK^V+>t*gMw-9{Y!`BwZ+(DEt zo{o+N)Uuy+a`%;WJ;!@c92uqkJfj>MtD}0{<~Zngut&-bTiXJo>=qff zCu$wEOOa9G)d1Bt4Oqq zswmn+fBezAQZ&_2fl(t;M`_eiH0W|(EN%AC`*401RhU!MWyBAg`!iY_yM|sw2^{5< z^giU?�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