From 76d90c2ed2956d27e0c8af8fb0b76b3069228d5f Mon Sep 17 00:00:00 2001
From: Mike Baker <mbm@openwrt.org>
Date: Sun, 16 Jan 2005 11:43:02 +0000
Subject: [PATCH] Initial revision

SVN-Revision: 197
---
 openwrt/.cvsignore                            |    6 +
 openwrt/.defconfig                            |  113 +
 openwrt/Config.in                             |  109 +
 openwrt/Makefile                              |  191 +
 openwrt/docs/README                           |   18 +
 openwrt/docs/buildroot-documentation.html     |  644 +++
 openwrt/docs/stylesheet.css                   |   65 +
 openwrt/package/Config.in                     |   15 +
 openwrt/package/Makefile.in                   |   64 +
 openwrt/package/bridge/Config.in              |    8 +
 openwrt/package/bridge/Makefile.in            |    3 +
 openwrt/package/bridge/bridge.mk              |   61 +
 openwrt/package/bridge/bridge.patch           |   11 +
 openwrt/package/busybox/Config.in             |   19 +
 openwrt/package/busybox/Makefile.in           |    3 +
 openwrt/package/busybox/busybox.config        |  464 +++
 openwrt/package/busybox/busybox.mk            |   62 +
 openwrt/package/config/.cvsignore             |    8 +
 openwrt/package/config/Config.in              |    8 +
 openwrt/package/config/Kconfig-language.txt   |  255 ++
 openwrt/package/config/Makefile               |  112 +
 openwrt/package/config/Makefile.in            |    3 +
 openwrt/package/config/checklist.c            |  372 ++
 openwrt/package/config/colors.h               |  161 +
 openwrt/package/config/conf.c                 |  583 +++
 openwrt/package/config/confdata.c             |  447 ++
 openwrt/package/config/dialog.h               |  196 +
 openwrt/package/config/expr.c                 | 1089 +++++
 openwrt/package/config/expr.h                 |  193 +
 openwrt/package/config/inputbox.c             |  240 ++
 openwrt/package/config/lex.zconf.c_shipped    | 3688 +++++++++++++++++
 openwrt/package/config/lkc.h                  |  113 +
 openwrt/package/config/lkc_proto.h            |   39 +
 openwrt/package/config/mconf.c                |  713 ++++
 openwrt/package/config/menu.c                 |  431 ++
 openwrt/package/config/menubox.c              |  436 ++
 openwrt/package/config/msgbox.c               |   85 +
 openwrt/package/config/symbol.c               |  771 ++++
 openwrt/package/config/textbox.c              |  556 +++
 openwrt/package/config/util.c                 |  375 ++
 openwrt/package/config/yesno.c                |  118 +
 openwrt/package/config/zconf.l                |  366 ++
 openwrt/package/config/zconf.tab.c_shipped    | 2127 ++++++++++
 openwrt/package/config/zconf.tab.h_shipped    |  125 +
 openwrt/package/config/zconf.y                |  687 +++
 openwrt/package/dnsmasq/Config.in             |    8 +
 openwrt/package/dnsmasq/Makefile.in           |    3 +
 openwrt/package/dnsmasq/dnsmasq.mk            |   50 +
 .../package/dnsmasq/dnsmasq1-100-bugfix.patch |   25 +
 .../package/dnsmasq/dnsmasq2-100-config.patch |   49 +
 openwrt/package/dropbear_sshd/Config.in       |    7 +
 openwrt/package/dropbear_sshd/Makefile.in     |    3 +
 .../package/dropbear_sshd/dropbear-init.patch |   59 +
 .../package/dropbear_sshd/dropbear_sshd.mk    |   79 +
 openwrt/package/iptables/Config.in            |    7 +
 openwrt/package/iptables/Makefile.in          |    3 +
 openwrt/package/iptables/iptables.mk          |   51 +
 openwrt/package/linux/Config.in               |    7 +
 openwrt/package/linux/Makefile.in             |    3 +
 .../kernel-patches/001-linux-2.4.patch.bz2    |  Bin 0 -> 428187 bytes
 .../kernel-patches/003_kbuild_fixes.diff.bz2  |  Bin 0 -> 1091 bytes
 .../linux/kernel-patches/004_386_emu.diff.bz2 |  Bin 0 -> 5292 bytes
 .../005_modularize_vesafb.diff.bz2            |  Bin 0 -> 710 bytes
 .../kernel-patches/006_init_unshare.diff.bz2  |  Bin 0 -> 299 bytes
 .../007-scsi_add_remove_single.bz2            |  Bin 0 -> 3988 bytes
 .../linux/kernel-patches/008-ieee1394-fix.bz2 |  Bin 0 -> 390 bytes
 .../kernel-patches/009-always-inline.bz2      |  Bin 0 -> 468 bytes
 .../kernel-patches/010-optimize-for-size.bz2  |  Bin 0 -> 1201 bytes
 .../kernel-patches/012-x86-check_gcc.bz2      |  Bin 0 -> 329 bytes
 .../kernel-patches/015_cramfs_initrd.diff.bz2 |  Bin 0 -> 406 bytes
 .../linux/kernel-patches/017-printk.bz2       |  Bin 0 -> 336 bytes
 .../kernel-patches/018-slab-loop-init.bz2     |  Bin 0 -> 268 bytes
 .../kernel-patches/041-changeloop.patch.bz2   |  Bin 0 -> 2783 bytes
 .../kernel-patches/042-loopfixes.patch.bz2    |  Bin 0 -> 640 bytes
 .../linux/kernel-patches/044-streaming_io.bz2 |  Bin 0 -> 1743 bytes
 .../kernel-patches/062-silence-blk-queue.bz2  |  Bin 0 -> 374 bytes
 .../kernel-patches/063-silence.kbd.patch.bz2  |  Bin 0 -> 506 bytes
 .../linux/kernel-patches/064-shutup-md.bz2    |  Bin 0 -> 501 bytes
 .../kernel-patches/067-squashfs2.patch.bz2    |  Bin 0 -> 12850 bytes
 .../linux/kernel-patches/076-nmap-freak.bz2   |  Bin 0 -> 1577 bytes
 .../kernel-patches/077-orinoco-0.13e.bz2      |  Bin 0 -> 7387 bytes
 .../linux/kernel-patches/078-hostap.bz2       |  Bin 0 -> 113612 bytes
 .../linux/kernel-patches/079-jiffies64.bz2    |  Bin 0 -> 4774 bytes
 .../kernel-patches/089-no-touch-makedep.bz2   |  Bin 0 -> 858 bytes
 .../linux/kernel-patches/100_VERSION.bz2      |  Bin 0 -> 235 bytes
 openwrt/package/linux/linux.config            |  853 ++++
 openwrt/package/linux/linux.mk                |  115 +
 openwrt/package/sed/Config.in                 |    9 +
 openwrt/package/sed/Makefile.in               |    3 +
 openwrt/package/sed/sed.mk                    |  136 +
 openwrt/package/sed/sedcheck.sh               |   21 +
 openwrt/target/Config.in                      |    8 +
 openwrt/target/Makefile.in                    |    1 +
 openwrt/target/default/device_table.txt       |  162 +
 openwrt/target/default/skel.tar.gz            |  Bin 0 -> 4846 bytes
 openwrt/target/default/target_skeleton/etc/TZ |    1 +
 .../target/default/target_skeleton/etc/fstab  |    8 +
 .../target/default/target_skeleton/etc/group  |   10 +
 .../default/target_skeleton/etc/hostname      |    1 +
 .../target/default/target_skeleton/etc/hosts  |    1 +
 .../target_skeleton/etc/init.d/S20urandom     |   44 +
 .../target_skeleton/etc/init.d/S40network     |   35 +
 .../default/target_skeleton/etc/init.d/rcS    |   27 +
 .../default/target_skeleton/etc/inittab       |   47 +
 .../default/target_skeleton/etc/inputrc       |   44 +
 .../target/default/target_skeleton/etc/issue  |    4 +
 .../target_skeleton/etc/network/interfaces    |    4 +
 .../target/default/target_skeleton/etc/passwd |   13 +
 .../default/target_skeleton/etc/profile       |   48 +
 .../default/target_skeleton/etc/protocols     |   31 +
 .../default/target_skeleton/etc/random-seed   |  Bin 0 -> 512 bytes
 .../default/target_skeleton/etc/resolv.conf   |    2 +
 .../default/target_skeleton/etc/securetty     |   12 +
 .../default/target_skeleton/etc/services      |  302 ++
 .../target/default/target_skeleton/etc/shadow |   12 +
 .../target_skeleton/root/.bash_history        |    0
 .../default/target_skeleton/root/.bash_logout |    7 +
 .../target_skeleton/root/.bash_profile        |   15 +
 .../default/target_skeleton/root/.bashrc      |   48 +
 .../target_skeleton/usr/share/terminfo/a/ansi |  Bin 0 -> 1450 bytes
 .../target_skeleton/usr/share/terminfo/d/dumb |  Bin 0 -> 308 bytes
 .../usr/share/terminfo/l/linux                |  Bin 0 -> 1551 bytes
 .../target_skeleton/usr/share/terminfo/r/rxvt |  Bin 0 -> 1627 bytes
 .../usr/share/terminfo/s/screen               |  Bin 0 -> 1318 bytes
 .../usr/share/terminfo/s/screen-w             |  Bin 0 -> 1334 bytes
 .../target_skeleton/usr/share/terminfo/s/sun  |  Bin 0 -> 1019 bytes
 .../usr/share/terminfo/v/vt100                |  Bin 0 -> 1143 bytes
 .../usr/share/terminfo/v/vt220                |  Bin 0 -> 975 bytes
 .../target_skeleton/usr/share/terminfo/v/vt52 |  Bin 0 -> 461 bytes
 .../usr/share/terminfo/x/xterm                |  Bin 0 -> 1366 bytes
 .../usr/share/terminfo/x/xterm-xfree86        |  Bin 0 -> 1840 bytes
 .../usr/share/udhcpc/default.script           |   39 +
 openwrt/target/jffs2/Config.in                |    6 +
 openwrt/target/jffs2/Makefile.in              |    3 +
 openwrt/target/jffs2/jffs2root.mk             |   50 +
 openwrt/toolchain/Config.in                   |   57 +
 openwrt/toolchain/Makefile.in                 |    7 +
 .../binutils/2.14.90.0.6/001-debian.patch     |  185 +
 .../2.14.90.0.6/100-uclibc-conf.patch         |  646 +++
 .../2.14.90.0.6/200-build_modules.patch       |   31 +
 .../binutils/2.14.90.0.6/210-cflags.patch     |   32 +
 .../binutils/2.14.90.0.7/001-debian.patch     | 2394 +++++++++++
 .../2.14.90.0.7/100-uclibc-conf.patch         |  646 +++
 .../2.14.90.0.7/200-build_modules.patch       |   31 +
 .../binutils/2.14.90.0.7/210-cflags.patch     |   32 +
 .../2.14.90.0.7/600-arm-textrel.patch         |   63 +
 .../binutils/2.14.90.0.8/001-debian.patch     |  142 +
 .../2.14.90.0.8/100-uclibc-conf.patch         |  630 +++
 .../2.14.90.0.8/600-arm-textrel.patch         |   63 +
 .../2.15.90.0.1.1/100-uclibc-conf.patch       |  692 ++++
 .../2.15.90.0.1.1/600-arm-textrel.patch       |   63 +
 .../2.15.90.0.1/100-uclibc-conf.patch         |  692 ++++
 .../2.15.90.0.1/600-arm-textrel.patch         |   63 +
 .../2.15.90.0.2/100-uclibc-conf.patch         |  692 ++++
 .../2.15.90.0.2/600-arm-textrel.patch         |   63 +
 .../2.15.90.0.3/100-uclibc-conf.patch         |  692 ++++
 .../binutils/2.15.90.0.3/210-cflags.patch     |   32 +
 .../2.15.90.0.3/500-branch-likely.patch       |   10 +
 .../2.15.90.0.3/600-arm-textrel.patch         |   63 +
 .../2.15.91.0.1/100-uclibc-conf.patch         |  692 ++++
 .../2.15.91.0.1/600-arm-textrel.patch         |   63 +
 .../2.15.91.0.2/100-uclibc-conf.patch         |  722 ++++
 .../2.15.91.0.2/500-branch-likely.patch       |   10 +
 .../2.15.91.0.2/600-arm-textrel.patch         |   63 +
 .../700-binutils-20040817-linkonce.patch      |  118 +
 .../701-binutils-dup-sections.patch           |   68 +
 .../702-binutils-skip-comments.patch          |  101 +
 .../2.15.92.0.2/100-uclibc-conf.patch         |  724 ++++
 .../300-001_ld_makefile_patch.patch           |   52 +
 .../300-006_better_file_error.patch           |   43 +
 .../300-012_check_ldrunpath_length.patch      |   47 +
 .../300-117_mips_symbolic_link.patch          |   42 +
 ...00-120_mips_xgot_multigot_workaround.patch |   39 +
 .../2.15.92.0.2/600-arm-textrel.patch         |   54 +
 .../702-binutils-skip-comments.patch          |  101 +
 .../2.15.94.0.1/100-uclibc-conf.patch         |  734 ++++
 .../300-001_ld_makefile_patch.patch           |   52 +
 .../300-006_better_file_error.patch           |   43 +
 .../300-012_check_ldrunpath_length.patch      |   47 +
 ...00-120_mips_xgot_multigot_workaround.patch |   39 +
 .../702-binutils-skip-comments.patch          |  101 +
 .../2.15.94.0.2/100-uclibc-conf.patch         |  749 ++++
 .../300-001_ld_makefile_patch.patch           |   52 +
 .../300-006_better_file_error.patch           |   43 +
 .../300-012_check_ldrunpath_length.patch      |   47 +
 ...00-120_mips_xgot_multigot_workaround.patch |   39 +
 .../702-binutils-skip-comments.patch          |  101 +
 .../binutils/2.15/100-uclibc-conf.patch       |  692 ++++
 .../binutils/2.15/600-arm-textrel.patch       |   63 +
 openwrt/toolchain/binutils/Config.in          |   66 +
 openwrt/toolchain/binutils/Makefile.in        |    1 +
 openwrt/toolchain/binutils/binutils.mk        |  134 +
 openwrt/toolchain/ccache/Config.in            |   10 +
 openwrt/toolchain/ccache/Config.in.2          |    8 +
 openwrt/toolchain/ccache/Makefile.in          |    6 +
 openwrt/toolchain/ccache/ccache.mk            |  151 +
 .../gcc/2.95/050-debian-subset.patch.bz2      |  Bin 0 -> 125295 bytes
 .../toolchain/gcc/2.95/100-uclibc-conf.patch  |  291 ++
 .../toolchain/gcc/2.95/STLport-4.5.3.patch    |  407 ++
 .../toolchain/gcc/3.3.3/100-uclibc-conf.patch | 1635 ++++++++
 .../toolchain/gcc/3.3.3/110-uclibc-conf.patch |   55 +
 .../toolchain/gcc/3.3.3/120-softfloat.patch   |   14 +
 .../gcc/3.3.3/200-uclibc-locale.patch         | 3021 ++++++++++++++
 openwrt/toolchain/gcc/3.3.3/500-loop.patch    |   10 +
 .../toolchain/gcc/3.3.4/100-uclibc-conf.patch | 1635 ++++++++
 .../toolchain/gcc/3.3.4/110-uclibc-conf.patch |   55 +
 .../toolchain/gcc/3.3.4/120-softfloat.patch   |   14 +
 .../gcc/3.3.4/200-uclibc-locale.patch         | 3021 ++++++++++++++
 openwrt/toolchain/gcc/3.3.4/500-loop.patch    |   10 +
 .../toolchain/gcc/3.3.4/specs-arm-soft-float  |  124 +
 .../toolchain/gcc/3.3.4/specs-mips-soft-float |  145 +
 .../gcc/3.3.4/specs-mipsel-soft-float         |  145 +
 .../gcc/3.3.4/specs-powerpc-soft-float        |  352 ++
 .../toolchain/gcc/3.3.5/100-uclibc-conf.patch | 1635 ++++++++
 .../toolchain/gcc/3.3.5/110-uclibc-conf.patch |   55 +
 .../toolchain/gcc/3.3.5/120-softfloat.patch   |   14 +
 .../gcc/3.3.5/200-uclibc-locale.patch         | 3021 ++++++++++++++
 openwrt/toolchain/gcc/3.3.5/500-loop.patch    |   10 +
 .../toolchain/gcc/3.3.5/specs-arm-soft-float  |  124 +
 .../toolchain/gcc/3.3.5/specs-mips-soft-float |  145 +
 .../gcc/3.3.5/specs-mipsel-soft-float         |  145 +
 .../gcc/3.3.5/specs-powerpc-soft-float        |  352 ++
 .../toolchain/gcc/3.4.0/100-uclibc-conf.patch |  442 ++
 .../gcc/3.4.0/200-uclibc-locale.patch         | 3246 +++++++++++++++
 .../gcc/3.4.0/arm-softfloat.patch.conditional |  256 ++
 .../toolchain/gcc/3.4.1/100-uclibc-conf.patch |  442 ++
 .../gcc/3.4.1/200-uclibc-locale.patch         | 3241 +++++++++++++++
 .../gcc/3.4.1/400-mips-delay-slot.patch       |   46 +
 .../gcc/3.4.1/800-arm-bigendian.patch         |   70 +
 .../gcc/3.4.1/810-arm-bigendian-uclibc.patch  |   27 +
 .../gcc/3.4.1/arm-softfloat.patch.conditional |  270 ++
 .../toolchain/gcc/3.4.2/100-uclibc-conf.patch |  442 ++
 .../gcc/3.4.2/200-uclibc-locale.patch         | 3246 +++++++++++++++
 .../gcc/3.4.2/300-libstdc++-pic.patch         |   47 +
 openwrt/toolchain/gcc/3.4.2/300-pr15526.patch |   53 +
 openwrt/toolchain/gcc/3.4.2/300-pr17541.patch |  234 ++
 openwrt/toolchain/gcc/3.4.2/300-pr17976.patch |  106 +
 .../gcc/3.4.2/400-mips-pr17565.patch          |  102 +
 .../gcc/3.4.2/401-ppc-eabi-typo.patch         |   20 +
 .../gcc/3.4.2/402-mips-pr17770.patch          |   12 +
 .../3.4.2/600-gcc34-arm-ldm-peephole.patch    |   79 +
 .../gcc/3.4.2/601-gcc34-arm-ldm.patch         |  119 +
 .../3.4.2/602-sdk-libstdc++-includes.patch    |   22 +
 .../toolchain/gcc/3.4.2/700-pr15068-fix.patch |   44 +
 .../gcc/3.4.2/800-arm-bigendian.patch         |   70 +
 .../gcc/3.4.2/810-arm-bigendian-uclibc.patch  |   27 +
 .../gcc/3.4.2/arm-softfloat.patch.conditional |  270 ++
 .../toolchain/gcc/3.4.3/100-uclibc-conf.patch |  442 ++
 .../gcc/3.4.3/200-uclibc-locale.patch         | 3246 +++++++++++++++
 .../gcc/3.4.3/300-libstdc++-pic.patch         |   47 +
 .../3.4.3/600-gcc34-arm-ldm-peephole.patch    |   79 +
 .../gcc/3.4.3/601-gcc34-arm-ldm.patch         |  119 +
 .../3.4.3/602-sdk-libstdc++-includes.patch    |   22 +
 .../toolchain/gcc/3.4.3/700-pr15068-fix.patch |   44 +
 .../gcc/3.4.3/800-arm-bigendian.patch         |   70 +
 .../gcc/3.4.3/810-arm-bigendian-uclibc.patch  |   27 +
 .../gcc/3.4.3/arm-softfloat.patch.conditional |  270 ++
 openwrt/toolchain/gcc/Config.in               |   76 +
 openwrt/toolchain/gcc/Config.in.2             |    6 +
 openwrt/toolchain/gcc/Makefile.in             |   26 +
 openwrt/toolchain/gcc/gcc-uclibc-2.95.mk      |  277 ++
 openwrt/toolchain/gcc/gcc-uclibc-3.x.mk       |  321 ++
 .../toolchain/gcc/i386-gcc-soft-float.patch   |   61 +
 .../toolchain/gdb/5.3/050-debian-subset.patch |  633 +++
 openwrt/toolchain/gdb/5.3/100-uclibc.patch    |  154 +
 .../toolchain/gdb/6.1.1/100-uclibc-conf.patch |  290 ++
 .../gdb/6.1.1/200-uclibc-readline-conf.patch  |   15 +
 .../toolchain/gdb/6.2.1/100-uclibc-conf.patch |  290 ++
 .../gdb/6.2.1/200-uclibc-readline-conf.patch  |   15 +
 .../gdb/6.2.1/400-mips-coredump.patch         |   28 +
 .../toolchain/gdb/6.2/100-uclibc-conf.patch   |  290 ++
 .../gdb/6.2/200-uclibc-readline-conf.patch    |   15 +
 openwrt/toolchain/gdb/Config.in               |   49 +
 openwrt/toolchain/gdb/Makefile.in             |   10 +
 openwrt/toolchain/gdb/gdb.mk                  |  189 +
 openwrt/toolchain/patch-kernel.sh             |   53 +
 openwrt/toolchain/uClibc/Config.in            |   23 +
 openwrt/toolchain/uClibc/uClibc.config        |  150 +
 openwrt/toolchain/uClibc/uClibc.config-locale |  142 +
 openwrt/toolchain/uClibc/uclibc.mk            |  167 +
 280 files changed, 69781 insertions(+)
 create mode 100644 openwrt/.cvsignore
 create mode 100644 openwrt/.defconfig
 create mode 100644 openwrt/Config.in
 create mode 100644 openwrt/Makefile
 create mode 100644 openwrt/docs/README
 create mode 100644 openwrt/docs/buildroot-documentation.html
 create mode 100644 openwrt/docs/stylesheet.css
 create mode 100644 openwrt/package/Config.in
 create mode 100644 openwrt/package/Makefile.in
 create mode 100644 openwrt/package/bridge/Config.in
 create mode 100644 openwrt/package/bridge/Makefile.in
 create mode 100644 openwrt/package/bridge/bridge.mk
 create mode 100644 openwrt/package/bridge/bridge.patch
 create mode 100644 openwrt/package/busybox/Config.in
 create mode 100644 openwrt/package/busybox/Makefile.in
 create mode 100644 openwrt/package/busybox/busybox.config
 create mode 100644 openwrt/package/busybox/busybox.mk
 create mode 100644 openwrt/package/config/.cvsignore
 create mode 100644 openwrt/package/config/Config.in
 create mode 100644 openwrt/package/config/Kconfig-language.txt
 create mode 100644 openwrt/package/config/Makefile
 create mode 100644 openwrt/package/config/Makefile.in
 create mode 100644 openwrt/package/config/checklist.c
 create mode 100644 openwrt/package/config/colors.h
 create mode 100644 openwrt/package/config/conf.c
 create mode 100644 openwrt/package/config/confdata.c
 create mode 100644 openwrt/package/config/dialog.h
 create mode 100644 openwrt/package/config/expr.c
 create mode 100644 openwrt/package/config/expr.h
 create mode 100644 openwrt/package/config/inputbox.c
 create mode 100644 openwrt/package/config/lex.zconf.c_shipped
 create mode 100644 openwrt/package/config/lkc.h
 create mode 100644 openwrt/package/config/lkc_proto.h
 create mode 100644 openwrt/package/config/mconf.c
 create mode 100644 openwrt/package/config/menu.c
 create mode 100644 openwrt/package/config/menubox.c
 create mode 100644 openwrt/package/config/msgbox.c
 create mode 100644 openwrt/package/config/symbol.c
 create mode 100644 openwrt/package/config/textbox.c
 create mode 100644 openwrt/package/config/util.c
 create mode 100644 openwrt/package/config/yesno.c
 create mode 100644 openwrt/package/config/zconf.l
 create mode 100644 openwrt/package/config/zconf.tab.c_shipped
 create mode 100644 openwrt/package/config/zconf.tab.h_shipped
 create mode 100644 openwrt/package/config/zconf.y
 create mode 100644 openwrt/package/dnsmasq/Config.in
 create mode 100644 openwrt/package/dnsmasq/Makefile.in
 create mode 100644 openwrt/package/dnsmasq/dnsmasq.mk
 create mode 100644 openwrt/package/dnsmasq/dnsmasq1-100-bugfix.patch
 create mode 100644 openwrt/package/dnsmasq/dnsmasq2-100-config.patch
 create mode 100644 openwrt/package/dropbear_sshd/Config.in
 create mode 100644 openwrt/package/dropbear_sshd/Makefile.in
 create mode 100644 openwrt/package/dropbear_sshd/dropbear-init.patch
 create mode 100644 openwrt/package/dropbear_sshd/dropbear_sshd.mk
 create mode 100644 openwrt/package/iptables/Config.in
 create mode 100644 openwrt/package/iptables/Makefile.in
 create mode 100644 openwrt/package/iptables/iptables.mk
 create mode 100644 openwrt/package/linux/Config.in
 create mode 100644 openwrt/package/linux/Makefile.in
 create mode 100644 openwrt/package/linux/kernel-patches/001-linux-2.4.patch.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/003_kbuild_fixes.diff.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/004_386_emu.diff.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/005_modularize_vesafb.diff.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/006_init_unshare.diff.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/007-scsi_add_remove_single.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/008-ieee1394-fix.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/009-always-inline.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/010-optimize-for-size.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/012-x86-check_gcc.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/015_cramfs_initrd.diff.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/017-printk.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/018-slab-loop-init.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/041-changeloop.patch.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/042-loopfixes.patch.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/044-streaming_io.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/062-silence-blk-queue.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/063-silence.kbd.patch.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/064-shutup-md.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/067-squashfs2.patch.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/076-nmap-freak.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/077-orinoco-0.13e.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/078-hostap.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/079-jiffies64.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/089-no-touch-makedep.bz2
 create mode 100644 openwrt/package/linux/kernel-patches/100_VERSION.bz2
 create mode 100644 openwrt/package/linux/linux.config
 create mode 100644 openwrt/package/linux/linux.mk
 create mode 100644 openwrt/package/sed/Config.in
 create mode 100644 openwrt/package/sed/Makefile.in
 create mode 100644 openwrt/package/sed/sed.mk
 create mode 100755 openwrt/package/sed/sedcheck.sh
 create mode 100644 openwrt/target/Config.in
 create mode 100644 openwrt/target/Makefile.in
 create mode 100644 openwrt/target/default/device_table.txt
 create mode 100644 openwrt/target/default/skel.tar.gz
 create mode 100644 openwrt/target/default/target_skeleton/etc/TZ
 create mode 100644 openwrt/target/default/target_skeleton/etc/fstab
 create mode 100644 openwrt/target/default/target_skeleton/etc/group
 create mode 100644 openwrt/target/default/target_skeleton/etc/hostname
 create mode 100644 openwrt/target/default/target_skeleton/etc/hosts
 create mode 100755 openwrt/target/default/target_skeleton/etc/init.d/S20urandom
 create mode 100755 openwrt/target/default/target_skeleton/etc/init.d/S40network
 create mode 100755 openwrt/target/default/target_skeleton/etc/init.d/rcS
 create mode 100644 openwrt/target/default/target_skeleton/etc/inittab
 create mode 100644 openwrt/target/default/target_skeleton/etc/inputrc
 create mode 100644 openwrt/target/default/target_skeleton/etc/issue
 create mode 100644 openwrt/target/default/target_skeleton/etc/network/interfaces
 create mode 100644 openwrt/target/default/target_skeleton/etc/passwd
 create mode 100644 openwrt/target/default/target_skeleton/etc/profile
 create mode 100644 openwrt/target/default/target_skeleton/etc/protocols
 create mode 100644 openwrt/target/default/target_skeleton/etc/random-seed
 create mode 100644 openwrt/target/default/target_skeleton/etc/resolv.conf
 create mode 100644 openwrt/target/default/target_skeleton/etc/securetty
 create mode 100644 openwrt/target/default/target_skeleton/etc/services
 create mode 100644 openwrt/target/default/target_skeleton/etc/shadow
 create mode 100644 openwrt/target/default/target_skeleton/root/.bash_history
 create mode 100644 openwrt/target/default/target_skeleton/root/.bash_logout
 create mode 100644 openwrt/target/default/target_skeleton/root/.bash_profile
 create mode 100644 openwrt/target/default/target_skeleton/root/.bashrc
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/a/ansi
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/d/dumb
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/l/linux
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/r/rxvt
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/s/screen
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/s/screen-w
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/s/sun
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt100
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt220
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt52
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/x/xterm
 create mode 100644 openwrt/target/default/target_skeleton/usr/share/terminfo/x/xterm-xfree86
 create mode 100755 openwrt/target/default/target_skeleton/usr/share/udhcpc/default.script
 create mode 100644 openwrt/target/jffs2/Config.in
 create mode 100644 openwrt/target/jffs2/Makefile.in
 create mode 100644 openwrt/target/jffs2/jffs2root.mk
 create mode 100644 openwrt/toolchain/Config.in
 create mode 100644 openwrt/toolchain/Makefile.in
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.6/001-debian.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.6/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.6/200-build_modules.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/001-debian.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/200-build_modules.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.7/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.8/001-debian.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.8/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.14.90.0.8/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.1.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.1.1/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.1/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.2/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.3/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.3/500-branch-likely.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.90.0.3/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.1/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.2/500-branch-likely.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.2/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.2/700-binutils-20040817-linkonce.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.2/701-binutils-dup-sections.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.91.0.2/702-binutils-skip-comments.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/300-001_ld_makefile_patch.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/300-006_better_file_error.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/300-012_check_ldrunpath_length.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/300-117_mips_symbolic_link.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/300-120_mips_xgot_multigot_workaround.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.92.0.2/702-binutils-skip-comments.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.1/300-001_ld_makefile_patch.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.1/300-006_better_file_error.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.1/300-012_check_ldrunpath_length.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.1/300-120_mips_xgot_multigot_workaround.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.1/702-binutils-skip-comments.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2/300-001_ld_makefile_patch.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2/300-006_better_file_error.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2/300-012_check_ldrunpath_length.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2/300-120_mips_xgot_multigot_workaround.patch
 create mode 100644 openwrt/toolchain/binutils/2.15.94.0.2/702-binutils-skip-comments.patch
 create mode 100644 openwrt/toolchain/binutils/2.15/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/binutils/2.15/600-arm-textrel.patch
 create mode 100644 openwrt/toolchain/binutils/Config.in
 create mode 100644 openwrt/toolchain/binutils/Makefile.in
 create mode 100644 openwrt/toolchain/binutils/binutils.mk
 create mode 100644 openwrt/toolchain/ccache/Config.in
 create mode 100644 openwrt/toolchain/ccache/Config.in.2
 create mode 100644 openwrt/toolchain/ccache/Makefile.in
 create mode 100644 openwrt/toolchain/ccache/ccache.mk
 create mode 100644 openwrt/toolchain/gcc/2.95/050-debian-subset.patch.bz2
 create mode 100644 openwrt/toolchain/gcc/2.95/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/2.95/STLport-4.5.3.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.3/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.3/110-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.3/120-softfloat.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.3/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.3/500-loop.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.4/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.4/110-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.4/120-softfloat.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.4/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.4/500-loop.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.4/specs-arm-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.4/specs-mips-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.4/specs-mipsel-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.4/specs-powerpc-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.5/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.5/110-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.5/120-softfloat.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.5/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.5/500-loop.patch
 create mode 100644 openwrt/toolchain/gcc/3.3.5/specs-arm-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.5/specs-mips-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.5/specs-mipsel-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.3.5/specs-powerpc-soft-float
 create mode 100644 openwrt/toolchain/gcc/3.4.0/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.0/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.0/arm-softfloat.patch.conditional
 create mode 100644 openwrt/toolchain/gcc/3.4.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.1/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.1/400-mips-delay-slot.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.1/800-arm-bigendian.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.1/810-arm-bigendian-uclibc.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.1/arm-softfloat.patch.conditional
 create mode 100644 openwrt/toolchain/gcc/3.4.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/300-libstdc++-pic.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/300-pr15526.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/300-pr17541.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/300-pr17976.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/400-mips-pr17565.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/401-ppc-eabi-typo.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/402-mips-pr17770.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/600-gcc34-arm-ldm-peephole.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/601-gcc34-arm-ldm.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/602-sdk-libstdc++-includes.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/700-pr15068-fix.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/800-arm-bigendian.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/810-arm-bigendian-uclibc.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.2/arm-softfloat.patch.conditional
 create mode 100644 openwrt/toolchain/gcc/3.4.3/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/200-uclibc-locale.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/300-libstdc++-pic.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/600-gcc34-arm-ldm-peephole.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/601-gcc34-arm-ldm.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/602-sdk-libstdc++-includes.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/700-pr15068-fix.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/800-arm-bigendian.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/810-arm-bigendian-uclibc.patch
 create mode 100644 openwrt/toolchain/gcc/3.4.3/arm-softfloat.patch.conditional
 create mode 100644 openwrt/toolchain/gcc/Config.in
 create mode 100644 openwrt/toolchain/gcc/Config.in.2
 create mode 100644 openwrt/toolchain/gcc/Makefile.in
 create mode 100644 openwrt/toolchain/gcc/gcc-uclibc-2.95.mk
 create mode 100644 openwrt/toolchain/gcc/gcc-uclibc-3.x.mk
 create mode 100644 openwrt/toolchain/gcc/i386-gcc-soft-float.patch
 create mode 100644 openwrt/toolchain/gdb/5.3/050-debian-subset.patch
 create mode 100644 openwrt/toolchain/gdb/5.3/100-uclibc.patch
 create mode 100644 openwrt/toolchain/gdb/6.1.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gdb/6.1.1/200-uclibc-readline-conf.patch
 create mode 100644 openwrt/toolchain/gdb/6.2.1/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gdb/6.2.1/200-uclibc-readline-conf.patch
 create mode 100644 openwrt/toolchain/gdb/6.2.1/400-mips-coredump.patch
 create mode 100644 openwrt/toolchain/gdb/6.2/100-uclibc-conf.patch
 create mode 100644 openwrt/toolchain/gdb/6.2/200-uclibc-readline-conf.patch
 create mode 100644 openwrt/toolchain/gdb/Config.in
 create mode 100644 openwrt/toolchain/gdb/Makefile.in
 create mode 100644 openwrt/toolchain/gdb/gdb.mk
 create mode 100755 openwrt/toolchain/patch-kernel.sh
 create mode 100644 openwrt/toolchain/uClibc/Config.in
 create mode 100644 openwrt/toolchain/uClibc/uClibc.config
 create mode 100644 openwrt/toolchain/uClibc/uClibc.config-locale
 create mode 100644 openwrt/toolchain/uClibc/uclibc.mk

diff --git a/openwrt/.cvsignore b/openwrt/.cvsignore
new file mode 100644
index 0000000000..60e1751b2e
--- /dev/null
+++ b/openwrt/.cvsignore
@@ -0,0 +1,6 @@
+dl
+.config*
+.tmpconfig.h
+root_fs*
+build_*
+toolchain_build_*
diff --git a/openwrt/.defconfig b/openwrt/.defconfig
new file mode 100644
index 0000000000..aba64ee53a
--- /dev/null
+++ b/openwrt/.defconfig
@@ -0,0 +1,113 @@
+#
+# Automatically generated make config: don't edit
+#
+BR2_HAVE_DOT_CONFIG=y
+# BR2_arm is not set
+# BR2_armeb is not set
+# BR2_cris is not set
+# BR2_i386 is not set
+# BR2_m68k is not set
+# BR2_mips is not set
+BR2_mipsel=y
+# BR2_powerpc is not set
+# BR2_sh3 is not set
+# BR2_sh3eb is not set
+# BR2_sh4 is not set
+# BR2_sh4eb is not set
+# BR2_sparc is not set
+BR2_ARCH="mipsel"
+
+#
+# Build options
+#
+BR2_WGET="wget --passive-ftp"
+# BR2_TAR_VERBOSITY is not set
+BR2_STAGING_DIR="$(BUILD_DIR)/staging_dir"
+BR2_JLEVEL=1
+
+#
+# Toolchain Options
+#
+
+#
+# uClibc Options
+#
+BR2_UCLIBC_VERSION_SNAPSHOT=y
+BR2_USE_UCLIBC_SNAPSHOT="snapshot"
+# BR2_ENABLE_LOCALE is not set
+
+#
+# Binutils Options
+#
+# BR2_BINUTILS_VERSION_2_14_90_0_6 is not set
+# BR2_BINUTILS_VERSION_2_14_90_0_7 is not set
+# BR2_BINUTILS_VERSION_2_14_90_0_8 is not set
+# BR2_BINUTILS_VERSION_2_15 is not set
+# BR2_BINUTILS_VERSION_2_15_90_0_1 is not set
+# BR2_BINUTILS_VERSION_2_15_90_0_1_1 is not set
+# BR2_BINUTILS_VERSION_2_15_90_0_2 is not set
+# BR2_BINUTILS_VERSION_2_15_90_0_3 is not set
+# BR2_BINUTILS_VERSION_2_15_91_0_1 is not set
+# BR2_BINUTILS_VERSION_2_15_91_0_2 is not set
+# BR2_BINUTILS_VERSION_2_15_92_0_2 is not set
+# BR2_BINUTILS_VERSION_2_15_94_0_1 is not set
+BR2_BINUTILS_VERSION_2_15_94_0_2=y
+BR2_BINUTILS_VERSION="2.15.94.0.2"
+
+#
+# Gcc Options
+#
+# BR2_GCC_VERSION_2_95 is not set
+# BR2_GCC_VERSION_3_3_3 is not set
+# BR2_GCC_VERSION_3_3_4 is not set
+# BR2_GCC_VERSION_3_3_5 is not set
+# BR2_GCC_VERSION_3_4_0 is not set
+# BR2_GCC_VERSION_3_4_1 is not set
+# BR2_GCC_VERSION_3_4_2 is not set
+BR2_GCC_VERSION_3_4_3=y
+BR2_GCC_VERSION="3.4.3"
+BR2_GCC_USE_SJLJ_EXCEPTIONS="--enable-sjlj-exceptions"
+BR2_EXTRA_GCC_CONFIG_OPTIONS=""
+# BR2_INSTALL_LIBSTDCPP is not set
+
+#
+# Ccache Options
+#
+BR2_CCACHE=y
+
+#
+# Gdb Options
+#
+# BR2_PACKAGE_GDB is not set
+# BR2_PACKAGE_GDB_SERVER is not set
+
+#
+# Common Toolchain Options
+#
+# BR2_ENABLE_MULTILIB is not set
+# BR2_LARGEFILE is not set
+BR2_TARGET_OPTIMIZATION="-Os -pipe"
+
+#
+# OpenWrt Package Selection
+#
+
+#
+# The default set
+#
+BR2_PACKAGE_BUSYBOX=y
+BR2_PACKAGE_BUSYBOX_SNAPSHOT=y
+# BR2_PACKAGE_DNSMASQ is not set
+# BR2_PACKAGE_LINUX is not set
+# BR2_PACKAGE_IPTABLES is not set
+# BR2_PACKAGE_BRIDGE is not set
+
+#
+# Suggested Extras
+#
+# BR2_PACKAGE_DROPBEAR_SSHD is not set
+
+#
+# Target Filesystem
+#
+# BR2_TARGET_ROOTFS_JFFS2 is not set
diff --git a/openwrt/Config.in b/openwrt/Config.in
new file mode 100644
index 0000000000..2b335e68b4
--- /dev/null
+++ b/openwrt/Config.in
@@ -0,0 +1,109 @@
+#
+
+mainmenu "Buildroot2 Configuration"
+
+config BR2_HAVE_DOT_CONFIG
+	bool
+	default y
+
+choice
+	prompt "Target Architecture"
+	default BR2_i386
+	help
+	  Stuff
+
+config BR2_arm
+	bool "arm"
+
+config BR2_armeb
+	bool "armeb"
+
+config BR2_cris
+	bool "cris"
+
+config BR2_i386
+	bool "i386"
+
+config BR2_m68k
+	bool "m68k"
+
+config BR2_mips
+	bool "mips"
+
+config BR2_mipsel
+	bool "mipsel"
+
+config BR2_powerpc
+	bool "powerpc"
+
+config BR2_sh3
+	bool "sh3"
+
+config BR2_sh3eb
+	bool "sh3eb"
+
+config BR2_sh4
+	bool "sh4"
+
+config BR2_sh4eb
+	bool "sh4eb"
+
+config BR2_sparc
+	bool "sparc"
+
+endchoice
+
+config BR2_ARCH
+	string
+	default "arm"     if BR2_arm
+	default "armeb"   if BR2_armeb
+	default "cris"    if BR2_cris
+	default "i386"    if BR2_i386
+	default "m68k"    if BR2_m68k
+	default "mips"    if BR2_mips
+	default "mipsel"  if BR2_mipsel
+	default "powerpc" if BR2_powerpc
+	default "sh3"     if BR2_sh3
+	default "sh3eb"   if BR2_sh3eb
+	default "sh4"     if BR2_sh4
+	default "sh4eb"   if BR2_sh4eb
+	default "sparc"   if BR2_sparc
+
+
+menu "Build options"
+
+config BR2_WGET
+	string "Wget command"
+	default "wget --passive-ftp -nd"
+
+config BR2_TAR_VERBOSITY
+	bool "Tar verbose"
+	default n
+
+config BR2_STAGING_DIR
+	string "Toolchain and header file location?"
+	default "$(BUILD_DIR)/staging_dir"
+	help
+	    This is the location where the toolchain will be installed.
+	    Since the toolchain will not work if it is moved from this
+	    location, it is important for people wishing to package up
+	    a uClibc toolchain that this be set to the location in which
+	    the toolchain will be used.
+
+	    Most people will leave this set to the default value of
+	    "$(BUILD_DIR)/staging_dir".
+
+config BR2_JLEVEL
+	int "Number of jobs to run simultaneously"
+	default "1"
+	help
+	    Number of jobs to run simultanesouly
+
+endmenu
+
+source "toolchain/Config.in"
+
+source "package/Config.in"
+
+source "target/Config.in"
+
diff --git a/openwrt/Makefile b/openwrt/Makefile
new file mode 100644
index 0000000000..5434b0e7f1
--- /dev/null
+++ b/openwrt/Makefile
@@ -0,0 +1,191 @@
+# Makefile for buildroot2
+#
+# Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You 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
+#
+
+#--------------------------------------------------------------
+# Just run 'make menuconfig', configure stuff, then run 'make'.
+# You shouldn't need to mess with anything beyond this point...
+#--------------------------------------------------------------
+TOPDIR=./
+CONFIG_CONFIG_IN = Config.in
+CONFIG_DEFCONFIG = .defconfig
+CONFIG = package/config
+
+noconfig_targets := menuconfig config oldconfig randconfig \
+	defconfig allyesconfig allnoconfig release tags
+
+# Pull in the user's configuration file
+ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
+-include $(TOPDIR).config
+endif
+
+ifeq ($(BR2_TAR_VERBOSITY),y)
+TAR_OPTIONS=-xvf
+else
+TAR_OPTIONS=-xf
+endif
+
+ifeq ($(strip $(BR2_HAVE_DOT_CONFIG)),y)
+
+#############################################################
+#
+# The list of stuff to build for the target toolchain
+# along with the packages to build for the target.
+#
+##############################################################
+TARGETS:=linux-headers host-sed uclibc-configured binutils gcc uclibc-target-utils
+include toolchain/Makefile.in
+include toolchain/*/Makefile.in
+include package/Makefile.in
+include package/*/Makefile.in
+include target/Makefile.in
+include target/*/Makefile.in
+
+#############################################################
+#
+# You should probably leave this stuff alone unless you know
+# what you are doing.
+#
+#############################################################
+
+
+
+all:   world
+
+# In this section, we need .config
+include .config.cmd
+
+TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))
+TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS))
+
+world: $(DL_DIR) $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) $(TARGETS)
+
+.PHONY: all world clean distclean source $(TARGETS) \
+	$(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) \
+	$(DL_DIR) $(BUILD_DIR) $(TOOL_BUILD_DIR) $(STAGING_DIR)
+
+include toolchain/*/*.mk
+include package/*/*.mk
+include target/*/*.mk
+
+#############################################################
+#
+# staging and target directories do NOT list these as
+# dependancies anywhere else
+#
+#############################################################
+$(DL_DIR):
+	@mkdir -p $(DL_DIR)
+
+$(BUILD_DIR):
+	@mkdir -p $(BUILD_DIR)
+
+$(TOOL_BUILD_DIR):
+	@mkdir -p $(TOOL_BUILD_DIR)
+
+$(STAGING_DIR):
+	@mkdir -p $(STAGING_DIR)/lib
+	@mkdir -p $(STAGING_DIR)/include
+	@mkdir -p $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)
+	@ln -sf ../lib $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib
+
+$(TARGET_DIR):
+	zcat target/default/skel.tar.gz | tar -C $(BUILD_DIR) -xf -
+	cp -a target/default/target_skeleton/* $(TARGET_DIR)/
+	-find $(TARGET_DIR) -type d -name CVS -exec rm -rf {} \; > /dev/null 2>&1
+
+source: $(TARGETS_SOURCE)
+
+#############################################################
+#
+# Cleanup and misc junk
+#
+#############################################################
+clean:
+	rm -rf $(BUILD_DIR) $(IMAGE).*
+	@$(MAKE) -C $(CONFIG) clean
+
+distclean: clean
+	rm -rf $(DL_DIR) $(TOOL_BUILD_DIR) .config
+
+sourceball:
+	rm -rf $(BUILD_DIR)
+	set -e; \
+	cd ..; \
+	rm -f buildroot.tar.bz2; \
+	tar -cvf buildroot.tar buildroot; \
+	bzip2 -9 buildroot.tar; \
+
+
+else # ifeq ($(strip $(BR2_HAVE_DOT_CONFIG)),y)
+
+all: menuconfig
+
+# configuration
+# ---------------------------------------------------------------------------
+
+$(CONFIG)/conf:
+	$(MAKE) -C $(CONFIG) conf
+	-@if [ ! -f .config ] ; then \
+		cp $(CONFIG_DEFCONFIG) .config; \
+	fi
+$(CONFIG)/mconf:
+	$(MAKE) -C $(CONFIG) ncurses conf mconf
+	-@if [ ! -f .config ] ; then \
+		cp $(CONFIG_DEFCONFIG) .config; \
+	fi
+
+menuconfig: $(CONFIG)/mconf
+	@$(CONFIG)/mconf $(CONFIG_CONFIG_IN)
+
+config: $(CONFIG)/conf
+	@$(CONFIG)/conf $(CONFIG_CONFIG_IN)
+
+oldconfig: $(CONFIG)/conf
+	@$(CONFIG)/conf -o $(CONFIG_CONFIG_IN)
+
+randconfig: $(CONFIG)/conf
+	@$(CONFIG)/conf -r $(CONFIG_CONFIG_IN)
+
+allyesconfig: $(CONFIG)/conf
+	#@$(CONFIG)/conf -y $(CONFIG_CONFIG_IN)
+	#sed -i -e "s/^CONFIG_DEBUG.*/# CONFIG_DEBUG is not set/" .config
+	@$(CONFIG)/conf -o $(CONFIG_CONFIG_IN)
+
+allnoconfig: $(CONFIG)/conf
+	@$(CONFIG)/conf -n $(CONFIG_CONFIG_IN)
+
+defconfig: $(CONFIG)/conf
+	@$(CONFIG)/conf -d $(CONFIG_CONFIG_IN)
+
+#############################################################
+#
+# Cleanup and misc junk
+#
+#############################################################
+clean:
+	@$(MAKE) -C $(CONFIG) clean
+
+distclean: clean
+
+endif # ifeq ($(strip $(BR2_HAVE_DOT_CONFIG)),y)
+
+.PHONY: dummy subdirs release distclean clean config oldconfig \
+	menuconfig tags check test depend
+
+
diff --git a/openwrt/docs/README b/openwrt/docs/README
new file mode 100644
index 0000000000..0c7fb4cd4b
--- /dev/null
+++ b/openwrt/docs/README
@@ -0,0 +1,18 @@
+To build and use the buildroot stuff, do the following:
+
+1) run 'make'
+2) select which packages you wish to compile
+3) run 'make'
+4) wait while it compiles
+5) Use your shiney new root filesystem.  Depending on which sortof
+    root filesystem you selecter, you may want to loop mount it,
+    chroot into it, loop mount it and then nfs mount that on your
+    target device, burn it to flash, or whatever is appropriate
+    for your target system.
+
+You do not need to be root to build or run buildroot.  Have fun!
+
+ -Erik
+
+Please feed suggestions, bug reports, insults, and bribes back to:
+	Erik Andersen <andersen@codepoet.org>
diff --git a/openwrt/docs/buildroot-documentation.html b/openwrt/docs/buildroot-documentation.html
new file mode 100644
index 0000000000..8e6c08d047
--- /dev/null
+++ b/openwrt/docs/buildroot-documentation.html
@@ -0,0 +1,644 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Buildroot - Usage and documentation</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+  <link rel="stylesheet" type="text/css" href="stylesheet.css" />
+</head>
+
+<body>
+  <div class="main">
+    <div class="titre">
+      <h1>Buildroot</h1>
+    </div>
+
+    <p>Usage and documentation by Thomas Petazzoni. Contributions from
+    Karsten Kruse, Ned Ludd, Martin Herren.</p>
+
+    <p><small>Last modification : $Id$</small></p>
+
+    <ul>
+      <li><a href="#about">About Buildroot</a></li>
+      <li><a href="#download">Obtaining Buildroot</a></li>
+      <li><a href="#using">Using Buildroot</a></li>
+      <li><a href="#custom_targetfs">Customizing the target filesystem</a></li>
+      <li><a href="#custom_busybox">Customizing the Busybox
+      configuration</a></li>
+      <li><a href="#custom_uclibc">Customizing the uClibc
+      configuration</a></li>
+      <li><a href="#buildroot_innards">How Buildroot works</a></li>
+      <li><a href="#using_toolchain">Using the uClibc toolchain</a></li>
+      <li><a href="#toolchain_standalone">Using the uClibc toolchain
+      outside of Buildroot</a></li>
+      <li><a href="#downloaded_packages">Location of downloaded packages</a></li>
+      <li><a href="#add_software">Extending Buildroot with more
+      Software</a></li>
+      <li><a href="#links">Ressources</a></li>
+    </ul>
+
+    <h2><a name="about" id="about"></a>About Buildroot</h2>
+
+    <p>Buildroot is a set of Makefiles and patches that allows to easily
+    generate both a cross-compilation toolchain and a root filesystem for your
+    target. The cross-compilation toolchain uses uClibc (<a href=
+    "http://www.uclibc.org/">http://www.uclibc.org/</a>), a tiny C standard
+    library.</p>
+
+    <p>Buildroot is useful mainly for people working with embedded systems.
+    Embedded systems often use processors that are not the regular x86
+    processors everyone is used to have on his PC. It can be PowerPC
+    processors, MIPS processors, ARM processors, etc.</p>
+
+    <p>A compilation toolchain is the set of tools that allows to
+    compile code for your system. It consists of a compiler (in our
+    case, <code>gcc</code>), binary utils like assembler and linker
+    (in our case, <code>binutils</code>) and a C standard library (for
+    example <a href="http://www.gnu.org/software/libc/libc.html">GNU
+    Libc</a>, <a href="http://www.uclibc.org">uClibc</a> or <a
+    href="http://www.fefe.de/dietlibc/">dietlibc</a>). The system
+    installed on your development station certainly already has a
+    compilation toolchain that you can use to compile application that
+    runs on your system. If you're using a PC, your compilation
+    toolchain runs on an x86 processor and generates code for a x86
+    processor. Under most Linux systems, the compilation toolchain
+    uses the GNU libc as C standard library.  This compilation
+    toolchain is called the "host compilation toolchain", and more
+    generally, the machine on which it is running, and on which you're
+    working is called the "host system". The compilation toolchain is
+    provided by your distribution, and Buildroot has nothing to do
+    with it.</p>
+
+    <p>As said above, the compilation toolchain that comes with your system
+    runs and generates code for the processor of your host system. As your
+    embedded system has a different processor, you need a cross-compilation
+    toolchain: it's a compilation toolchain that runs on your host system but
+    that generates code for your target system (and target processor). For
+    example, if your host system uses x86 and your target system uses ARM, the
+    regular compilation toolchain of your host runs on x86 and generates code
+    for x86, while the cross-compilation toolchain runs on x86 and generates
+    code for ARM.</p>
+
+    <p>Even if your embedded system uses a x86 processor, you might interested
+    in Buildroot, for two reasons:</p>
+
+    <ul>
+      <li>The compilation toolchain of your host certainly uses the GNU Libc
+      which is a complete but huge C standard library. Instead of using GNU
+      Libc on your target system, you can use uClibc which is a tiny C standard
+      library. If you want to use this C library, then you need a compilation
+      toolchain to generate binaries linked with it. Buildroot can do it for
+      you.</li>
+
+      <li>Buildroot automates the building of a root filesystem with all needed
+      tools like busybox. It makes it much easier than doing it by hand.</li>
+    </ul>
+
+    <p>You might wonder why such a tool is needed when you can compile
+    <code>gcc</code>, <code>binutils</code>, uClibc and all the tools by hand.
+    Of course, doing so is possible. But dealing with all configure options,
+    with all problems of every <code>gcc</code> or <code>binutils</code>
+    version it very time-consuming and uninteresting. Buildroot automates this
+    process through the use of Makefiles, and has a collection of patches for
+    each <code>gcc</code> and <code>binutils</code> version to make them work
+    on most architectures.</p>
+
+    <h2><a name="download" id="download"></a>Obtaining Buildroot</h2>
+
+    <p>Buildroot is available as daily CVS snapshots or directly using
+    CVS.</p>
+
+    <p>The latest snapshot is always available at <a
+    href="http://uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2">http://uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2</a>,
+    and previous snapshots are also available at <a
+    href="http://uclibc.org/downloads/snapshots/">http://uclibc.org/downloads/snapshots/</a>.</p>
+
+    <p>To download Buildroot using CVS, you can simply follow
+    the rules described on the "Accessing CVS"-page (<a href=
+    "http://www.uclibc.org/cvs_anon.html">http://www.uclibc.org/cvs_anon.html</a>)
+    of the uClibc website (<a href=
+    "http://www.uclibc.org">http://www.uclibc.org</a>), and download the
+    <code>buildroot</code> CVS module. For the impatient, here's a quick
+    recipe:</p>
+
+ <pre>
+ $ cvs -d:pserver:anonymous@uclibc.org:/var/cvs login
+ $ cvs -z3 -d:pserver:anonymous@uclibc.org:/var/cvs co buildroot
+</pre>
+
+    <h2><a name="using" id="using"></a>Using Buildroot</h2>
+
+    <p>Buildroot has a nice configuration tool similar to the one you can find
+    in the Linux Kernel (<a href=
+    "http://www.kernel.org/">http://www.kernel.org/</a>) or in Busybox
+    (<a href="http://www.busybox.org/">http://www.busybox.org/</a>). Note that
+    you can run everything as a normal user. There is no need to be root to
+    configure and use Buildroot. The first step is to run the configuration
+    assistant:</p>
+
+<pre>
+ $ make menuconfig
+</pre>
+
+    <p>For each entry of the configuration tool, you can find associated help
+    that describes the purpose of the entry.</p>
+
+    <p>Once everything is configured, the configuration tool has generated a
+    <code>.config</code> file that contains the description of your
+    configuration. It will be used by the Makefiles to do what's needed.</p>
+
+    <p>Let's go:</p>
+
+<pre>
+ $ make
+</pre>
+
+    <p>This command will download, configure and compile all the selected
+    tools, and finally generate a target filesystem. The target filesystem will
+    be named <code>root_fs_ARCH.EXT</code> where <code>ARCH</code> is your
+    architecture and <code>EXT</code> depends on the type of target filesystem
+    selected in the <code>Target options</code> section of the configuration
+    tool.</p>
+
+    <h2><a name="custom_targetfs" id="custom_targetfs"></a>Customizing the
+    target filesystem</h2>
+
+    <p>There are two ways to customize the resulting target filesystem:</p>
+
+    <ul>
+      <li>Customize the target filesystem directly, and rebuild the image. The
+      target filesystem is available under <code>build_ARCH/root/</code> where
+      <code>ARCH</code> is the chosen target architecture. You can simply make
+      your changes here, and run make afterwards, which will rebuild the target
+      filesystem image. This method allows to do everything on the target
+      filesystem, but if you decide to completely rebuild your toolchain and
+      tools, these changes will be lost.</li>
+
+      <li>Customize the target filesystem skeleton, available under
+      <code>target/default/target_skeleton/</code>. You can customize
+      configuration files or other stuff here. However, the full file hierarchy
+      is not yet present, because it's created during the compilation process.
+      So you can't do everything on this target filesystem skeleton, but
+      changes to it remains even you completely rebuild the cross-compilation
+      toolchain and the tools.<br />
+      You can also customize the <code>target/default/device_table.txt</code>
+      file which is used by the tools that generate the target filesystem image
+      to properly set permissions and create device nodes. The
+      <code>target/default/skel.tar.gz</code> file contains the main
+      directories of a root filesystem and there is no obvious reason for which
+      it should be changed. These main directories are in an tarball inside of
+      inside the skeleton because it contains symlinks that would be broken
+      otherwise.</li>
+    </ul>
+
+    <h2><a name="custom_busybox" id="custom_busybox"></a>Customizing the
+    Busybox configuration</h2>
+
+    <p>Busybox is very configurable, and you may want to customize it. You can
+    follow these simple steps to do it. It's not an optimal way, but it's
+    simple and it works.</p>
+
+    <ol>
+      <li>Make a first compilation of buildroot with busybox without trying to
+      customize it.</li>
+
+      <li>Go into <code>build_ARCH/busybox/</code> and run <code>make
+      menuconfig</code>. The nice configuration tool appears and you can
+      customize everything.</li>
+
+      <li>Copy the <code>.config</code> file to
+      <code>package/busybox/busybox.config</code> so that your customized
+      configuration will remains even if you remove the cross-compilation
+      toolchain.</li>
+
+      <li>Run the compilation of buildroot again.</li>
+    </ol>
+
+    <p>Otherwise, you can simply change the
+    <code>package/busybox/busybox.config</code> file if you know the options
+    you want to change without using the configuration tool.</p>
+
+    <h2><a name="custom_uclibc" id="custom_uclibc"></a>Customizing the uClibc
+    configuration</h2>
+
+    <p>Just like <a href="#custom_busybox">BusyBox</a>, <a
+    href="http://www.uclibc.org">uClibc</a> offers a lot of
+    configuration options. They allow to select various
+    functionalities, depending on your needs and limitations.</p>
+
+    <p>The easiest way to modify the configuration of uClibc is to
+    follow these steps :</p>
+
+    <ol>
+
+      <li>Make a first compilation of buildroot without trying to
+      customize uClibc.</li>
+
+      <li>Go into the directory
+      <code>toolchain_build_ARCH/uClibc/</code> and run <code>make
+      menuconfig</code>. The nice configuration assistant, similar to
+      the one used in the Linux Kernel or in Buildroot appears. Make
+      your configuration as appropriate.</li>
+
+      <li>Copy the <code>.config</code> file to
+      <code>toolchain/uClibc/uClibc.config</code> or
+      <code>toolchain/uClibc/uClibc.config-locale</code>. The former
+      is used if you haven't selected locale support in Buildroot
+      configuration, and the latter is used if you have selected
+      locale support.</li>
+
+      <li>Run the compilation of Buildroot again</li>
+
+    </ol>
+
+    <p>Otherwise, you can simply change
+    <code>toolchain/uClibc/uClibc.config</code> or
+    <code>toolchain/uClibc/uClibc.config-locale</code> without running
+    the configuration assistant.</p>
+
+    <h2><a name="buildroot_innards" id="buildroot_innards"></a>How Buildroot
+    works</h2>
+
+    <p>As said above, Buildroot is basically a set of Makefiles that download,
+    configure and compiles software with the correct options. It also includes
+    some patches for various software, mainly the ones involved in the
+    cross-compilation tool chain (<code>gcc</code>, <code>binutils</code> and
+    uClibc).</p>
+
+    <p>There is basically one Makefile per software, and they are named with
+    the <code>.mk</code> extension. Makefiles are split into three
+    sections:</p>
+
+    <ul>
+      <li><b>package</b> (in the <code>package/</code> directory) contains the
+      Makefiles and associated files for all user-space tools that Buildroot
+      can compile and add to the target root filesystem. There is one
+      sub-directory per tool.</li>
+
+      <li><b>toolchain</b> (in the <code>toolchain/</code> directory) contains
+      the Makefiles and associated files for all software related to the
+      cross-compilation toolchain : <code>binutils</code>, <code>ccache</code>,
+      <code>gcc</code>, <code>gdb</code>, <code>kernel-headers</code> and
+      <code>uClibc</code>.</li>
+
+      <li><b>target</b> (in the <code>target</code> directory) contains the
+      Makefiles and associated files for software related to the generation of
+      the target root filesystem image. Four types of filesystems are supported
+      : ext2, jffs2, cramfs and squashfs. For each of them, there's a
+      sub-directory with the required files. There is also a
+      <code>default/</code> directory that contains the target filesystem
+      skeleton.</li>
+    </ul>
+
+    <p>Each directory contains at least 3 files :</p>
+
+    <ul>
+      <li><code>something.mk</code> is the Makefile that downloads, configures,
+      compiles and installs the software <code>something</code>.</li>
+
+      <li><code>Config.in</code> is a part of the configuration tool
+      description file. It describes the option related to the current
+      software.</li>
+
+      <li><code>Makefile.in</code> is a part of Makefile that sets various
+      variables according to the configuration given through the configuration
+      tool. For most tools it simply involves adding the name of the tool to
+      the <code>TARGETS</code> variable.</li>
+    </ul>
+
+    <p>The main Makefile do the job through the following steps (once the
+    configuration is done):</p>
+
+    <ol>
+      <li>Create the download directory (<code>dl/</code> by default). This is
+      where the tarballs will be downloaded. It is interesting to know that the
+      tarballs are in this directory because it may be useful to save them
+      somewhere to avoid further downloads.</li>
+
+      <li>Create the build directory (<code>build_ARCH/</code> by default,
+      where <code>ARCH</code> is your architecture). This is where all
+      user-space tools while be compiled.</li>
+
+      <li>Create the toolchain build directory
+      (<code>toolchain_build_ARCH/</code> by default, where <code>ARCH</code>
+      is your architecture). This is where the cross compilation toolchain will
+      be compiled.</li>
+
+      <li>Setup the staging directory (<code>build_ARCH/staging_dir/</code> by
+      default). This is where the cross-compilation toolchain will be
+      installed. If you want to use the same cross-compilation toolchain for
+      other purposes, such as compiling third-party applications, you can add
+      <code>build_ARCH/staging_dir/bin</code> to your PATH, and then use
+      <code>arch-linux-gcc</code> to compile your application. In order to
+      setup this staging directory, it first removes it, and then it creates
+      various subdirectories and symlinks inside it.</li>
+
+      <li>Create the target directory (<code>build_ARCH/root/</code> by
+      default) and the target filesystem skeleton. This directory will contain
+      the final root filesystem. To setup it up, it first deletes it, then it
+      uncompress the <code>target/default/skel.tar.gz</code> file to create the
+      main subdirectories and symlinks, copies the skeleton available in
+      <code>target/default/target_skeleton</code> and then removes useless
+      <code>CVS/</code> directories.</li>
+
+      <li>Make the <code>TARGETS</code> dependency. This is where all the job
+      is done : all <code>Makefile.in</code> files "subscribe" targets into
+      this global variable, so that the needed tools gets compiled.</li>
+    </ol>
+
+    <h2><a name="using_toolchain" id="using_toolchain"></a>Using the
+    uClibc toolchain</h2>
+
+    <p>You may want to compile your own programs or other software
+    that are not packaged in Buildroot. In order to do this, you can
+    use the toolchain that was generated by Buildroot.</p>
+
+    <p>The toolchain generated by Buildroot by default is located in
+    <code>build_ARCH/staging_dir/</code>. The simplest way to use it
+    is to add <code>build_ARCH/staging_dir/bin/</code> to your PATH
+    environnement variable, and then to use
+    <code>arch-linux-gcc</code>, <code>arch-linux-objdump</code>,
+    <code>arch-linux-ld</code>, etc.</p>
+
+    <p>For example, you may add the following to your
+    <code>.bashrc</code> (considering you're building for the MIPS
+    architecture and that Buildroot is located in
+    <code>~/buildroot/</code>) :</p>
+
+<pre>
+export PATH=$PATH:~/buildroot/build_mips/bin/
+</pre>
+
+    <p>Then you can simply do :</p>
+
+<pre>
+mips-linux-gcc -o foo foo.c
+</pre>
+
+    <p><b>Important</b> : do not try to move the toolchain to an other
+    directory, it won't work. There are some hard-coded paths in the
+    <i>gcc</i> configuration. If the default toolchain directory
+    doesn't suit your needs, please refer to the <a
+    href="#toolchain_standalone">Using the uClibc toolchain outside of
+    buildroot</a> section.</p>
+
+    <h2><a name="toolchain_standalone" id="toolchain_standalone"></a>Using the
+    uClibc toolchain outside of buildroot</h2>
+
+    <p>By default, the cross-compilation toolchain is generated inside
+    <code>build_ARCH/staging_dir/</code>. But sometimes, it may be useful to
+    install it somewhere else, so that it can be used to compile other programs
+    or by other users. Moving the <code>build_ARCH/staging_dir/</code>
+    directory elsewhere is <b>not possible</b>, because they are some hardcoded
+    paths in the toolchain configuration.</p>
+
+    <p>If you want to use the generated toolchain for other purposes,
+    you can configure Buildroot to generate it elsewhere using the
+    option of the configuration tool : <code>Build options ->
+    Toolchain and header file location</code>, which defaults to
+    <code>$(BUILD_DIR)/staging_dir/</code>.</p>
+
+    <h2><a name="downloaded_packages"
+    id="downloaded_packages"></a>Location of downloaded packages</h2>
+
+    <p>It might be useful to know that the various tarballs that are
+    downloaded by the <i>Makefiles</i> are all stored in the
+    <code>DL_DIR</code> which by default is the <code>dl</code>
+    directory. It's useful for example if you want to keep a complete
+    version of Buildroot which is know to be working with the
+    associated tarballs. This will allow you to regenerate the
+    toolchain and the target filesystem with exactly the same
+    versions.</p>
+
+    <h2><a name="add_software" id="add_software"></a>Extending Buildroot with
+    more software</h2>
+
+    <p>This section will only consider the case in which you want to
+    add user-space software.</p>
+
+    <h3>Package directory</h3>
+
+    <p>First of all, create a directory under the <code>package</code>
+    directory for your software, for example <code>foo</code>.</p>
+
+    <h3><code>Config.in</code> file</h3>
+
+    <p>Then, create a file named <code>Config.in</code>. This file
+    will contain the portion of options description related to our
+    <code>foo</code> software that will be used and displayed in the
+    configuration tool. It should basically contain :</p>
+
+<pre>
+config BR2_PACKAGE_FOO
+        bool "foo"
+        default n
+        help
+	     This is a comment that explains what foo is.
+</pre>
+
+    <p>Of course, you can add other options to configure particular
+    things in your software.</p>
+
+    <h3><code>Makefile.in</code> file</h3>
+
+    <p>Then, write a <code>Makefile.in</code> file. Basically, this is
+    a very short <i>Makefile</i> that adds the name of the software to
+    the list of <code>TARGETS</code> that Buildroot will generate. In
+    fact, the name of the software is the the identifier of the target
+    inside the real <i>Makefile</i> that will do everything (download,
+    compile, install), and that we study below. Back to
+    <code>Makefile.in</code>, here is an example :</p>
+
+<pre>
+ifeq ($(strip $(BR2_PACKAGE_FOO)),y)
+TARGETS+=foo
+endif
+</pre>
+
+   <p>As you can see, this short <i>Makefile</i> simply adds the
+   target <code>foo</code> to the list of targets handled by Buildroot
+   if software <i>foo</i> was selected using the configuration tool.</p>
+
+   <h3>The real <i>Makefile</i></h3>
+
+   <p>Finally, here's the hardest part. Create a file named
+   <code>foo.mk</code>. It will contain the <i>Makefile</i> rules that
+   are in charge of downloading, configuring, compiling and installing
+   the software. Below is an example that we will comment
+   afterwards.</p>
+
+<pre>
+     1  #############################################################
+     2  #
+     3  # foo
+     4  #
+     5  #############################################################
+     6  FOO_VERSION:=1.0
+     7  FOO_SOURCE:=less-$(FOO_VERSION).tar.gz
+     8  FOO_SITE:=http://www.foosoftware.org/downloads
+     9  FOO_DIR:=$(BUILD_DIR)/less-$(FOO_VERSION)
+    10  FOO_BINARY:=foo
+    11  FOO_TARGET_BINARY:=usr/bin/foo
+    12
+    13  $(DL_DIR)/$(FOO_SOURCE):
+    14          $(WGET) -P $(DL_DIR) $(FOO_SITE)/$(FOO_SOURCE)
+    15
+    16  $(FOO_DIR)/.source: $(DL_DIR)/$(FOO_SOURCE)
+    17          zcat $(DL_DIR)/$(FOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+    18          touch $(FOO_DIR)/.source
+    19
+    20  $(FOO_DIR)/.configured: $(FOO_DIR)/.source
+    21          (cd $(FOO_DIR); \
+    22                  $(TARGET_CONFIGURE_OPTS) \
+    23                  CFLAGS="$(TARGET_CFLAGS)" \
+    24                  ./configure \
+    25                  --target=$(GNU_TARGET_NAME) \
+    26                  --host=$(GNU_TARGET_NAME) \
+    27                  --build=$(GNU_HOST_NAME) \
+    28                  --prefix=/usr \
+    29                  --sysconfdir=/etc \
+    30          );
+    31          touch $(FOO_DIR)/.configured;
+    32
+    33  $(FOO_DIR)/$(FOO_BINARY): $(FOO_DIR)/.configured
+    34          $(MAKE) CC=$(TARGET_CC) -C $(FOO_DIR)
+    35
+    36  $(TARGET_DIR)/$(FOO_TARGET_BINARY): $(FOO_DIR)/$(FOO_BINARY)
+    37          $(MAKE) prefix=$(TARGET_DIR)/usr -C $(FOO_DIR) install
+    38          rm -Rf $(TARGET_DIR)/usr/man
+    39
+    40  foo: uclibc ncurses $(TARGET_DIR)/$(FOO_TARGET_BINARY)
+    41
+    42  foo-source: $(DL_DIR)/$(FOO_SOURCE)
+    43
+    44  foo-clean:
+    45          $(MAKE) prefix=$(TARGET_DIR)/usr -C $(FOO_DIR) uninstall
+    46          -$(MAKE) -C $(FOO_DIR) clean
+    47
+    48  foo-dirclean:
+    49          rm -rf $(FOO_DIR)
+    50
+</pre>
+
+    <p>First of all, this <i>Makefile</i> example works for a single
+    binary software. For other software such as libraries or more
+    complex stuff with multiple binaries, it should be adapted. Look at
+    the other <code>*.mk</code> files in the <code>package</code>
+    directory.</p>
+
+    <p>At lines 6-11, a couple of useful variables are defined :</p>
+
+    <ul>
+
+     <li><code>FOO_VERSION</code> : The version of <i>foo</i> that
+     should be downloaded.</li>
+
+     <li><code>FOO_SOURCE</code> : The name of the tarball of
+     <i>foo</i> on the download website of FTP site. As you can see
+     <code>FOO_VERSION</code> is used.</li>
+
+     <li><code>FOO_SITE</code> : The HTTP or FTP site from which
+     <i>foo</i> archive is downloaded. It must include the complete
+     path to the directory where <code>FOO_SOURCE</code> can be
+     found.</li>
+
+     <li><code>FOO_DIR</code> : The directory into which the software
+     will be configured and compiled. Basically, it's a subdirectory
+     of <code>BUILD_DIR</code> which is created upon decompression of
+     the tarball.</li>
+
+     <li><code>FOO_BINARY</code> : Software binary name. As said
+     previously, this is an example for a single binary software.</li>
+
+     <li><code>FOO_TARGET_BINARY</code> : The full path of the binary
+     inside the target filesystem.</li>
+
+    </ul>
+
+    <p>Lines 13-14 defines a target that downloads the tarball from
+    the remote site to the download directory
+    (<code>DL_DIR</code>).</p>
+
+    <p>Lines 16-18 defines a target and associated rules that
+    uncompress the downloaded tarball. As you can see, this target
+    depends on the tarball file, so that the previous target (line
+    13-14) is called before executing the rules of the current
+    target. Uncompressing is followed by <i>touching</i> a hidden file
+    to mark the software has having been uncompressed. This trick is
+    used everywhere in Buildroot <i>Makefile</i> to split steps
+    (download, uncompress, configure, compile, install) while still
+    having correct dependencies.</p>
+
+    <p>Lines 20-31 defines a target and associated rules that
+    configures the software. It depends on the previous target (the
+    hidden <code>.source</code> file) so that we are sure the software has
+    been uncompressed. In order to configure it, it basically runs the
+    well-known <code>./configure</code>script. As we may be doing
+    cross-compilation, <code>target</code>, <code>host</code> and
+    <code>build</code> arguments are given. The prefix is also set to
+    <code>/usr</code>, not because the software will be installed in
+    <code>/usr</code> on your host system, but in the target
+    filesystem. Finally it creates a <code>.configured</code> file to
+    mark the software as configured.</p>
+
+    <p>Lines 33-34 defines a target and a rule that compiles the
+    software. This target will create the binary file in the
+    compilation directory, and depends on the software being already
+    configured (hence the reference to the <code>.configured</code>
+    file). It basically runs <code>make</code> inside the source
+    directory.</p>
+
+    <p>Lines 36-38 defines a target and associated rules that install
+    the software inside the target filesystem. It depends on the
+    binary file in the source directory, to make sure the software has
+    been compiled. It uses the <code>install</code> target of the
+    software <code>Makefile</code> by passing a <code>prefix</code>
+    argument, so that the <code>Makefile</code> doesn't try to install
+    the software inside host <code>/usr</code> but inside target
+    <code>/usr</code>. After the installation, the
+    <code>/usr/man</code> directory inside the target filesystem is
+    removed to save space.</p>
+
+    <p>Line 40 defines the main target of the software, the one
+    referenced in the <code>Makefile.in</code> file. This targets
+    should first of all depends on the dependecies of the software (in
+    our example, <i>uclibc</i> and <i>ncurses</i>), and then to the
+    final binary. This last dependency will call all previous
+    dependencies in the right order. </p>
+
+    <p>Line 42 defines a simple target that only downloads the code
+    source. This is not used during normal operation of Buildroot, but
+    might be useful.</p>
+
+    <p>Lignes 44-46 define a simple target to clean the software build
+    by calling the <i>Makefiles</i> with the appropriate option.</p>
+
+    <p>Lines 48-49 define a simple target to completely remove the
+    directory in which the software was uncompressed, configured and
+    compiled.</p>
+
+    <h3>Conclusion</h3>
+
+    <p>As you can see, adding a software to buildroot is simply a
+    matter of writing a <i>Makefile</i> using an already existing
+    example and to modify it according to the compilation process of
+    the software.</p>
+
+    <p>If you package software that might be useful for other persons,
+    don't forget to send a patch to Buildroot developers !</p>
+
+     <h2><a name="links" id="links"></a>Ressources</h2>
+
+    <p>To learn more about Buildroot you can visit these
+    websites:</p>
+
+    <ul>
+      <li><a href="http://www.uclibc.org/">http://www.uclibc.org/</a></li>
+      <li><a href="http://www.busybox.net/">http://www.busybox.net/</a></li>
+    </ul>
+
+  </div>
+</body>
+</html>
diff --git a/openwrt/docs/stylesheet.css b/openwrt/docs/stylesheet.css
new file mode 100644
index 0000000000..2c36417823
--- /dev/null
+++ b/openwrt/docs/stylesheet.css
@@ -0,0 +1,65 @@
+body {
+	margin: 0px 0px 0px 0px;
+	color: white;
+	background-color: #93c6f9;
+	font: 12pt/18pt georgia;
+}
+
+div.main {
+	margin: 10px 10px 10px 10px;
+	padding: 10px 10px 10px 10px;
+	color: black;
+	background-color: white;
+}
+
+div.titre {
+	text-align: center;
+	background-color: #336699;
+	color: white;
+	padding: 10px 10px 10px 10px;
+}
+
+h1 {
+	text-align: center;
+	font: 26pt georgia; 
+	letter-spacing: 3px; 
+}
+
+h2 {
+	padding: 5px 5px 5px 5px;
+	background-color: #c2e0ff;
+	color: #336699;
+}
+
+a:link, a:visited { 
+	font-weight: bold; 
+	text-decoration: none; 
+	color: #336699;
+}
+
+a:hover, a:active { 
+	text-decoration: underline; 
+	color: #9685BA;
+}
+
+h3 { 
+	font: italic normal 14pt georgia; 
+	letter-spacing: 1px; 
+	margin-bottom: 0px; 
+	margin-left: 10px;
+	margin-right: 10px;
+	color: #336699;
+}
+
+p {
+	margin-left: 10px;
+	margin-right: 10px;
+	text-align: justify;
+}
+
+pre {
+  border-left: 3px #aaa solid;
+  margin-left: 1em;
+  padding: 0 1em;
+  color: #888;
+}
\ No newline at end of file
diff --git a/openwrt/package/Config.in b/openwrt/package/Config.in
new file mode 100644
index 0000000000..30f45ad142
--- /dev/null
+++ b/openwrt/package/Config.in
@@ -0,0 +1,15 @@
+#
+
+menu "OpenWrt Package Selection"
+
+comment "The default set"
+source "package/busybox/Config.in"
+source "package/dnsmasq/Config.in"
+source "package/linux/Config.in"
+source "package/iptables/Config.in"
+source "package/bridge/Config.in"
+
+comment "Suggested Extras"
+source "package/dropbear_sshd/Config.in"
+
+endmenu
diff --git a/openwrt/package/Makefile.in b/openwrt/package/Makefile.in
new file mode 100644
index 0000000000..a59ab973fb
--- /dev/null
+++ b/openwrt/package/Makefile.in
@@ -0,0 +1,64 @@
+MAKE1=make
+MAKE=make -j$(BR2_JLEVEL)
+
+# Strip off the annoying quoting
+ARCH:=$(strip $(subst ",, $(BR2_ARCH)))
+#"
+WGET:=$(strip $(subst ",, $(BR2_WGET)))
+#"
+
+ifneq ($(BR2_LARGEFILE),y)
+DISABLE_LARGEFILE= --disable-largefile
+endif
+TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
+
+HOSTCC:=gcc
+BASE_DIR:=${shell pwd}
+DL_DIR:=$(BASE_DIR)/dl
+#PATCH_DIR=$(BASE_DIR)/sources/patches
+BUILD_DIR:=$(BASE_DIR)/build_$(ARCH)$(ARCH_FPU_SUFFIX)
+TARGET_DIR:=$(BUILD_DIR)/root
+TOOL_BUILD_DIR=$(BASE_DIR)/toolchain_build_$(ARCH)$(ARCH_FPU_SUFFIX)
+# Strip off the annoying quoting
+STAGING_DIR:=$(strip $(subst ",, $(BR2_STAGING_DIR)))
+#"
+TARGET_PATH=$(STAGING_DIR)/bin:/bin:/sbin:/usr/bin:/usr/sbin
+IMAGE:=$(BASE_DIR)/root_fs_$(ARCH)$(ARCH_FPU_SUFFIX)
+REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux-uclibc
+GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux
+KERNEL_CROSS=$(STAGING_DIR)/bin/$(OPTIMIZE_FOR_CPU)-linux-uclibc-
+TARGET_CROSS=$(STAGING_DIR)/bin/$(OPTIMIZE_FOR_CPU)-linux-uclibc-
+TARGET_CC=$(TARGET_CROSS)gcc
+STRIP=$(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note
+
+
+HOST_ARCH:=$(shell $(HOSTCC) -dumpmachine | sed -e s'/-.*//' \
+	-e 's/sparc.*/sparc/' \
+	-e 's/arm.*/arm/g' \
+	-e 's/m68k.*/m68k/' \
+	-e 's/ppc/powerpc/g' \
+	-e 's/v850.*/v850/g' \
+	-e 's/sh[234]/sh/' \
+	-e 's/mips-.*/mips/' \
+	-e 's/mipsel-.*/mipsel/' \
+	-e 's/cris.*/cris/' \
+	-e 's/i[3-9]86/i386/' \
+	)
+GNU_HOST_NAME:=$(HOST_ARCH)-pc-linux-gnu
+TARGET_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \
+		AR=$(TARGET_CROSS)ar \
+		AS=$(TARGET_CROSS)as \
+		LD=$(TARGET_CROSS)ld \
+		NM=$(TARGET_CROSS)nm \
+		CC=$(TARGET_CROSS)gcc \
+		GCC=$(TARGET_CROSS)gcc \
+		CXX=$(TARGET_CROSS)g++ \
+		RANLIB=$(TARGET_CROSS)ranlib
+
+ifeq ($(ENABLE_LOCALE),true)
+DISABLE_NLS:=
+else
+DISABLE_NLS:=--disable-nls
+endif
+
+
diff --git a/openwrt/package/bridge/Config.in b/openwrt/package/bridge/Config.in
new file mode 100644
index 0000000000..8a5ebce0e9
--- /dev/null
+++ b/openwrt/package/bridge/Config.in
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_BRIDGE
+	bool "bridge"
+	default n
+	help
+	  Manage ethernet bridging; a way to connect networks together to 
+	  form a larger network.
+
+	  http://bridge.sourceforge.net/
diff --git a/openwrt/package/bridge/Makefile.in b/openwrt/package/bridge/Makefile.in
new file mode 100644
index 0000000000..5636052953
--- /dev/null
+++ b/openwrt/package/bridge/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_BRIDGE)),y)
+TARGETS+=bridge
+endif
diff --git a/openwrt/package/bridge/bridge.mk b/openwrt/package/bridge/bridge.mk
new file mode 100644
index 0000000000..7865b6e308
--- /dev/null
+++ b/openwrt/package/bridge/bridge.mk
@@ -0,0 +1,61 @@
+#############################################################
+#
+# bridgeutils - User Space Program For Controling Bridging
+#
+#############################################################
+#
+BRIDGE_SOURCE_URL=http://umn.dl.sourceforge.net/sourceforge/bridge/
+BRIDGE_SOURCE=bridge-utils-1.0.4.tar.gz
+BRIDGE_BUILD_DIR=$(BUILD_DIR)/bridge-utils-1.0.4
+BRIDGE_TARGET_BINARY:=usr/sbin/brctl
+
+$(DL_DIR)/$(BRIDGE_SOURCE):
+	 $(WGET) -P $(DL_DIR) $(BRIDGE_SOURCE_URL)/$(BRIDGE_SOURCE)
+
+$(BRIDGE_BUILD_DIR)/.unpacked: $(DL_DIR)/$(BRIDGE_SOURCE)
+	zcat $(DL_DIR)/$(BRIDGE_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	patch -p1 -d $(BRIDGE_BUILD_DIR) < package/bridge/bridge.patch
+	touch $(BRIDGE_BUILD_DIR)/.unpacked
+
+$(BRIDGE_BUILD_DIR)/.configured: $(BRIDGE_BUILD_DIR)/.unpacked
+	(cd $(BRIDGE_BUILD_DIR); rm -rf config.cache; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--libexecdir=/usr/lib \
+		--sysconfdir=/etc \
+		--datadir=/usr/share \
+		--localstatedir=/var \
+		--mandir=/usr/man \
+		--infodir=/usr/info \
+		$(DISABLE_NLS) \
+		--with-linux=$(LINUX_DIR) \
+	);
+	touch  $(BRIDGE_BUILD_DIR)/.configured
+
+$(BRIDGE_BUILD_DIR)/brctl/brctl: $(BRIDGE_BUILD_DIR)/.configured
+	$(MAKE) -C $(BRIDGE_BUILD_DIR)
+
+$(TARGET_DIR)/$(BRIDGE_TARGET_BINARY): $(BRIDGE_BUILD_DIR)/brctl/brctl
+	cp -af $(BRIDGE_BUILD_DIR)/brctl/brctl $(TARGET_DIR)/$(BRIDGE_TARGET_BINARY)
+	$(STRIP) $(TARGET_DIR)/$(BRIDGE_TARGET_BINARY)
+	#cp -af $(BRIDGE_BUILD_DIR)/brctl/brctld $(TARGET_DIR)/usr/sbin/
+	#$(STRIP) $(TARGET_DIR)/usr/sbin/brctld
+
+bridge: linux $(TARGET_DIR)/$(BRIDGE_TARGET_BINARY)
+
+bridge-source: $(DL_DIR)/$(BRIDGE_SOURCE)
+
+bridge-clean:
+	#$(MAKE) DESTDIR=$(TARGET_DIR) CC=$(TARGET_CC) -C $(BRIDGE_BUILD_DIR) uninstall
+	-$(MAKE) -C $(BRIDGE_BUILD_DIR) clean
+
+bridge-dirclean:
+	rm -rf $(BRIDGE_BUILD_DIR)
diff --git a/openwrt/package/bridge/bridge.patch b/openwrt/package/bridge/bridge.patch
new file mode 100644
index 0000000000..f44737750b
--- /dev/null
+++ b/openwrt/package/bridge/bridge.patch
@@ -0,0 +1,11 @@
+--- bridge-utils-0.9.6/libbridge/Makefile.in.dist	2004-03-01 20:55:52.000000000 -0600
++++ bridge-utils-0.9.6/libbridge/Makefile.in	2004-03-01 20:56:23.000000000 -0600
+@@ -5,7 +5,7 @@
+ RANLIB=@RANLIB@
+ 
+ CC=@CC@
+-CFLAGS = -Wall -g $(KERNEL_HEADERS)
++CFLAGS = -Wall -g @CFLAGS@ $(KERNEL_HEADERS)
+ 
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
diff --git a/openwrt/package/busybox/Config.in b/openwrt/package/busybox/Config.in
new file mode 100644
index 0000000000..320cb9b1c0
--- /dev/null
+++ b/openwrt/package/busybox/Config.in
@@ -0,0 +1,19 @@
+config BR2_PACKAGE_BUSYBOX
+	bool "busybox"
+	default y
+	help
+	  The Swiss Army Knife of embedded Linux.  It slices, it dices, it
+	  makes Julian Fries.
+
+	  http://busybox.net/
+
+	  Most people will answer Y.
+
+config BR2_PACKAGE_BUSYBOX_SNAPSHOT
+	bool "Use the daily snapshot of busybox?"
+	depends BR2_PACKAGE_BUSYBOX
+	default y
+	help
+	  Use the latest busybox CVS snapshot instead of release.
+
+	  For fun, you should say Y.
diff --git a/openwrt/package/busybox/Makefile.in b/openwrt/package/busybox/Makefile.in
new file mode 100644
index 0000000000..a8efafb8b4
--- /dev/null
+++ b/openwrt/package/busybox/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_BUSYBOX)),y)
+TARGETS+=busybox
+endif
diff --git a/openwrt/package/busybox/busybox.config b/openwrt/package/busybox/busybox.config
new file mode 100644
index 0000000000..7335635f70
--- /dev/null
+++ b/openwrt/package/busybox/busybox.config
@@ -0,0 +1,464 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# General Configuration
+#
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_FEATURE_VERBOSE_USAGE=y
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_LOCALE_SUPPORT is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SUID=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_SELINUX is not set
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+CONFIG_LFS=y
+# USING_CROSS_COMPILER is not set
+EXTRA_CFLAGS_OPTIONS=""
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+PREFIX="./_install"
+
+#
+# Archival Utilities
+#
+# CONFIG_AR is not set
+CONFIG_BUNZIP2=y
+# CONFIG_CPIO is not set
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_FROM is not set
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+CONFIG_CMP=y
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_DD=y
+CONFIG_DF=y
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_EXPR=y
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+CONFIG_HOSTID=y
+CONFIG_ID=y
+CONFIG_INSTALL=y
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+# CONFIG_MKFIFO is not set
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_OD is not set
+# CONFIG_PRINTF is not set
+CONFIG_PWD=y
+# CONFIG_REALPATH is not set
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_SEQ is not set
+CONFIG_SHA1SUM=y
+CONFIG_SLEEP=y
+# CONFIG_FEATURE_FANCY_SLEEP is not set
+CONFIG_SORT=y
+CONFIG_STTY=y
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TEST=y
+CONFIG_FEATURE_TEST_64=y
+
+#
+# test (forced enabled for use with shell)
+#
+CONFIG_TOUCH=y
+# CONFIG_TR is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+CONFIG_UUDECODE=y
+CONFIG_UUENCODE=y
+# CONFIG_WATCH is not set
+CONFIG_WC=y
+# CONFIG_WHO is not set
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for ls and more
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+# CONFIG_DUMPKMAP is not set
+# CONFIG_LOADFONT is not set
+# CONFIG_LOADKMAP is not set
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+# CONFIG_SETKEYCODES is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+CONFIG_START_STOP_DAEMON=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+# CONFIG_AWK is not set
+# CONFIG_PATCH is not set
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+# CONFIG_FEATURE_FIND_NEWER is not set
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+CONFIG_INIT=y
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_INITRD=y
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+CONFIG_FEATURE_EXTRA_QUIET=y
+CONFIG_HALT=y
+CONFIG_POWEROFF=y
+CONFIG_REBOOT=y
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_USE_BB_PWD_GRP is not set
+CONFIG_ADDGROUP=y
+CONFIG_DELGROUP=y
+CONFIG_ADDUSER=y
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
+# CONFIG_FEATURE_U_W_TMP is not set
+CONFIG_LOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_SU=y
+CONFIG_SULOGIN=y
+CONFIG_VLOCK=y
+
+#
+# Common options for adduser, deluser, login, su
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_CROND is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_LAST is not set
+# CONFIG_HDPARM is not set
+# CONFIG_MAKEDEVS is not set
+CONFIG_MT=y
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+CONFIG_FEATURE_2_4_MODULES=y
+# CONFIG_FEATURE_2_6_MODULES is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+CONFIG_LSMOD=y
+CONFIG_FEATURE_QUERY_MODULE_INTERFACE=y
+CONFIG_MODPROBE=y
+CONFIG_RMMOD=y
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+
+#
+# Networking Utilities
+#
+# CONFIG_FEATURE_IPV6 is not set
+# CONFIG_ARPING is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+# CONFIG_FEATURE_IFCONFIG_HW is not set
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
+# CONFIG_INETD is not set
+# CONFIG_IP is not set
+# CONFIG_IPCALC is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_NAMEIF is not set
+# CONFIG_NC is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
+# CONFIG_TELNETD is not set
+# CONFIG_TFTP is not set
+# CONFIG_TRACEROUTE is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+# CONFIG_FEATURE_WGET_IP6_LITERAL is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_UDHCPD=y
+CONFIG_UDHCPC=y
+CONFIG_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+CONFIG_PS=y
+# CONFIG_RENICE is not set
+# CONFIG_TOP is not set
+CONFIG_UPTIME=y
+# CONFIG_SYSCTL is not set
+
+#
+# Another Bourne-like Shell
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+CONFIG_ASH_MATH_SUPPORT_64=y
+# CONFIG_ASH_GETOPTS is not set
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+CONFIG_FEATURE_COMMAND_HISTORY=15
+CONFIG_FEATURE_COMMAND_SAVEHISTORY=y
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+# CONFIG_FEATURE_REMOTE_LOG is not set
+# CONFIG_FEATURE_IPC_SYSLOG is not set
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+# CONFIG_FBSET is not set
+# CONFIG_FDFLUSH is not set
+CONFIG_FDFORMAT=y
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_MINIX is not set
+CONFIG_GETOPT=y
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y
+# CONFIG_LOSETUP is not set
+# CONFIG_MKSWAP is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+CONFIG_SWAPONOFF=y
+CONFIG_MOUNT=y
+# CONFIG_NFSMOUNT is not set
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_MOUNT_FORCE is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
diff --git a/openwrt/package/busybox/busybox.mk b/openwrt/package/busybox/busybox.mk
new file mode 100644
index 0000000000..ae9abf1332
--- /dev/null
+++ b/openwrt/package/busybox/busybox.mk
@@ -0,0 +1,62 @@
+#############################################################
+#
+# busybox
+#
+#############################################################
+
+ifeq ($(strip $(BR2_PACKAGE_BUSYBOX_SNAPSHOT)),y)
+# Be aware that this changes daily....
+BUSYBOX_DIR:=$(BUILD_DIR)/busybox
+BUSYBOX_SOURCE:=busybox-snapshot.tar.bz2
+BUSYBOX_SITE:=http://www.busybox.net/downloads/snapshots
+else
+BUSYBOX_VER:=1.00
+BUSYBOX_DIR:=$(BUILD_DIR)/busybox-$(BUSYBOX_VER)
+BUSYBOX_SOURCE:=busybox-$(BUSYBOX_VER).tar.bz2
+BUSYBOX_SITE:=http://www.busybox.net/downloads
+endif
+BUSYBOX_UNZIP=bzcat
+BUSYBOX_CONFIG:=package/busybox/busybox.config
+
+$(DL_DIR)/$(BUSYBOX_SOURCE):
+	 $(WGET) -P $(DL_DIR) $(BUSYBOX_SITE)/$(BUSYBOX_SOURCE)
+
+busybox-source: $(DL_DIR)/$(BUSYBOX_SOURCE) $(BUSYBOX_CONFIG)
+
+$(BUSYBOX_DIR)/.unpacked: $(DL_DIR)/$(BUSYBOX_SOURCE)
+	$(BUSYBOX_UNZIP) $(DL_DIR)/$(BUSYBOX_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	# Allow busybox patches.
+	toolchain/patch-kernel.sh $(BUSYBOX_DIR) package/busybox busybox-\*.patch
+	touch $(BUSYBOX_DIR)/.unpacked
+
+$(BUSYBOX_DIR)/.configured: $(BUSYBOX_DIR)/.unpacked $(BUSYBOX_CONFIG)
+	cp $(BUSYBOX_CONFIG) $(BUSYBOX_DIR)/.config
+	$(SED) "s,^CROSS.*,CROSS=$(TARGET_CROSS)\n\
+		PREFIX=$(TARGET_DIR),;" $(BUSYBOX_DIR)/Rules.mak
+ifeq ($(BR2_LARGEFILE),y)
+	$(SED) "s/^.*CONFIG_LFS.*/CONFIG_LFS=y/;" $(BUSYBOX_DIR)/.config
+else
+	$(SED) "s/^.*CONFIG_LFS.*/CONFIG_LFS=n/;" $(BUSYBOX_DIR)/.config
+	$(SED) "s/^.*FDISK_SUPPORT_LARGE_DISKS.*/FDISK_SUPPORT_LARGE_DISKS=n/;" $(BUSYBOX_DIR)/.config
+endif
+	$(MAKE) CC=$(TARGET_CC) CROSS="$(TARGET_CROSS)" -C $(BUSYBOX_DIR) oldconfig
+	touch $(BUSYBOX_DIR)/.configured
+
+$(BUSYBOX_DIR)/busybox: $(BUSYBOX_DIR)/.configured
+	$(MAKE) CC=$(TARGET_CC) CROSS="$(TARGET_CROSS)" PREFIX="$(TARGET_DIR)" \
+		EXTRA_CFLAGS="$(TARGET_CFLAGS)" -C $(BUSYBOX_DIR)
+
+$(TARGET_DIR)/bin/busybox: $(BUSYBOX_DIR)/busybox
+	$(MAKE) CC=$(TARGET_CC) CROSS="$(TARGET_CROSS)" PREFIX="$(TARGET_DIR)" \
+		EXTRA_CFLAGS="$(TARGET_CFLAGS)" -C $(BUSYBOX_DIR) install
+	# Just in case
+	-chmod a+x $(TARGET_DIR)/usr/share/udhcpc/default.script
+
+busybox: uclibc $(TARGET_DIR)/bin/busybox
+
+busybox-clean:
+	rm -f $(TARGET_DIR)/bin/busybox
+	-$(MAKE) -C $(BUSYBOX_DIR) clean
+
+busybox-dirclean:
+	rm -rf $(BUSYBOX_DIR)
diff --git a/openwrt/package/config/.cvsignore b/openwrt/package/config/.cvsignore
new file mode 100644
index 0000000000..e8bf7a75ba
--- /dev/null
+++ b/openwrt/package/config/.cvsignore
@@ -0,0 +1,8 @@
+conf
+mconf
+lkc_defs.h
+lex.zconf.c
+zconf.tab.h
+zconf.tab.c
+lex.backup
+zconf.output
diff --git a/openwrt/package/config/Config.in b/openwrt/package/config/Config.in
new file mode 100644
index 0000000000..7b114d9dd5
--- /dev/null
+++ b/openwrt/package/config/Config.in
@@ -0,0 +1,8 @@
+#
+
+config BR2_PACKAGE_CONFIG
+	bool"config"
+	default n
+	help
+	  Add help text here.
+
diff --git a/openwrt/package/config/Kconfig-language.txt b/openwrt/package/config/Kconfig-language.txt
new file mode 100644
index 0000000000..493749b32a
--- /dev/null
+++ b/openwrt/package/config/Kconfig-language.txt
@@ -0,0 +1,255 @@
+Introduction
+------------
+
+The configuration database is collection of configuration options
+organized in a tree structure:
+
+	+- Code maturity level options
+	|  +- Prompt for development and/or incomplete code/drivers
+	+- General setup
+	|  +- Networking support
+	|  +- System V IPC
+	|  +- BSD Process Accounting
+	|  +- Sysctl support
+	+- Loadable module support
+	|  +- Enable loadable module support
+	|     +- Set version information on all module symbols
+	|     +- Kernel module loader
+	+- ...
+
+Every entry has its own dependencies. These dependencies are used
+to determine the visible of an entry. Any child entry is only
+visible if its parent entry is also visible.
+
+Menu entries
+------------
+
+Most entries define a config option, all other entries help to organize
+them. A single configuration option is defined like this:
+
+config MODVERSIONS
+	bool "Set version information on all module symbols"
+	depends MODULES
+	help
+	  Usually, modules have to be recompiled whenever you switch to a new
+	  kernel.  ...
+
+Every line starts with a key word and can be followed by multiple
+arguments.  "config" starts a new config entry. The following lines
+define attributes for this config option. Attributes can be the type of
+the config option, input prompt, dependencies, help text and default
+values. A config option can be defined multiple times with the same
+name, but every definition can have only a single input prompt and the
+type must not conflict.
+
+Menu attributes
+---------------
+
+A menu entry can have a number of attributes. Not all of them are
+applicable everywhere (see syntax).
+
+- type definition: "bool"/"tristate"/"string"/"hex"/"integer"
+  Every config option must have a type. There are only two basic types:
+  tristate and string, the other types base on these two. The type
+  definition optionally accepts an input prompt, so these two examples
+  are equivalent:
+
+	bool "Networking support"
+  and
+	bool
+	prompt "Networking support"
+
+- input prompt: "prompt" <prompt> ["if" <expr>]
+  Every menu entry can have at most one prompt, which is used to display
+  to the user. Optionally dependencies only for this prompt can be added
+  with "if".
+
+- default value: "default" <symbol> ["if" <expr>]
+  A config option can have any number of default values. If multiple
+  default values are visible, only the first defined one is active.
+  Default values are not limited to the menu entry, where they are
+  defined, this means the default can be defined somewhere else or be
+  overriden by an earlier definition.
+  The default value is only assigned to the config symbol if no other
+  value was set by the user (via the input prompt above). If an input
+  prompt is visible the default value is presented to the user and can
+  be overridden by him.
+  Optionally dependencies only for this default value can be added with
+  "if".
+
+- dependencies: "depends on"/"requires" <expr>
+  This defines a dependency for this menu entry. If multiple
+  dependencies are defined they are connected with '&&'. Dependencies
+  are applied to all other options within this menu entry (which also
+  accept "if" expression), so these two examples are equivalent:
+
+	bool "foo" if BAR
+	default y if BAR
+  and
+	depends on BAR
+	bool "foo"
+	default y
+
+- help text: "help"
+  This defines a help text. The end of the help text is determined by
+  the level indentation, this means it ends at the first line which has
+  a smaller indentation than the first line of the help text.
+
+
+Menu dependencies
+-----------------
+
+Dependencies define the visibility of a menu entry and can also reduce
+the input range of tristate symbols. The tristate logic used in the
+expressions uses one more state than normal boolean logic to express the
+module state. Dependency expressions have the following syntax:
+
+<expr> ::= <symbol>                             (1)
+           <symbol> '=' <symbol>                (2)
+           <symbol> '!=' <symbol>               (3)
+           '(' <expr> ')'                       (4)
+           '!' <expr>                           (5)
+           <expr> '||' <expr>                   (6)
+           <expr> '&&' <expr>                   (7)
+
+Expressions are listed in decreasing order of precedence.
+
+(1) Convert the symbol into an expression. Boolean and tristate symbols
+    are simply converted into the respective expression values. All
+    other symbol types result in 'n'.
+(2) If the values of both symbols are equal, it returns 'y',
+    otherwise 'n'.
+(3) If the values of both symbols are equal, it returns 'n',
+    otherwise 'y'.
+(4) Returns the value of the expression. Used to override precedence.
+(5) Returns the result of (2-/expr/).
+(6) Returns the result of min(/expr/, /expr/).
+(7) Returns the result of max(/expr/, /expr/).
+
+An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
+respectively for calculations). A menu entry becomes visible when it's
+expression evaluates to 'm' or 'y'.
+
+There are two type of symbols: constant and nonconstant symbols.
+Nonconstant symbols are the most common ones and are defined with the
+'config' statement. Nonconstant symbols consist entirely of alphanumeric
+characters or underscores.
+Constant symbols are only part of expressions. Constant symbols are
+always surrounded by single or double quotes. Within the quote any
+other character is allowed and the quotes can be escaped using '\'.
+
+Menu structure
+--------------
+
+The position of a menu entry in the tree is determined in two ways. First
+it can be specified explicitely:
+
+menu "Network device support"
+	depends NET
+
+config NETDEVICES
+	...
+
+endmenu
+
+All entries within the "menu" ... "endmenu" block become a submenu of
+"Network device support". All subentries inherit the dependencies from
+the menu entry, e.g. this means the dependency "NET" is added to the
+dependency list of the config option NETDEVICES.
+
+The other way to generate the menu structure is done by analyzing the
+dependencies. If a menu entry somehow depends on the previous entry, it
+can be made a submenu of it. First the the previous (parent) symbol must
+be part of the dependency list and then one of these two condititions
+must be true:
+- the child entry must become invisible, if the parent is set to 'n'
+- the child entry must only be visible, if the parent is visible
+
+config MODULES
+	bool "Enable loadable module support"
+
+config MODVERSIONS
+	bool "Set version information on all module symbols"
+	depends MODULES
+
+comment "module support disabled"
+	depends !MODULES
+
+MODVERSIONS directly depends on MODULES, this means it's only visible if
+MODULES is different from 'n'. The comment on the other hand is always
+visible when MODULES it's visible (the (empty) dependency of MODULES is
+also part of the comment dependencies).
+
+
+Kconfig syntax
+--------------
+
+The configuration file describes a series of menu entries, where every
+line starts with a keyword (except help texts). The following keywords
+end a menu entry:
+- config
+- choice/endchoice
+- comment
+- menu/endmenu
+- if/endif
+- source
+The first four also start the definition of a menu entry.
+
+config:
+
+	"config" <symbol>
+	<config options>
+
+This defines a config symbol <symbol> and accepts any of above
+attributes as options.
+
+choices:
+
+	"choice"
+	<choice options>
+	<choice block>
+	"endchoice"
+
+This defines a choice group and accepts any of above attributes as
+options. A choice can only be of type bool or tristate, while a boolean
+choice only allows a single config entry to be selected, a tristate
+choice also allows any number of config entries to be set to 'm'. This
+can be used if multiple drivers for a single hardware exists and only a
+single driver can be compiled/loaded into the kernel, but all drivers
+can be compiled as modules.
+A choice accepts another option "optional", which allows to set the
+choice to 'n' and no entry needs to be selected.
+
+comment:
+
+	"comment" <prompt>
+	<comment options>
+
+This defines a comment which is displayed to the user during the
+configuration process and is also echoed to the output files. The only
+possible options are dependencies.
+
+menu:
+
+	"menu" <prompt>
+	<menu options>
+	<menu block>
+	"endmenu"
+
+This defines a menu block, see "Menu structure" above for more
+information. The only possible options are dependencies.
+
+if:
+
+	"if" <expr>
+	<if block>
+	"endif"
+
+This defines an if block. The dependency expression <expr> is appended
+to all enclosed menu entries.
+
+source:
+
+	"source" <prompt>
+
+This reads the specified configuration file. This file is always parsed.
diff --git a/openwrt/package/config/Makefile b/openwrt/package/config/Makefile
new file mode 100644
index 0000000000..455a33d233
--- /dev/null
+++ b/openwrt/package/config/Makefile
@@ -0,0 +1,112 @@
+# Makefile for buildroot2
+#
+# Copyright (C) 2002-2004 Erik Andersen <andersen@codepoet.org>
+
+
+# Select the compiler needed to build binaries for your development system
+HOSTCC    = gcc
+HOSTCFLAGS= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
+# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc.
+LC_ALL:= C
+
+
+all: ncurses conf mconf
+
+LIBS = -lncurses
+ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h))
+	HOSTNCURSES += -I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"
+else
+ifeq (/usr/include/ncurses/curses.h, $(wildcard /usr/include/ncurses/curses.h))
+	HOSTNCURSES += -I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"
+else
+ifeq (/usr/local/include/ncurses/ncurses.h, $(wildcard /usr/local/include/ncurses/ncurses.h))
+	HOSTCFLAGS += -I/usr/local/include/ncurses -DCURSES_LOC="<ncurses.h>"
+else
+ifeq (/usr/local/include/ncurses/curses.h, $(wildcard /usr/local/include/ncurses/curses.h))
+	HOSTCFLAGS += -I/usr/local/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"
+else
+ifeq (/usr/include/ncurses.h, $(wildcard /usr/include/ncurses.h))
+	HOSTNCURSES += -DCURSES_LOC="<ncurses.h>"
+else
+	HOSTNCURSES += -DCURSES_LOC="<curses.h>"
+endif
+endif
+endif
+endif
+endif
+
+CONF_SRC  =conf.c
+MCONF_SRC =mconf.c checklist.c menubox.c textbox.c yesno.c inputbox.c util.c msgbox.c
+SHARED_SRC=zconf.tab.c
+SHARED_DEPS:=lkc.h lkc_proto.h lkc_defs.h expr.h zconf.tab.h
+CONF_OBJS =$(patsubst %.c,%.o, $(CONF_SRC))
+MCONF_OBJS=$(patsubst %.c,%.o, $(MCONF_SRC))
+SHARED_OBJS=$(patsubst %.c,%.o, $(SHARED_SRC))
+
+conf: $(CONF_OBJS) $(SHARED_OBJS)
+	$(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@
+
+mconf: $(MCONF_OBJS) $(SHARED_OBJS)
+	$(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@ $(LIBS)
+
+$(CONF_OBJS): %.o : %.c $(SHARED_DEPS)
+	$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
+
+$(MCONF_OBJS): %.o : %.c $(SHARED_DEPS)
+	$(HOSTCC) $(HOSTCFLAGS) $(HOSTNCURSES) -I. -c $< -o $@
+
+lkc_defs.h: lkc_proto.h
+	@sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
+
+###
+# The following requires flex/bison
+# By default we use the _shipped versions, uncomment the
+# following line if you are modifying the flex/bison src.
+#LKC_GENPARSER := 1
+
+ifdef LKC_GENPARSER
+
+%.tab.c %.tab.h: %.y
+	bison -t -d -v -b $* -p $(notdir $*) $<
+
+lex.%.c: %.l
+	flex -P$(notdir $*) -o$@ $<
+else
+
+lex.zconf.o: lex.zconf.c $(SHARED_DEPS)
+	$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
+
+lex.zconf.c: lex.zconf.c_shipped
+	cp lex.zconf.c_shipped lex.zconf.c
+
+zconf.tab.o: zconf.tab.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
+	$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
+
+zconf.tab.c: zconf.tab.c_shipped
+	cp zconf.tab.c_shipped zconf.tab.c
+
+zconf.tab.h: zconf.tab.h_shipped
+	cp zconf.tab.h_shipped zconf.tab.h
+endif
+
+.PHONY: ncurses
+
+ncurses:
+	@echo "main() {}" > lxtemp.c
+	@if $(HOSTCC) lxtemp.c $(LIBS) ; then \
+		rm -f lxtemp.c a.out; \
+	else \
+		rm -f lxtemp.c; \
+		echo -e "\007" ;\
+		echo ">> Unable to find the Ncurses libraries." ;\
+		echo ">>" ;\
+		echo ">> You must have Ncurses installed in order" ;\
+		echo ">> to use 'make menuconfig'" ;\
+		echo ;\
+		exit 1 ;\
+	fi
+
+clean:
+	rm -f *.o *~ core $(TARGETS) $(MCONF_OBJS) $(CONF_OBJS) \
+		conf mconf zconf.tab.c zconf.tab.h lex.zconf.c lkc_defs.h
+
diff --git a/openwrt/package/config/Makefile.in b/openwrt/package/config/Makefile.in
new file mode 100644
index 0000000000..addf1b9819
--- /dev/null
+++ b/openwrt/package/config/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_CONFIG)),y)
+TARGETS+=config
+endif
diff --git a/openwrt/package/config/checklist.c b/openwrt/package/config/checklist.c
new file mode 100644
index 0000000000..4dbd16616d
--- /dev/null
+++ b/openwrt/package/config/checklist.c
@@ -0,0 +1,372 @@
+/*
+ *  checklist.c -- implements the checklist box
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *     Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
+ *     Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+static int list_width, check_x, item_x, checkflag;
+
+/*
+ * Print list item
+ */
+static void
+print_item (WINDOW * win, const char *item, int status,
+	    int choice, int selected)
+{
+    int i;
+
+    /* Clear 'residue' of last item */
+    wattrset (win, menubox_attr);
+    wmove (win, choice, 0);
+    for (i = 0; i < list_width; i++)
+	waddch (win, ' ');
+
+    wmove (win, choice, check_x);
+    wattrset (win, selected ? check_selected_attr : check_attr);
+    if (checkflag == FLAG_CHECK)
+	wprintw (win, "[%c]", status ? 'X' : ' ');
+    else
+	wprintw (win, "(%c)", status ? 'X' : ' ');
+
+    wattrset (win, selected ? tag_selected_attr : tag_attr);
+    mvwaddch(win, choice, item_x, item[0]);
+    wattrset (win, selected ? item_selected_attr : item_attr);
+    waddstr (win, (char *)item+1);
+    if (selected) {
+    	wmove (win, choice, check_x+1);
+    	wrefresh (win);
+    }
+}
+
+/*
+ * Print the scroll indicators.
+ */
+static void
+print_arrows (WINDOW * win, int choice, int item_no, int scroll,
+		int y, int x, int height)
+{
+    wmove(win, y, x);
+
+    if (scroll > 0) {
+	wattrset (win, uarrow_attr);
+	waddch (win, ACS_UARROW);
+	waddstr (win, "(-)");
+    }
+    else {
+	wattrset (win, menubox_attr);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+    }
+
+   y = y + height + 1;
+   wmove(win, y, x);
+
+   if ((height < item_no) && (scroll + choice < item_no - 1)) {
+	wattrset (win, darrow_attr);
+	waddch (win, ACS_DARROW);
+	waddstr (win, "(+)");
+    }
+    else {
+	wattrset (win, menubox_border_attr);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+   }
+}
+
+/*
+ *  Display the termination buttons
+ */
+static void
+print_buttons( WINDOW *dialog, int height, int width, int selected)
+{
+    int x = width / 2 - 11;
+    int y = height - 2;
+
+    print_button (dialog, "Select", y, x, selected == 0);
+    print_button (dialog, " Help ", y, x + 14, selected == 1);
+
+    wmove(dialog, y, x+1 + 14*selected);
+    wrefresh (dialog);
+}
+
+/*
+ * Display a dialog box with a list of options that can be turned on or off
+ * The `flag' parameter is used to select between radiolist and checklist.
+ */
+int
+dialog_checklist (const char *title, const char *prompt, int height, int width,
+	int list_height, int item_no, struct dialog_list_item ** items,
+	int flag)
+
+{
+    int i, x, y, box_x, box_y;
+    int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
+    WINDOW *dialog, *list;
+
+    checkflag = flag;
+
+    /* Allocate space for storing item on/off status */
+    if ((status = malloc (sizeof (int) * item_no)) == NULL) {
+	endwin ();
+	fprintf (stderr,
+		 "\nCan't allocate memory in dialog_checklist().\n");
+	exit (-1);
+    }
+
+    /* Initializes status */
+    for (i = 0; i < item_no; i++) {
+	status[i] = (items[i]->selected == 1); /* ON */
+	if ((!choice && status[i]) || items[i]->selected == 2) /* SELECTED */
+            choice = i + 1;
+    }
+    if (choice)
+	    choice--;
+
+    max_choice = MIN (list_height, item_no);
+
+    /* center dialog box on screen */
+    x = (COLS - width) / 2;
+    y = (LINES - height) / 2;
+
+    draw_shadow (stdscr, y, x, height, width);
+
+    dialog = newwin (height, width, y, x);
+    keypad (dialog, TRUE);
+
+    draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
+    wattrset (dialog, border_attr);
+    mvwaddch (dialog, height-3, 0, ACS_LTEE);
+    for (i = 0; i < width - 2; i++)
+	waddch (dialog, ACS_HLINE);
+    wattrset (dialog, dialog_attr);
+    waddch (dialog, ACS_RTEE);
+
+    if (title != NULL && strlen(title) >= width-2 ) {
+	/* truncate long title -- mec */
+	char * title2 = malloc(width-2+1);
+	memcpy( title2, title, width-2 );
+	title2[width-2] = '\0';
+	title = title2;
+    }
+
+    if (title != NULL) {
+	wattrset (dialog, title_attr);
+	mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+	waddstr (dialog, (char *)title);
+	waddch (dialog, ' ');
+    }
+
+    wattrset (dialog, dialog_attr);
+    print_autowrap (dialog, prompt, width - 2, 1, 3);
+
+    list_width = width - 6;
+    box_y = height - list_height - 5;
+    box_x = (width - list_width) / 2 - 1;
+
+    /* create new window for the list */
+    list = subwin (dialog, list_height, list_width, y+box_y+1, x+box_x+1);
+
+    keypad (list, TRUE);
+
+    /* draw a box around the list items */
+    draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2,
+	      menubox_border_attr, menubox_attr);
+
+    /* Find length of longest item in order to center checklist */
+    check_x = 0;
+    for (i = 0; i < item_no; i++)
+	check_x = MAX (check_x, + strlen (items[i]->name) + 4);
+
+    check_x = (list_width - check_x) / 2;
+    item_x = check_x + 4;
+
+    if (choice >= list_height) {
+	scroll = choice - list_height + 1;
+	choice -= scroll;
+    }
+
+    /* Print the list */
+    for (i = 0; i < max_choice; i++) {
+	print_item (list, items[scroll + i]->name,
+		    status[i+scroll], i, i == choice);
+    }
+
+    print_arrows(dialog, choice, item_no, scroll,
+			box_y, box_x + check_x + 5, list_height);
+
+    print_buttons(dialog, height, width, 0);
+
+    wnoutrefresh (list);
+    wnoutrefresh (dialog);
+    doupdate ();
+
+    while (key != ESC) {
+	key = wgetch (dialog);
+
+    	for (i = 0; i < max_choice; i++)
+            if (toupper(key) == toupper(items[scroll + i]->name[0]))
+                break;
+
+
+	if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
+	    key == '+' || key == '-' ) {
+	    if (key == KEY_UP || key == '-') {
+		if (!choice) {
+		    if (!scroll)
+			continue;
+		    /* Scroll list down */
+		    if (list_height > 1) {
+			/* De-highlight current first item */
+			print_item (list, items[scroll]->name,
+					status[scroll], 0, FALSE);
+			scrollok (list, TRUE);
+			wscrl (list, -1);
+			scrollok (list, FALSE);
+		    }
+		    scroll--;
+		    print_item (list, items[scroll]->name,
+				status[scroll], 0, TRUE);
+		    wnoutrefresh (list);
+
+    		    print_arrows(dialog, choice, item_no, scroll,
+				box_y, box_x + check_x + 5, list_height);
+
+		    wrefresh (dialog);
+
+		    continue;	/* wait for another key press */
+		} else
+		    i = choice - 1;
+	    } else if (key == KEY_DOWN || key == '+') {
+		if (choice == max_choice - 1) {
+		    if (scroll + choice >= item_no - 1)
+			continue;
+		    /* Scroll list up */
+		    if (list_height > 1) {
+			/* De-highlight current last item before scrolling up */
+			print_item (list, items[scroll + max_choice - 1]->name,
+				    status[scroll + max_choice - 1],
+				    max_choice - 1, FALSE);
+			scrollok (list, TRUE);
+			scroll (list);
+			scrollok (list, FALSE);
+		    }
+		    scroll++;
+		    print_item (list, items[scroll + max_choice - 1]->name,
+				status[scroll + max_choice - 1],
+				max_choice - 1, TRUE);
+		    wnoutrefresh (list);
+
+    		    print_arrows(dialog, choice, item_no, scroll,
+				box_y, box_x + check_x + 5, list_height);
+
+		    wrefresh (dialog);
+
+		    continue;	/* wait for another key press */
+		} else
+		    i = choice + 1;
+	    }
+	    if (i != choice) {
+		/* De-highlight current item */
+		print_item (list, items[scroll + choice]->name,
+			    status[scroll + choice], choice, FALSE);
+		/* Highlight new item */
+		choice = i;
+		print_item (list, items[scroll + choice]->name,
+			    status[scroll + choice], choice, TRUE);
+		wnoutrefresh (list);
+		wrefresh (dialog);
+	    }
+	    continue;		/* wait for another key press */
+	}
+	switch (key) {
+	case 'H':
+	case 'h':
+	case '?':
+	    for (i = 0; i < item_no; i++)
+		items[i]->selected = 0;
+	    items[scroll + choice]->selected = 1;
+	    delwin (dialog);
+	    free (status);
+	    return 1;
+	case TAB:
+	case KEY_LEFT:
+	case KEY_RIGHT:
+	    button = ((key == KEY_LEFT ? --button : ++button) < 0)
+			? 1 : (button > 1 ? 0 : button);
+
+	    print_buttons(dialog, height, width, button);
+	    wrefresh (dialog);
+	    break;
+	case 'S':
+	case 's':
+	case ' ':
+	case '\n':
+	    if (!button) {
+		if (flag == FLAG_CHECK) {
+		    status[scroll + choice] = !status[scroll + choice];
+		    wmove (list, choice, check_x);
+		    wattrset (list, check_selected_attr);
+		    wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
+		} else {
+		    if (!status[scroll + choice]) {
+			for (i = 0; i < item_no; i++)
+			    status[i] = 0;
+			status[scroll + choice] = 1;
+			for (i = 0; i < max_choice; i++)
+			    print_item (list, items[scroll + i]->name,
+					status[scroll + i], i, i == choice);
+		    }
+		}
+		wnoutrefresh (list);
+		wrefresh (dialog);
+
+		for (i = 0; i < item_no; i++) {
+			items[i]->selected = status[i];
+		}
+            } else {
+		    for (i = 0; i < item_no; i++)
+			    items[i]->selected = 0;
+		    items[scroll + choice]->selected = 1;
+	    }
+	    delwin (dialog);
+	    free (status);
+	    return button;
+	case 'X':
+	case 'x':
+	    key = ESC;
+	case ESC:
+	    break;
+	}
+
+	/* Now, update everything... */
+	doupdate ();
+    }
+
+
+    delwin (dialog);
+    free (status);
+    return -1;			/* ESC pressed */
+}
diff --git a/openwrt/package/config/colors.h b/openwrt/package/config/colors.h
new file mode 100644
index 0000000000..d34dd37c6f
--- /dev/null
+++ b/openwrt/package/config/colors.h
@@ -0,0 +1,161 @@
+/*
+ *  colors.h -- color attribute definitions
+ *
+ *  AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ *   Default color definitions
+ *
+ *   *_FG = foreground
+ *   *_BG = background
+ *   *_HL = highlight?
+ */
+#define SCREEN_FG                    COLOR_CYAN
+#define SCREEN_BG                    COLOR_BLUE
+#define SCREEN_HL                    TRUE
+
+#define SHADOW_FG                    COLOR_BLACK
+#define SHADOW_BG                    COLOR_BLACK
+#define SHADOW_HL                    TRUE
+
+#define DIALOG_FG                    COLOR_BLACK
+#define DIALOG_BG                    COLOR_WHITE
+#define DIALOG_HL                    FALSE
+
+#define TITLE_FG                     COLOR_YELLOW
+#define TITLE_BG                     COLOR_WHITE
+#define TITLE_HL                     TRUE
+
+#define BORDER_FG                    COLOR_WHITE
+#define BORDER_BG                    COLOR_WHITE
+#define BORDER_HL                    TRUE
+
+#define BUTTON_ACTIVE_FG             COLOR_WHITE
+#define BUTTON_ACTIVE_BG             COLOR_BLUE
+#define BUTTON_ACTIVE_HL             TRUE
+
+#define BUTTON_INACTIVE_FG           COLOR_BLACK
+#define BUTTON_INACTIVE_BG           COLOR_WHITE
+#define BUTTON_INACTIVE_HL           FALSE
+
+#define BUTTON_KEY_ACTIVE_FG         COLOR_WHITE
+#define BUTTON_KEY_ACTIVE_BG         COLOR_BLUE
+#define BUTTON_KEY_ACTIVE_HL         TRUE
+
+#define BUTTON_KEY_INACTIVE_FG       COLOR_RED
+#define BUTTON_KEY_INACTIVE_BG       COLOR_WHITE
+#define BUTTON_KEY_INACTIVE_HL       FALSE
+
+#define BUTTON_LABEL_ACTIVE_FG       COLOR_YELLOW
+#define BUTTON_LABEL_ACTIVE_BG       COLOR_BLUE
+#define BUTTON_LABEL_ACTIVE_HL       TRUE
+
+#define BUTTON_LABEL_INACTIVE_FG     COLOR_BLACK
+#define BUTTON_LABEL_INACTIVE_BG     COLOR_WHITE
+#define BUTTON_LABEL_INACTIVE_HL     TRUE
+
+#define INPUTBOX_FG                  COLOR_BLACK
+#define INPUTBOX_BG                  COLOR_WHITE
+#define INPUTBOX_HL                  FALSE
+
+#define INPUTBOX_BORDER_FG           COLOR_BLACK
+#define INPUTBOX_BORDER_BG           COLOR_WHITE
+#define INPUTBOX_BORDER_HL           FALSE
+
+#define SEARCHBOX_FG                 COLOR_BLACK
+#define SEARCHBOX_BG                 COLOR_WHITE
+#define SEARCHBOX_HL                 FALSE
+
+#define SEARCHBOX_TITLE_FG           COLOR_YELLOW
+#define SEARCHBOX_TITLE_BG           COLOR_WHITE
+#define SEARCHBOX_TITLE_HL           TRUE
+
+#define SEARCHBOX_BORDER_FG          COLOR_WHITE
+#define SEARCHBOX_BORDER_BG          COLOR_WHITE
+#define SEARCHBOX_BORDER_HL          TRUE
+
+#define POSITION_INDICATOR_FG        COLOR_YELLOW
+#define POSITION_INDICATOR_BG        COLOR_WHITE
+#define POSITION_INDICATOR_HL        TRUE
+
+#define MENUBOX_FG                   COLOR_BLACK
+#define MENUBOX_BG                   COLOR_WHITE
+#define MENUBOX_HL                   FALSE
+
+#define MENUBOX_BORDER_FG            COLOR_WHITE
+#define MENUBOX_BORDER_BG            COLOR_WHITE
+#define MENUBOX_BORDER_HL            TRUE
+
+#define ITEM_FG                      COLOR_BLACK
+#define ITEM_BG                      COLOR_WHITE
+#define ITEM_HL                      FALSE
+
+#define ITEM_SELECTED_FG             COLOR_WHITE
+#define ITEM_SELECTED_BG             COLOR_BLUE
+#define ITEM_SELECTED_HL             TRUE
+
+#define TAG_FG                       COLOR_YELLOW
+#define TAG_BG                       COLOR_WHITE
+#define TAG_HL                       TRUE
+
+#define TAG_SELECTED_FG              COLOR_YELLOW
+#define TAG_SELECTED_BG              COLOR_BLUE
+#define TAG_SELECTED_HL              TRUE
+
+#define TAG_KEY_FG                   COLOR_YELLOW
+#define TAG_KEY_BG                   COLOR_WHITE
+#define TAG_KEY_HL                   TRUE
+
+#define TAG_KEY_SELECTED_FG          COLOR_YELLOW
+#define TAG_KEY_SELECTED_BG          COLOR_BLUE
+#define TAG_KEY_SELECTED_HL          TRUE
+
+#define CHECK_FG                     COLOR_BLACK
+#define CHECK_BG                     COLOR_WHITE
+#define CHECK_HL                     FALSE
+
+#define CHECK_SELECTED_FG            COLOR_WHITE
+#define CHECK_SELECTED_BG            COLOR_BLUE
+#define CHECK_SELECTED_HL            TRUE
+
+#define UARROW_FG                    COLOR_GREEN
+#define UARROW_BG                    COLOR_WHITE
+#define UARROW_HL                    TRUE
+
+#define DARROW_FG                    COLOR_GREEN
+#define DARROW_BG                    COLOR_WHITE
+#define DARROW_HL                    TRUE
+
+/* End of default color definitions */
+
+#define C_ATTR(x,y)                  ((x ? A_BOLD : 0) | COLOR_PAIR((y)))
+#define COLOR_NAME_LEN               10
+#define COLOR_COUNT                  8
+
+/*
+ * Global variables
+ */
+
+typedef struct {
+    char name[COLOR_NAME_LEN];
+    int value;
+} color_names_st;
+
+extern color_names_st color_names[];
+extern int color_table[][3];
diff --git a/openwrt/package/config/conf.c b/openwrt/package/config/conf.c
new file mode 100644
index 0000000000..46b7e08f7f
--- /dev/null
+++ b/openwrt/package/config/conf.c
@@ -0,0 +1,583 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/stat.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+static void conf(struct menu *menu);
+static void check_conf(struct menu *menu);
+
+enum {
+	ask_all,
+	ask_new,
+	ask_silent,
+	set_default,
+	set_yes,
+	set_mod,
+	set_no,
+	set_random
+} input_mode = ask_all;
+char *defconfig_file;
+
+static int indent = 1;
+static int valid_stdin = 1;
+static int conf_cnt;
+static char line[128];
+static struct menu *rootEntry;
+
+static char nohelp_text[] = "Sorry, no help available for this option yet.\n";
+
+static void strip(char *str)
+{
+	char *p = str;
+	int l;
+
+	while ((isspace(*p)))
+		p++;
+	l = strlen(p);
+	if (p != str)
+		memmove(str, p, l + 1);
+	if (!l)
+		return;
+	p = str + l - 1;
+	while ((isspace(*p)))
+		*p-- = 0;
+}
+
+static void check_stdin(void)
+{
+	if (!valid_stdin && input_mode == ask_silent) {
+		printf("aborted!\n\n");
+		printf("Console input/output is redirected. ");
+		printf("Run 'make oldconfig' to update configuration.\n\n");
+		exit(1);
+	}
+}
+
+static void conf_askvalue(struct symbol *sym, const char *def)
+{
+	enum symbol_type type = sym_get_type(sym);
+	tristate val;
+
+	if (!sym_has_value(sym))
+		printf("(NEW) ");
+
+	line[0] = '\n';
+	line[1] = 0;
+
+	if (!sym_is_changable(sym)) {
+		printf("%s\n", def);
+		line[0] = '\n';
+		line[1] = 0;
+		return;
+	}
+
+	switch (input_mode) {
+	case ask_new:
+	case ask_silent:
+		if (sym_has_value(sym)) {
+			printf("%s\n", def);
+			return;
+		}
+		check_stdin();
+	case ask_all:
+		fflush(stdout);
+		fgets(line, 128, stdin);
+		return;
+	case set_default:
+		printf("%s\n", def);
+		return;
+	default:
+		break;
+	}
+
+	switch (type) {
+	case S_INT:
+	case S_HEX:
+	case S_STRING:
+		printf("%s\n", def);
+		return;
+	default:
+		;
+	}
+	switch (input_mode) {
+	case set_yes:
+		if (sym_tristate_within_range(sym, yes)) {
+			line[0] = 'y';
+			line[1] = '\n';
+			line[2] = 0;
+			break;
+		}
+	case set_mod:
+		if (type == S_TRISTATE) {
+			if (sym_tristate_within_range(sym, mod)) {
+				line[0] = 'm';
+				line[1] = '\n';
+				line[2] = 0;
+				break;
+			}
+		} else {
+			if (sym_tristate_within_range(sym, yes)) {
+				line[0] = 'y';
+				line[1] = '\n';
+				line[2] = 0;
+				break;
+			}
+		}
+	case set_no:
+		if (sym_tristate_within_range(sym, no)) {
+			line[0] = 'n';
+			line[1] = '\n';
+			line[2] = 0;
+			break;
+		}
+	case set_random:
+		do {
+			val = (tristate)(random() % 3);
+		} while (!sym_tristate_within_range(sym, val));
+		switch (val) {
+		case no: line[0] = 'n'; break;
+		case mod: line[0] = 'm'; break;
+		case yes: line[0] = 'y'; break;
+		}
+		line[1] = '\n';
+		line[2] = 0;
+		break;
+	default:
+		break;
+	}
+	printf("%s", line);
+}
+
+int conf_string(struct menu *menu)
+{
+	struct symbol *sym = menu->sym;
+	const char *def, *help;
+
+	while (1) {
+		printf("%*s%s ", indent - 1, "", menu->prompt->text);
+		printf("(%s) ", sym->name);
+		def = sym_get_string_value(sym);
+		if (sym_get_string_value(sym))
+			printf("[%s] ", def);
+		conf_askvalue(sym, def);
+		switch (line[0]) {
+		case '\n':
+			break;
+		case '?':
+			/* print help */
+			if (line[1] == '\n') {
+				help = nohelp_text;
+				if (menu->sym->help)
+					help = menu->sym->help;
+				printf("\n%s\n", menu->sym->help);
+				def = NULL;
+				break;
+			}
+		default:
+			line[strlen(line)-1] = 0;
+			def = line;
+		}
+		if (def && sym_set_string_value(sym, def))
+			return 0;
+	}
+}
+
+static int conf_sym(struct menu *menu)
+{
+	struct symbol *sym = menu->sym;
+	int type;
+	tristate oldval, newval;
+	const char *help;
+
+	while (1) {
+		printf("%*s%s ", indent - 1, "", menu->prompt->text);
+		if (sym->name)
+			printf("(%s) ", sym->name);
+		type = sym_get_type(sym);
+		putchar('[');
+		oldval = sym_get_tristate_value(sym);
+		switch (oldval) {
+		case no:
+			putchar('N');
+			break;
+		case mod:
+			putchar('M');
+			break;
+		case yes:
+			putchar('Y');
+			break;
+		}
+		if (oldval != no && sym_tristate_within_range(sym, no))
+			printf("/n");
+		if (oldval != mod && sym_tristate_within_range(sym, mod))
+			printf("/m");
+		if (oldval != yes && sym_tristate_within_range(sym, yes))
+			printf("/y");
+		if (sym->help)
+			printf("/?");
+		printf("] ");
+		conf_askvalue(sym, sym_get_string_value(sym));
+		strip(line);
+
+		switch (line[0]) {
+		case 'n':
+		case 'N':
+			newval = no;
+			if (!line[1] || !strcmp(&line[1], "o"))
+				break;
+			continue;
+		case 'm':
+		case 'M':
+			newval = mod;
+			if (!line[1])
+				break;
+			continue;
+		case 'y':
+		case 'Y':
+			newval = yes;
+			if (!line[1] || !strcmp(&line[1], "es"))
+				break;
+			continue;
+		case 0:
+			newval = oldval;
+			break;
+		case '?':
+			goto help;
+		default:
+			continue;
+		}
+		if (sym_set_tristate_value(sym, newval))
+			return 0;
+help:
+		help = nohelp_text;
+		if (sym->help)
+			help = sym->help;
+		printf("\n%s\n", help);
+	}
+}
+
+static int conf_choice(struct menu *menu)
+{
+	struct symbol *sym, *def_sym;
+	struct menu *child;
+	int type;
+	bool is_new;
+
+	sym = menu->sym;
+	type = sym_get_type(sym);
+	is_new = !sym_has_value(sym);
+	if (sym_is_changable(sym)) {
+		conf_sym(menu);
+		sym_calc_value(sym);
+		switch (sym_get_tristate_value(sym)) {
+		case no:
+			return 1;
+		case mod:
+			return 0;
+		case yes:
+			break;
+		}
+	} else {
+		switch (sym_get_tristate_value(sym)) {
+		case no:
+			return 1;
+		case mod:
+			printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
+			return 0;
+		case yes:
+			break;
+		}
+	}
+
+	while (1) {
+		int cnt, def;
+
+		printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
+		def_sym = sym_get_choice_value(sym);
+		cnt = def = 0;
+		line[0] = '0';
+		line[1] = 0;
+		for (child = menu->list; child; child = child->next) {
+			if (!menu_is_visible(child))
+				continue;
+			if (!child->sym) {
+				printf("%*c %s\n", indent, '*', menu_get_prompt(child));
+				continue;
+			}
+			cnt++;
+			if (child->sym == def_sym) {
+				def = cnt;
+				printf("%*c", indent, '>');
+			} else
+				printf("%*c", indent, ' ');
+			printf(" %d. %s", cnt, menu_get_prompt(child));
+			if (child->sym->name)
+				printf(" (%s)", child->sym->name);
+			if (!sym_has_value(child->sym))
+				printf(" (NEW)");
+			printf("\n");
+		}
+		printf("%*schoice", indent - 1, "");
+		if (cnt == 1) {
+			printf("[1]: 1\n");
+			goto conf_childs;
+		}
+		printf("[1-%d", cnt);
+		if (sym->help)
+			printf("?");
+		printf("]: ");
+		switch (input_mode) {
+		case ask_new:
+		case ask_silent:
+			if (!is_new) {
+				cnt = def;
+				printf("%d\n", cnt);
+				break;
+			}
+			check_stdin();
+		case ask_all:
+			fflush(stdout);
+			fgets(line, 128, stdin);
+			strip(line);
+			if (line[0] == '?') {
+				printf("\n%s\n", menu->sym->help ?
+					menu->sym->help : nohelp_text);
+				continue;
+			}
+			if (!line[0])
+				cnt = def;
+			else if (isdigit(line[0]))
+				cnt = atoi(line);
+			else
+				continue;
+			break;
+		case set_random:
+			def = (random() % cnt) + 1;
+		case set_default:
+		case set_yes:
+		case set_mod:
+		case set_no:
+			cnt = def;
+			printf("%d\n", cnt);
+			break;
+		}
+
+	conf_childs:
+		for (child = menu->list; child; child = child->next) {
+			if (!child->sym || !menu_is_visible(child))
+				continue;
+			if (!--cnt)
+				break;
+		}
+		if (!child)
+			continue;
+		if (line[strlen(line) - 1] == '?') {
+			printf("\n%s\n", child->sym->help ?
+				child->sym->help : nohelp_text);
+			continue;
+		}
+		sym_set_choice_value(sym, child->sym);
+		if (child->list) {
+			indent += 2;
+			conf(child->list);
+			indent -= 2;
+		}
+		return 1;
+	}
+}
+
+static void conf(struct menu *menu)
+{
+	struct symbol *sym;
+	struct property *prop;
+	struct menu *child;
+
+	if (!menu_is_visible(menu))
+		return;
+
+	sym = menu->sym;
+	prop = menu->prompt;
+	if (prop) {
+		const char *prompt;
+
+		switch (prop->type) {
+		case P_MENU:
+			if (input_mode == ask_silent && rootEntry != menu) {
+				check_conf(menu);
+				return;
+			}
+		case P_COMMENT:
+			prompt = menu_get_prompt(menu);
+			if (prompt)
+				printf("%*c\n%*c %s\n%*c\n",
+					indent, '*',
+					indent, '*', prompt,
+					indent, '*');
+		default:
+			;
+		}
+	}
+
+	if (!sym)
+		goto conf_childs;
+
+	if (sym_is_choice(sym)) {
+		conf_choice(menu);
+		if (sym->curr.tri != mod)
+			return;
+		goto conf_childs;
+	}
+
+	switch (sym->type) {
+	case S_INT:
+	case S_HEX:
+	case S_STRING:
+		conf_string(menu);
+		break;
+	default:
+		conf_sym(menu);
+		break;
+	}
+
+conf_childs:
+	if (sym)
+		indent += 2;
+	for (child = menu->list; child; child = child->next)
+		conf(child);
+	if (sym)
+		indent -= 2;
+}
+
+static void check_conf(struct menu *menu)
+{
+	struct symbol *sym;
+	struct menu *child;
+
+	if (!menu_is_visible(menu))
+		return;
+
+	sym = menu->sym;
+	if (sym) {
+		if (sym_is_changable(sym) && !sym_has_value(sym)) {
+			if (!conf_cnt++)
+				printf("*\n* Restart config...\n*\n");
+			rootEntry = menu_get_parent_menu(menu);
+			conf(rootEntry);
+		}
+		if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
+			return;
+	}
+
+	for (child = menu->list; child; child = child->next)
+		check_conf(child);
+}
+
+int main(int ac, char **av)
+{
+	int i = 1;
+	const char *name;
+	struct stat tmpstat;
+
+	if (ac > i && av[i][0] == '-') {
+		switch (av[i++][1]) {
+		case 'o':
+			input_mode = ask_new;
+			break;
+		case 's':
+			input_mode = ask_silent;
+			valid_stdin = isatty(0) && isatty(1) && isatty(2);
+			break;
+		case 'd':
+			input_mode = set_default;
+			break;
+		case 'D':
+			input_mode = set_default;
+			defconfig_file = av[i++];
+			if (!defconfig_file) {
+				printf("%s: No default config file specified\n",
+					av[0]);
+				exit(1);
+			}
+			break;
+		case 'n':
+			input_mode = set_no;
+			break;
+		case 'm':
+			input_mode = set_mod;
+			break;
+		case 'y':
+			input_mode = set_yes;
+			break;
+		case 'r':
+			input_mode = set_random;
+			srandom(time(NULL));
+			break;
+		case 'h':
+		case '?':
+			printf("%s [-o|-s] config\n", av[0]);
+			exit(0);
+		}
+	}
+  	name = av[i];
+	if (!name) {
+		printf("%s: configuration file missing\n", av[0]);
+	}
+	conf_parse(name);
+	//zconfdump(stdout);
+	switch (input_mode) {
+	case set_default:
+		if (!defconfig_file)
+			defconfig_file = conf_get_default_confname();
+		if (conf_read(defconfig_file)) {
+			printf("***\n"
+				"*** Can't find default configuration \"%s\"!\n"
+				"***\n", defconfig_file);
+			exit(1);
+		}
+		break;
+	case ask_silent:
+		if (stat(".config", &tmpstat)) {
+			printf("***\n"
+				"*** You have not yet configured Buildroot!\n"
+				"***\n"
+				"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
+				"*** \"make menuconfig\" or \"make config\").\n"
+				"***\n");
+			exit(1);
+		}
+	case ask_all:
+	case ask_new:
+		conf_read(NULL);
+		break;
+	default:
+		break;
+	}
+
+	if (input_mode != ask_silent) {
+		rootEntry = &rootmenu;
+		conf(&rootmenu);
+		if (input_mode == ask_all) {
+			input_mode = ask_silent;
+			valid_stdin = 1;
+		}
+	}
+	do {
+		conf_cnt = 0;
+		check_conf(&rootmenu);
+	} while (conf_cnt);
+	if (conf_write(NULL)) {
+		fprintf(stderr, "\n*** Error during writing of the Buildroot configuration.\n\n");
+		return 1;
+	}
+	return 0;
+}
diff --git a/openwrt/package/config/confdata.c b/openwrt/package/config/confdata.c
new file mode 100644
index 0000000000..fd3a345e26
--- /dev/null
+++ b/openwrt/package/config/confdata.c
@@ -0,0 +1,447 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <sys/stat.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+const char conf_def_filename[] = ".config";
+
+const char conf_defname[] = "sysdeps/linux/defconfig";
+
+const char *conf_confnames[] = {
+	".config",
+	conf_defname,
+	NULL,
+};
+
+static char *conf_expand_value(const char *in)
+{
+	struct symbol *sym;
+	const char *src;
+	static char res_value[SYMBOL_MAXLENGTH];
+	char *dst, name[SYMBOL_MAXLENGTH];
+
+	res_value[0] = 0;
+	dst = name;
+	while ((src = strchr(in, '$'))) {
+		strncat(res_value, in, src - in);
+		src++;
+		dst = name;
+		while (isalnum(*src) || *src == '_')
+			*dst++ = *src++;
+		*dst = 0;
+		sym = sym_lookup(name, 0);
+		sym_calc_value(sym);
+		strcat(res_value, sym_get_string_value(sym));
+		in = src;
+	}
+	strcat(res_value, in);
+
+	return res_value;
+}
+
+char *conf_get_default_confname(void)
+{
+	struct stat buf;
+	static char fullname[PATH_MAX+1];
+	char *env, *name;
+
+	name = conf_expand_value(conf_defname);
+	env = getenv(SRCTREE);
+	if (env) {
+		sprintf(fullname, "%s/%s", env, name);
+		if (!stat(fullname, &buf))
+			return fullname;
+	}
+	return name;
+}
+
+int conf_read(const char *name)
+{
+	FILE *in = NULL;
+	char line[1024];
+	char *p, *p2;
+	int lineno = 0;
+	struct symbol *sym;
+	struct property *prop;
+	struct expr *e;
+	int i;
+
+	if (name) {
+		in = zconf_fopen(name);
+	} else {
+		const char **names = conf_confnames;
+		while ((name = *names++)) {
+			name = conf_expand_value(name);
+			in = zconf_fopen(name);
+			if (in) {
+				printf("#\n"
+				       "# using defaults found in %s\n"
+				       "#\n", name);
+				break;
+			}
+		}
+	}
+
+	if (!in)
+		return 1;
+
+	for_all_symbols(i, sym) {
+		sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
+		sym->flags &= ~SYMBOL_VALID;
+		switch (sym->type) {
+		case S_INT:
+		case S_HEX:
+		case S_STRING:
+			if (sym->user.val)
+				free(sym->user.val);
+		default:
+			sym->user.val = NULL;
+			sym->user.tri = no;
+		}
+	}
+
+	while (fgets(line, sizeof(line), in)) {
+		lineno++;
+		sym = NULL;
+		switch (line[0]) {
+		case '#':
+			if (line[1]!=' ')
+				continue;
+			p = strchr(line + 2, ' ');
+			if (!p)
+				continue;
+			*p++ = 0;
+			if (strncmp(p, "is not set", 10))
+				continue;
+			sym = sym_find(line + 2);
+			if (!sym) {
+				fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 2);
+				break;
+			}
+			switch (sym->type) {
+			case S_BOOLEAN:
+			case S_TRISTATE:
+				sym->user.tri = no;
+				sym->flags &= ~SYMBOL_NEW;
+				break;
+			default:
+				;
+			}
+			break;
+
+		case 'A' ... 'Z':
+			p = strchr(line, '=');
+			if (!p)
+				continue;
+			*p++ = 0;
+			p2 = strchr(p, '\n');
+			if (p2)
+				*p2 = 0;
+			sym = sym_find(line);
+			if (!sym) {
+				fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line);
+				break;
+			}
+			switch (sym->type) {
+			case S_TRISTATE:
+				if (p[0] == 'm') {
+					sym->user.tri = mod;
+					sym->flags &= ~SYMBOL_NEW;
+					break;
+				}
+			case S_BOOLEAN:
+				if (p[0] == 'y') {
+					sym->user.tri = yes;
+					sym->flags &= ~SYMBOL_NEW;
+					break;
+				}
+				if (p[0] == 'n') {
+					sym->user.tri = no;
+					sym->flags &= ~SYMBOL_NEW;
+					break;
+				}
+				break;
+			case S_STRING:
+				if (*p++ != '"')
+					break;
+				for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
+					if (*p2 == '"') {
+						*p2 = 0;
+						break;
+					}
+					memmove(p2, p2 + 1, strlen(p2));
+				}
+				if (!p2) {
+					fprintf(stderr, "%s:%d: invalid string found\n", name, lineno);
+					exit(1);
+				}
+			case S_INT:
+			case S_HEX:
+				if (sym_string_valid(sym, p)) {
+					sym->user.val = strdup(p);
+					sym->flags &= ~SYMBOL_NEW;
+				} else {
+					fprintf(stderr, "%s:%d: symbol value '%s' invalid for %s\n", name, lineno, p, sym->name);
+					exit(1);
+				}
+				break;
+			default:
+				;
+			}
+			break;
+		case '\n':
+			break;
+		default:
+			continue;
+		}
+		if (sym && sym_is_choice_value(sym)) {
+			struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
+			switch (sym->user.tri) {
+			case no:
+				break;
+			case mod:
+				if (cs->user.tri == yes)
+					/* warn? */;
+				break;
+			case yes:
+				if (cs->user.tri != no)
+					/* warn? */;
+				cs->user.val = sym;
+				break;
+			}
+			cs->user.tri = E_OR(cs->user.tri, sym->user.tri);
+			cs->flags &= ~SYMBOL_NEW;
+		}
+	}
+	fclose(in);
+
+	if (modules_sym)
+		sym_calc_value(modules_sym);
+	for_all_symbols(i, sym) {
+		sym_calc_value(sym);
+		if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
+			if (sym->visible == no)
+				sym->flags |= SYMBOL_NEW;
+			switch (sym->type) {
+			case S_STRING:
+			case S_INT:
+			case S_HEX:
+				if (!sym_string_within_range(sym, sym->user.val))
+					sym->flags |= SYMBOL_NEW;
+			default:
+				break;
+			}
+		}
+		if (!sym_is_choice(sym))
+			continue;
+		prop = sym_get_choice_prop(sym);
+		for (e = prop->expr; e; e = e->left.expr)
+			if (e->right.sym->visible != no)
+				sym->flags |= e->right.sym->flags & SYMBOL_NEW;
+	}
+
+	sym_change_count = 1;
+
+	return 0;
+}
+
+int conf_write(const char *name)
+{
+	FILE *out, *out_h;
+	struct symbol *sym;
+	struct menu *menu;
+	const char *basename;
+	char dirname[128], tmpname[128], newname[128];
+	int type, l;
+	const char *str;
+
+	dirname[0] = 0;
+	if (name && name[0]) {
+		struct stat st;
+		char *slash;
+
+		if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
+			strcpy(dirname, name);
+			strcat(dirname, "/");
+			basename = conf_def_filename;
+		} else if ((slash = strrchr(name, '/'))) {
+			int size = slash - name + 1;
+			memcpy(dirname, name, size);
+			dirname[size] = 0;
+			if (slash[1])
+				basename = slash + 1;
+			else
+				basename = conf_def_filename;
+		} else
+			basename = name;
+	} else
+		basename = conf_def_filename;
+
+	sprintf(newname, "%s.tmpconfig.%d", dirname, getpid());
+	out = fopen(newname, "w");
+	if (!out)
+		return 1;
+	out_h = NULL;
+	if (!name) {
+		out_h = fopen(".tmpconfig.h", "w");
+		if (!out_h)
+			return 1;
+	}
+	fprintf(out, "#\n"
+		     "# Automatically generated make config: don't edit\n"
+		     "#\n");
+	if (out_h) {
+		fprintf(out_h, "/*\n"
+			     " * Automatically generated header file: don't edit\n"
+			     " */\n\n"
+			     "#define AUTOCONF_INCLUDED\n\n"
+			     "/* Version Number */\n"
+			     "#define BB_VER \"%s\"\n"
+			     "#define BB_BT \"%s\"\n",
+			     getenv("VERSION"),
+			     getenv("BUILDTIME"));
+		if (getenv("EXTRA_VERSION"))
+			fprintf(out_h, "#define BB_EXTRA_VERSION \"%s\"\n",
+				     getenv("EXTRA_VERSION"));
+		fprintf(out_h, "\n");
+	}
+
+	if (!sym_change_count)
+		sym_clear_all_valid();
+
+	menu = rootmenu.list;
+	while (menu) {
+		sym = menu->sym;
+		if (!sym) {
+			if (!menu_is_visible(menu))
+				goto next;
+			str = menu_get_prompt(menu);
+			fprintf(out, "\n"
+				     "#\n"
+				     "# %s\n"
+				     "#\n", str);
+			if (out_h)
+				fprintf(out_h, "\n"
+					       "/*\n"
+					       " * %s\n"
+					       " */\n", str);
+		} else if (!(sym->flags & SYMBOL_CHOICE)) {
+			sym_calc_value(sym);
+			if (!(sym->flags & SYMBOL_WRITE))
+				goto next;
+			sym->flags &= ~SYMBOL_WRITE;
+			type = sym->type;
+			if (type == S_TRISTATE) {
+				sym_calc_value(modules_sym);
+				if (modules_sym->curr.tri == no)
+					type = S_BOOLEAN;
+			}
+			switch (type) {
+			case S_BOOLEAN:
+			case S_TRISTATE:
+				switch (sym_get_tristate_value(sym)) {
+				case no:
+					fprintf(out, "# %s is not set\n", sym->name);
+					if (out_h)
+						fprintf(out_h, "#undef %s\n", sym->name);
+					break;
+				case mod:
+#if 0
+					fprintf(out, "%s=m\n", sym->name);
+					if (out_h)
+						fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
+#endif
+					break;
+				case yes:
+					fprintf(out, "%s=y\n", sym->name);
+					if (out_h)
+						fprintf(out_h, "#define %s 1\n", sym->name);
+					break;
+				}
+				break;
+			case S_STRING:
+				// fix me
+				str = sym_get_string_value(sym);
+				fprintf(out, "%s=\"", sym->name);
+				if (out_h)
+					fprintf(out_h, "#define %s \"", sym->name);
+				do {
+					l = strcspn(str, "\"\\");
+					if (l) {
+						fwrite(str, l, 1, out);
+						if (out_h)
+							fwrite(str, l, 1, out_h);
+					}
+					str += l;
+					while (*str == '\\' || *str == '"') {
+						fprintf(out, "\\%c", *str);
+						if (out_h)
+							fprintf(out_h, "\\%c", *str);
+						str++;
+					}
+				} while (*str);
+				fputs("\"\n", out);
+				if (out_h)
+					fputs("\"\n", out_h);
+				break;
+			case S_HEX:
+				str = sym_get_string_value(sym);
+				if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
+					fprintf(out, "%s=%s\n", sym->name, str);
+					if (out_h)
+						fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
+					break;
+				}
+			case S_INT:
+				str = sym_get_string_value(sym);
+				fprintf(out, "%s=%s\n", sym->name, str);
+				if (out_h)
+					fprintf(out_h, "#define %s %s\n", sym->name, str);
+				break;
+			}
+		}
+
+	next:
+		if (menu->list) {
+			menu = menu->list;
+			continue;
+		}
+		if (menu->next)
+			menu = menu->next;
+		else while ((menu = menu->parent)) {
+			if (menu->next) {
+				menu = menu->next;
+				break;
+			}
+		}
+	}
+	fclose(out);
+	if (out_h) {
+		fclose(out_h);
+		rename(".tmpconfig.h", "include/config.h");
+		file_write_dep(NULL);
+	}
+	if (!name || basename != conf_def_filename) {
+		if (!name)
+			name = conf_def_filename;
+		sprintf(tmpname, "%s.old", name);
+		rename(name, tmpname);
+	}
+	sprintf(tmpname, "%s%s", dirname, basename);
+	if (rename(newname, tmpname))
+		return 1;
+
+	sym_change_count = 0;
+
+	return 0;
+}
diff --git a/openwrt/package/config/dialog.h b/openwrt/package/config/dialog.h
new file mode 100644
index 0000000000..6486cc8f77
--- /dev/null
+++ b/openwrt/package/config/dialog.h
@@ -0,0 +1,196 @@
+
+/*
+ *  dialog.h -- common declarations for all dialog modules
+ *
+ *  AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef CURSES_LOC
+#include CURSES_LOC
+
+/*
+ * Colors in ncurses 1.9.9e do not work properly since foreground and
+ * background colors are OR'd rather than separately masked.  This version
+ * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
+ * with standard curses.  The simplest fix (to make this work with standard
+ * curses) uses the wbkgdset() function, not used in the original hack.
+ * Turn it off if we're building with 1.9.9e, since it just confuses things.
+ */
+#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
+#define OLD_NCURSES 1
+#undef  wbkgdset
+#define wbkgdset(w,p) /*nothing*/
+#else
+#define OLD_NCURSES 0
+#endif
+
+#define TR(params) _tracef params
+
+#define ESC 27
+#define TAB 9
+#define MAX_LEN 2048
+#define BUF_SIZE (10*1024)
+#define MIN(x,y) (x < y ? x : y)
+#define MAX(x,y) (x > y ? x : y)
+
+
+#ifndef ACS_ULCORNER
+#define ACS_ULCORNER '+'
+#endif
+#ifndef ACS_LLCORNER
+#define ACS_LLCORNER '+'
+#endif
+#ifndef ACS_URCORNER
+#define ACS_URCORNER '+'
+#endif
+#ifndef ACS_LRCORNER
+#define ACS_LRCORNER '+'
+#endif
+#ifndef ACS_HLINE
+#define ACS_HLINE '-'
+#endif
+#ifndef ACS_VLINE
+#define ACS_VLINE '|'
+#endif
+#ifndef ACS_LTEE
+#define ACS_LTEE '+'
+#endif
+#ifndef ACS_RTEE
+#define ACS_RTEE '+'
+#endif
+#ifndef ACS_UARROW
+#define ACS_UARROW '^'
+#endif
+#ifndef ACS_DARROW
+#define ACS_DARROW 'v'
+#endif
+
+/*
+ * Attribute names
+ */
+#define screen_attr                   attributes[0]
+#define shadow_attr                   attributes[1]
+#define dialog_attr                   attributes[2]
+#define title_attr                    attributes[3]
+#define border_attr                   attributes[4]
+#define button_active_attr            attributes[5]
+#define button_inactive_attr          attributes[6]
+#define button_key_active_attr        attributes[7]
+#define button_key_inactive_attr      attributes[8]
+#define button_label_active_attr      attributes[9]
+#define button_label_inactive_attr    attributes[10]
+#define inputbox_attr                 attributes[11]
+#define inputbox_border_attr          attributes[12]
+#define searchbox_attr                attributes[13]
+#define searchbox_title_attr          attributes[14]
+#define searchbox_border_attr         attributes[15]
+#define position_indicator_attr       attributes[16]
+#define menubox_attr                  attributes[17]
+#define menubox_border_attr           attributes[18]
+#define item_attr                     attributes[19]
+#define item_selected_attr            attributes[20]
+#define tag_attr                      attributes[21]
+#define tag_selected_attr             attributes[22]
+#define tag_key_attr                  attributes[23]
+#define tag_key_selected_attr         attributes[24]
+#define check_attr                    attributes[25]
+#define check_selected_attr           attributes[26]
+#define uarrow_attr                   attributes[27]
+#define darrow_attr                   attributes[28]
+
+/* number of attributes */
+#define ATTRIBUTE_COUNT               29
+
+/*
+ * Global variables
+ */
+extern bool use_colors;
+
+extern chtype attributes[];
+#endif
+
+extern char *backtitle;
+
+struct dialog_list_item {
+	char *name;
+	int namelen;
+	char *tag;
+	int selected; /* Set to 1 by dialog_*() function. */
+};
+
+/*
+ * Function prototypes
+ */
+
+void init_dialog (void);
+void end_dialog (void);
+void dialog_clear (void);
+#ifdef CURSES_LOC
+void attr_clear (WINDOW * win, int height, int width, chtype attr);
+void color_setup (void);
+void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x);
+void print_button (WINDOW * win, const char *label, int y, int x, int selected);
+void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
+		chtype border);
+void draw_shadow (WINDOW * win, int y, int x, int height, int width);
+#endif
+
+int first_alpha (const char *string, const char *exempt);
+int dialog_yesno (const char *title, const char *prompt, int height, int width);
+int dialog_msgbox (const char *title, const char *prompt, int height,
+		int width, int pause);
+int dialog_textbox (const char *title, const char *file, int height, int width);
+int dialog_menu (const char *title, const char *prompt, int height, int width,
+		int menu_height, const char *choice, int item_no,
+		struct dialog_list_item ** items);
+int dialog_checklist (const char *title, const char *prompt, int height,
+		int width, int list_height, int item_no,
+		struct dialog_list_item ** items, int flag);
+extern unsigned char dialog_input_result[];
+int dialog_inputbox (const char *title, const char *prompt, int height,
+		int width, const char *init);
+
+struct dialog_list_item *first_sel_item(int item_no,
+		struct dialog_list_item ** items);
+
+/*
+ * This is the base for fictitious keys, which activate
+ * the buttons.
+ *
+ * Mouse-generated keys are the following:
+ *   -- the first 32 are used as numbers, in addition to '0'-'9'
+ *   -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
+ *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
+ */
+#ifdef CURSES_LOC
+#define M_EVENT (KEY_MAX+1)
+#endif
+
+
+/*
+ * The `flag' parameter in checklist is used to select between
+ * radiolist and checklist
+ */
+#define FLAG_CHECK 1
+#define FLAG_RADIO 0
diff --git a/openwrt/package/config/expr.c b/openwrt/package/config/expr.c
new file mode 100644
index 0000000000..10f45232b4
--- /dev/null
+++ b/openwrt/package/config/expr.c
@@ -0,0 +1,1089 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+#define DEBUG_EXPR	0
+
+struct expr *expr_alloc_symbol(struct symbol *sym)
+{
+	struct expr *e = malloc(sizeof(*e));
+	memset(e, 0, sizeof(*e));
+	e->type = E_SYMBOL;
+	e->left.sym = sym;
+	return e;
+}
+
+struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
+{
+	struct expr *e = malloc(sizeof(*e));
+	memset(e, 0, sizeof(*e));
+	e->type = type;
+	e->left.expr = ce;
+	return e;
+}
+
+struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
+{
+	struct expr *e = malloc(sizeof(*e));
+	memset(e, 0, sizeof(*e));
+	e->type = type;
+	e->left.expr = e1;
+	e->right.expr = e2;
+	return e;
+}
+
+struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
+{
+	struct expr *e = malloc(sizeof(*e));
+	memset(e, 0, sizeof(*e));
+	e->type = type;
+	e->left.sym = s1;
+	e->right.sym = s2;
+	return e;
+}
+
+struct expr *expr_alloc_and(struct expr *e1, struct expr *e2)
+{
+	if (!e1)
+		return e2;
+	return e2 ? expr_alloc_two(E_AND, e1, e2) : e1;
+}
+
+struct expr *expr_alloc_or(struct expr *e1, struct expr *e2)
+{
+	if (!e1)
+		return e2;
+	return e2 ? expr_alloc_two(E_OR, e1, e2) : e1;
+}
+
+struct expr *expr_copy(struct expr *org)
+{
+	struct expr *e;
+
+	if (!org)
+		return NULL;
+
+	e = malloc(sizeof(*org));
+	memcpy(e, org, sizeof(*org));
+	switch (org->type) {
+	case E_SYMBOL:
+		e->left = org->left;
+		break;
+	case E_NOT:
+		e->left.expr = expr_copy(org->left.expr);
+		break;
+	case E_EQUAL:
+	case E_UNEQUAL:
+		e->left.sym = org->left.sym;
+		e->right.sym = org->right.sym;
+		break;
+	case E_AND:
+	case E_OR:
+	case E_CHOICE:
+		e->left.expr = expr_copy(org->left.expr);
+		e->right.expr = expr_copy(org->right.expr);
+		break;
+	default:
+		printf("can't copy type %d\n", e->type);
+		free(e);
+		e = NULL;
+		break;
+	}
+
+	return e;
+}
+
+void expr_free(struct expr *e)
+{
+	if (!e)
+		return;
+
+	switch (e->type) {
+	case E_SYMBOL:
+		break;
+	case E_NOT:
+		expr_free(e->left.expr);
+		return;
+	case E_EQUAL:
+	case E_UNEQUAL:
+		break;
+	case E_OR:
+	case E_AND:
+		expr_free(e->left.expr);
+		expr_free(e->right.expr);
+		break;
+	default:
+		printf("how to free type %d?\n", e->type);
+		break;
+	}
+	free(e);
+}
+
+static int trans_count;
+
+#define e1 (*ep1)
+#define e2 (*ep2)
+
+static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
+{
+	if (e1->type == type) {
+		__expr_eliminate_eq(type, &e1->left.expr, &e2);
+		__expr_eliminate_eq(type, &e1->right.expr, &e2);
+		return;
+	}
+	if (e2->type == type) {
+		__expr_eliminate_eq(type, &e1, &e2->left.expr);
+		__expr_eliminate_eq(type, &e1, &e2->right.expr);
+		return;
+	}
+	if (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
+	    e1->left.sym == e2->left.sym && (e1->left.sym->flags & (SYMBOL_YES|SYMBOL_NO)))
+		return;
+	if (!expr_eq(e1, e2))
+		return;
+	trans_count++;
+	expr_free(e1); expr_free(e2);
+	switch (type) {
+	case E_OR:
+		e1 = expr_alloc_symbol(&symbol_no);
+		e2 = expr_alloc_symbol(&symbol_no);
+		break;
+	case E_AND:
+		e1 = expr_alloc_symbol(&symbol_yes);
+		e2 = expr_alloc_symbol(&symbol_yes);
+		break;
+	default:
+		;
+	}
+}
+
+void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
+{
+	if (!e1 || !e2)
+		return;
+	switch (e1->type) {
+	case E_OR:
+	case E_AND:
+		__expr_eliminate_eq(e1->type, ep1, ep2);
+	default:
+		;
+	}
+	if (e1->type != e2->type) switch (e2->type) {
+	case E_OR:
+	case E_AND:
+		__expr_eliminate_eq(e2->type, ep1, ep2);
+	default:
+		;
+	}
+	e1 = expr_eliminate_yn(e1);
+	e2 = expr_eliminate_yn(e2);
+}
+
+#undef e1
+#undef e2
+
+int expr_eq(struct expr *e1, struct expr *e2)
+{
+	int res, old_count;
+
+	if (e1->type != e2->type)
+		return 0;
+	switch (e1->type) {
+	case E_EQUAL:
+	case E_UNEQUAL:
+		return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym;
+	case E_SYMBOL:
+		return e1->left.sym == e2->left.sym;
+	case E_NOT:
+		return expr_eq(e1->left.expr, e2->left.expr);
+	case E_AND:
+	case E_OR:
+		e1 = expr_copy(e1);
+		e2 = expr_copy(e2);
+		old_count = trans_count;
+		expr_eliminate_eq(&e1, &e2);
+		res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
+		       e1->left.sym == e2->left.sym);
+		expr_free(e1);
+		expr_free(e2);
+		trans_count = old_count;
+		return res;
+	case E_CHOICE:
+	case E_RANGE:
+	case E_NONE:
+		/* panic */;
+	}
+
+	if (DEBUG_EXPR) {
+		expr_fprint(e1, stdout);
+		printf(" = ");
+		expr_fprint(e2, stdout);
+		printf(" ?\n");
+	}
+
+	return 0;
+}
+
+struct expr *expr_eliminate_yn(struct expr *e)
+{
+	struct expr *tmp;
+
+	if (e) switch (e->type) {
+	case E_AND:
+		e->left.expr = expr_eliminate_yn(e->left.expr);
+		e->right.expr = expr_eliminate_yn(e->right.expr);
+		if (e->left.expr->type == E_SYMBOL) {
+			if (e->left.expr->left.sym == &symbol_no) {
+				expr_free(e->left.expr);
+				expr_free(e->right.expr);
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_no;
+				e->right.expr = NULL;
+				return e;
+			} else if (e->left.expr->left.sym == &symbol_yes) {
+				free(e->left.expr);
+				tmp = e->right.expr;
+				*e = *(e->right.expr);
+				free(tmp);
+				return e;
+			}
+		}
+		if (e->right.expr->type == E_SYMBOL) {
+			if (e->right.expr->left.sym == &symbol_no) {
+				expr_free(e->left.expr);
+				expr_free(e->right.expr);
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_no;
+				e->right.expr = NULL;
+				return e;
+			} else if (e->right.expr->left.sym == &symbol_yes) {
+				free(e->right.expr);
+				tmp = e->left.expr;
+				*e = *(e->left.expr);
+				free(tmp);
+				return e;
+			}
+		}
+		break;
+	case E_OR:
+		e->left.expr = expr_eliminate_yn(e->left.expr);
+		e->right.expr = expr_eliminate_yn(e->right.expr);
+		if (e->left.expr->type == E_SYMBOL) {
+			if (e->left.expr->left.sym == &symbol_no) {
+				free(e->left.expr);
+				tmp = e->right.expr;
+				*e = *(e->right.expr);
+				free(tmp);
+				return e;
+			} else if (e->left.expr->left.sym == &symbol_yes) {
+				expr_free(e->left.expr);
+				expr_free(e->right.expr);
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_yes;
+				e->right.expr = NULL;
+				return e;
+			}
+		}
+		if (e->right.expr->type == E_SYMBOL) {
+			if (e->right.expr->left.sym == &symbol_no) {
+				free(e->right.expr);
+				tmp = e->left.expr;
+				*e = *(e->left.expr);
+				free(tmp);
+				return e;
+			} else if (e->right.expr->left.sym == &symbol_yes) {
+				expr_free(e->left.expr);
+				expr_free(e->right.expr);
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_yes;
+				e->right.expr = NULL;
+				return e;
+			}
+		}
+		break;
+	default:
+		;
+	}
+	return e;
+}
+
+/*
+ * bool FOO!=n => FOO
+ */
+struct expr *expr_trans_bool(struct expr *e)
+{
+	if (!e)
+		return NULL;
+	switch (e->type) {
+	case E_AND:
+	case E_OR:
+	case E_NOT:
+		e->left.expr = expr_trans_bool(e->left.expr);
+		e->right.expr = expr_trans_bool(e->right.expr);
+		break;
+	case E_UNEQUAL:
+		// FOO!=n -> FOO
+		if (e->left.sym->type == S_TRISTATE) {
+			if (e->right.sym == &symbol_no) {
+				e->type = E_SYMBOL;
+				e->right.sym = NULL;
+			}
+		}
+		break;
+	default:
+		;
+	}
+	return e;
+}
+
+/*
+ * e1 || e2 -> ?
+ */
+struct expr *expr_join_or(struct expr *e1, struct expr *e2)
+{
+	struct expr *tmp;
+	struct symbol *sym1, *sym2;
+
+	if (expr_eq(e1, e2))
+		return expr_copy(e1);
+	if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT)
+		return NULL;
+	if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
+		return NULL;
+	if (e1->type == E_NOT) {
+		tmp = e1->left.expr;
+		if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL)
+			return NULL;
+		sym1 = tmp->left.sym;
+	} else
+		sym1 = e1->left.sym;
+	if (e2->type == E_NOT) {
+		if (e2->left.expr->type != E_SYMBOL)
+			return NULL;
+		sym2 = e2->left.expr->left.sym;
+	} else
+		sym2 = e2->left.sym;
+	if (sym1 != sym2)
+		return NULL;
+	if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE)
+		return NULL;
+	if (sym1->type == S_TRISTATE) {
+		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
+		    ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
+		     (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
+			// (a='y') || (a='m') -> (a!='n')
+			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no);
+		}
+		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
+		    ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
+		     (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) {
+			// (a='y') || (a='n') -> (a!='m')
+			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod);
+		}
+		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
+		    ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
+		     (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) {
+			// (a='m') || (a='n') -> (a!='y')
+			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
+		}
+	}
+	if (sym1->type == S_BOOLEAN && sym1 == sym2) {
+		if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) ||
+		    (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL))
+			return expr_alloc_symbol(&symbol_yes);
+	}
+
+	if (DEBUG_EXPR) {
+		printf("optimize (");
+		expr_fprint(e1, stdout);
+		printf(") || (");
+		expr_fprint(e2, stdout);
+		printf(")?\n");
+	}
+	return NULL;
+}
+
+struct expr *expr_join_and(struct expr *e1, struct expr *e2)
+{
+	struct expr *tmp;
+	struct symbol *sym1, *sym2;
+
+	if (expr_eq(e1, e2))
+		return expr_copy(e1);
+	if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT)
+		return NULL;
+	if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
+		return NULL;
+	if (e1->type == E_NOT) {
+		tmp = e1->left.expr;
+		if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL)
+			return NULL;
+		sym1 = tmp->left.sym;
+	} else
+		sym1 = e1->left.sym;
+	if (e2->type == E_NOT) {
+		if (e2->left.expr->type != E_SYMBOL)
+			return NULL;
+		sym2 = e2->left.expr->left.sym;
+	} else
+		sym2 = e2->left.sym;
+	if (sym1 != sym2)
+		return NULL;
+	if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE)
+		return NULL;
+
+	if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
+	    (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
+		// (a) && (a='y') -> (a='y')
+		return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
+	if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) ||
+	    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no))
+		// (a) && (a!='n') -> (a)
+		return expr_alloc_symbol(sym1);
+
+	if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) ||
+	    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod))
+		// (a) && (a!='m') -> (a='y')
+		return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
+	if (sym1->type == S_TRISTATE) {
+		if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) {
+			// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
+			sym2 = e1->right.sym;
+			if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
+				return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
+							     : expr_alloc_symbol(&symbol_no);
+		}
+		if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) {
+			// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
+			sym2 = e2->right.sym;
+			if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
+				return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
+							     : expr_alloc_symbol(&symbol_no);
+		}
+		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
+			   ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
+			    (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
+			// (a!='y') && (a!='n') -> (a='m')
+			return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod);
+
+		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
+			   ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
+			    (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes)))
+			// (a!='y') && (a!='m') -> (a='n')
+			return expr_alloc_comp(E_EQUAL, sym1, &symbol_no);
+
+		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
+			   ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
+			    (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod)))
+			// (a!='m') && (a!='n') -> (a='m')
+			return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
+		if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
+		    (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) ||
+		    (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) ||
+		    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes))
+			return NULL;
+	}
+
+	if (DEBUG_EXPR) {
+		printf("optimize (");
+		expr_fprint(e1, stdout);
+		printf(") && (");
+		expr_fprint(e2, stdout);
+		printf(")?\n");
+	}
+	return NULL;
+}
+
+static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
+{
+#define e1 (*ep1)
+#define e2 (*ep2)
+	struct expr *tmp;
+
+	if (e1->type == type) {
+		expr_eliminate_dups1(type, &e1->left.expr, &e2);
+		expr_eliminate_dups1(type, &e1->right.expr, &e2);
+		return;
+	}
+	if (e2->type == type) {
+		expr_eliminate_dups1(type, &e1, &e2->left.expr);
+		expr_eliminate_dups1(type, &e1, &e2->right.expr);
+		return;
+	}
+	if (e1 == e2)
+		return;
+
+	switch (e1->type) {
+	case E_OR: case E_AND:
+		expr_eliminate_dups1(e1->type, &e1, &e1);
+	default:
+		;
+	}
+
+	switch (type) {
+	case E_OR:
+		tmp = expr_join_or(e1, e2);
+		if (tmp) {
+			expr_free(e1); expr_free(e2);
+			e1 = expr_alloc_symbol(&symbol_no);
+			e2 = tmp;
+			trans_count++;
+		}
+		break;
+	case E_AND:
+		tmp = expr_join_and(e1, e2);
+		if (tmp) {
+			expr_free(e1); expr_free(e2);
+			e1 = expr_alloc_symbol(&symbol_yes);
+			e2 = tmp;
+			trans_count++;
+		}
+		break;
+	default:
+		;
+	}
+#undef e1
+#undef e2
+}
+
+static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2)
+{
+#define e1 (*ep1)
+#define e2 (*ep2)
+	struct expr *tmp, *tmp1, *tmp2;
+
+	if (e1->type == type) {
+		expr_eliminate_dups2(type, &e1->left.expr, &e2);
+		expr_eliminate_dups2(type, &e1->right.expr, &e2);
+		return;
+	}
+	if (e2->type == type) {
+		expr_eliminate_dups2(type, &e1, &e2->left.expr);
+		expr_eliminate_dups2(type, &e1, &e2->right.expr);
+	}
+	if (e1 == e2)
+		return;
+
+	switch (e1->type) {
+	case E_OR:
+		expr_eliminate_dups2(e1->type, &e1, &e1);
+		// (FOO || BAR) && (!FOO && !BAR) -> n
+		tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
+		tmp2 = expr_copy(e2);
+		tmp = expr_extract_eq_and(&tmp1, &tmp2);
+		if (expr_is_yes(tmp1)) {
+			expr_free(e1);
+			e1 = expr_alloc_symbol(&symbol_no);
+			trans_count++;
+		}
+		expr_free(tmp2);
+		expr_free(tmp1);
+		expr_free(tmp);
+		break;
+	case E_AND:
+		expr_eliminate_dups2(e1->type, &e1, &e1);
+		// (FOO && BAR) || (!FOO || !BAR) -> y
+		tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
+		tmp2 = expr_copy(e2);
+		tmp = expr_extract_eq_or(&tmp1, &tmp2);
+		if (expr_is_no(tmp1)) {
+			expr_free(e1);
+			e1 = expr_alloc_symbol(&symbol_yes);
+			trans_count++;
+		}
+		expr_free(tmp2);
+		expr_free(tmp1);
+		expr_free(tmp);
+		break;
+	default:
+		;
+	}
+#undef e1
+#undef e2
+}
+
+struct expr *expr_eliminate_dups(struct expr *e)
+{
+	int oldcount;
+	if (!e)
+		return e;
+
+	oldcount = trans_count;
+	while (1) {
+		trans_count = 0;
+		switch (e->type) {
+		case E_OR: case E_AND:
+			expr_eliminate_dups1(e->type, &e, &e);
+			expr_eliminate_dups2(e->type, &e, &e);
+		default:
+			;
+		}
+		if (!trans_count)
+			break;
+		e = expr_eliminate_yn(e);
+	}
+	trans_count = oldcount;
+	return e;
+}
+
+struct expr *expr_transform(struct expr *e)
+{
+	struct expr *tmp;
+
+	if (!e)
+		return NULL;
+	switch (e->type) {
+	case E_EQUAL:
+	case E_UNEQUAL:
+	case E_SYMBOL:
+	case E_CHOICE:
+		break;
+	default:
+		e->left.expr = expr_transform(e->left.expr);
+		e->right.expr = expr_transform(e->right.expr);
+	}
+
+	switch (e->type) {
+	case E_EQUAL:
+		if (e->left.sym->type != S_BOOLEAN)
+			break;
+		if (e->right.sym == &symbol_no) {
+			e->type = E_NOT;
+			e->left.expr = expr_alloc_symbol(e->left.sym);
+			e->right.sym = NULL;
+			break;
+		}
+		if (e->right.sym == &symbol_mod) {
+			printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name);
+			e->type = E_SYMBOL;
+			e->left.sym = &symbol_no;
+			e->right.sym = NULL;
+			break;
+		}
+		if (e->right.sym == &symbol_yes) {
+			e->type = E_SYMBOL;
+			e->right.sym = NULL;
+			break;
+		}
+		break;
+	case E_UNEQUAL:
+		if (e->left.sym->type != S_BOOLEAN)
+			break;
+		if (e->right.sym == &symbol_no) {
+			e->type = E_SYMBOL;
+			e->right.sym = NULL;
+			break;
+		}
+		if (e->right.sym == &symbol_mod) {
+			printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name);
+			e->type = E_SYMBOL;
+			e->left.sym = &symbol_yes;
+			e->right.sym = NULL;
+			break;
+		}
+		if (e->right.sym == &symbol_yes) {
+			e->type = E_NOT;
+			e->left.expr = expr_alloc_symbol(e->left.sym);
+			e->right.sym = NULL;
+			break;
+		}
+		break;
+	case E_NOT:
+		switch (e->left.expr->type) {
+		case E_NOT:
+			// !!a -> a
+			tmp = e->left.expr->left.expr;
+			free(e->left.expr);
+			free(e);
+			e = tmp;
+			e = expr_transform(e);
+			break;
+		case E_EQUAL:
+		case E_UNEQUAL:
+			// !a='x' -> a!='x'
+			tmp = e->left.expr;
+			free(e);
+			e = tmp;
+			e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL;
+			break;
+		case E_OR:
+			// !(a || b) -> !a && !b
+			tmp = e->left.expr;
+			e->type = E_AND;
+			e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
+			tmp->type = E_NOT;
+			tmp->right.expr = NULL;
+			e = expr_transform(e);
+			break;
+		case E_AND:
+			// !(a && b) -> !a || !b
+			tmp = e->left.expr;
+			e->type = E_OR;
+			e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
+			tmp->type = E_NOT;
+			tmp->right.expr = NULL;
+			e = expr_transform(e);
+			break;
+		case E_SYMBOL:
+			if (e->left.expr->left.sym == &symbol_yes) {
+				// !'y' -> 'n'
+				tmp = e->left.expr;
+				free(e);
+				e = tmp;
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_no;
+				break;
+			}
+			if (e->left.expr->left.sym == &symbol_mod) {
+				// !'m' -> 'm'
+				tmp = e->left.expr;
+				free(e);
+				e = tmp;
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_mod;
+				break;
+			}
+			if (e->left.expr->left.sym == &symbol_no) {
+				// !'n' -> 'y'
+				tmp = e->left.expr;
+				free(e);
+				e = tmp;
+				e->type = E_SYMBOL;
+				e->left.sym = &symbol_yes;
+				break;
+			}
+			break;
+		default:
+			;
+		}
+		break;
+	default:
+		;
+	}
+	return e;
+}
+
+int expr_contains_symbol(struct expr *dep, struct symbol *sym)
+{
+	if (!dep)
+		return 0;
+
+	switch (dep->type) {
+	case E_AND:
+	case E_OR:
+		return expr_contains_symbol(dep->left.expr, sym) ||
+		       expr_contains_symbol(dep->right.expr, sym);
+	case E_SYMBOL:
+		return dep->left.sym == sym;
+	case E_EQUAL:
+	case E_UNEQUAL:
+		return dep->left.sym == sym ||
+		       dep->right.sym == sym;
+	case E_NOT:
+		return expr_contains_symbol(dep->left.expr, sym);
+	default:
+		;
+	}
+	return 0;
+}
+
+bool expr_depends_symbol(struct expr *dep, struct symbol *sym)
+{
+	if (!dep)
+		return false;
+
+	switch (dep->type) {
+	case E_AND:
+		return expr_depends_symbol(dep->left.expr, sym) ||
+		       expr_depends_symbol(dep->right.expr, sym);
+	case E_SYMBOL:
+		return dep->left.sym == sym;
+	case E_EQUAL:
+		if (dep->left.sym == sym) {
+			if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod)
+				return true;
+		}
+		break;
+	case E_UNEQUAL:
+		if (dep->left.sym == sym) {
+			if (dep->right.sym == &symbol_no)
+				return true;
+		}
+		break;
+	default:
+		;
+	}
+ 	return false;
+}
+
+struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2)
+{
+	struct expr *tmp = NULL;
+	expr_extract_eq(E_AND, &tmp, ep1, ep2);
+	if (tmp) {
+		*ep1 = expr_eliminate_yn(*ep1);
+		*ep2 = expr_eliminate_yn(*ep2);
+	}
+	return tmp;
+}
+
+struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2)
+{
+	struct expr *tmp = NULL;
+	expr_extract_eq(E_OR, &tmp, ep1, ep2);
+	if (tmp) {
+		*ep1 = expr_eliminate_yn(*ep1);
+		*ep2 = expr_eliminate_yn(*ep2);
+	}
+	return tmp;
+}
+
+void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2)
+{
+#define e1 (*ep1)
+#define e2 (*ep2)
+	if (e1->type == type) {
+		expr_extract_eq(type, ep, &e1->left.expr, &e2);
+		expr_extract_eq(type, ep, &e1->right.expr, &e2);
+		return;
+	}
+	if (e2->type == type) {
+		expr_extract_eq(type, ep, ep1, &e2->left.expr);
+		expr_extract_eq(type, ep, ep1, &e2->right.expr);
+		return;
+	}
+	if (expr_eq(e1, e2)) {
+		*ep = *ep ? expr_alloc_two(type, *ep, e1) : e1;
+		expr_free(e2);
+		if (type == E_AND) {
+			e1 = expr_alloc_symbol(&symbol_yes);
+			e2 = expr_alloc_symbol(&symbol_yes);
+		} else if (type == E_OR) {
+			e1 = expr_alloc_symbol(&symbol_no);
+			e2 = expr_alloc_symbol(&symbol_no);
+		}
+	}
+#undef e1
+#undef e2
+}
+
+struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym)
+{
+	struct expr *e1, *e2;
+
+	if (!e) {
+		e = expr_alloc_symbol(sym);
+		if (type == E_UNEQUAL)
+			e = expr_alloc_one(E_NOT, e);
+		return e;
+	}
+	switch (e->type) {
+	case E_AND:
+		e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
+		e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
+		if (sym == &symbol_yes)
+			e = expr_alloc_two(E_AND, e1, e2);
+		if (sym == &symbol_no)
+			e = expr_alloc_two(E_OR, e1, e2);
+		if (type == E_UNEQUAL)
+			e = expr_alloc_one(E_NOT, e);
+		return e;
+	case E_OR:
+		e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
+		e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
+		if (sym == &symbol_yes)
+			e = expr_alloc_two(E_OR, e1, e2);
+		if (sym == &symbol_no)
+			e = expr_alloc_two(E_AND, e1, e2);
+		if (type == E_UNEQUAL)
+			e = expr_alloc_one(E_NOT, e);
+		return e;
+	case E_NOT:
+		return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym);
+	case E_UNEQUAL:
+	case E_EQUAL:
+		if (type == E_EQUAL) {
+			if (sym == &symbol_yes)
+				return expr_copy(e);
+			if (sym == &symbol_mod)
+				return expr_alloc_symbol(&symbol_no);
+			if (sym == &symbol_no)
+				return expr_alloc_one(E_NOT, expr_copy(e));
+		} else {
+			if (sym == &symbol_yes)
+				return expr_alloc_one(E_NOT, expr_copy(e));
+			if (sym == &symbol_mod)
+				return expr_alloc_symbol(&symbol_yes);
+			if (sym == &symbol_no)
+				return expr_copy(e);
+		}
+		break;
+	case E_SYMBOL:
+		return expr_alloc_comp(type, e->left.sym, sym);
+	case E_CHOICE:
+	case E_RANGE:
+	case E_NONE:
+		/* panic */;
+	}
+	return NULL;
+}
+
+tristate expr_calc_value(struct expr *e)
+{
+	tristate val1, val2;
+	const char *str1, *str2;
+
+	if (!e)
+		return yes;
+
+	switch (e->type) {
+	case E_SYMBOL:
+		sym_calc_value(e->left.sym);
+		return e->left.sym->curr.tri;
+	case E_AND:
+		val1 = expr_calc_value(e->left.expr);
+		val2 = expr_calc_value(e->right.expr);
+		return E_AND(val1, val2);
+	case E_OR:
+		val1 = expr_calc_value(e->left.expr);
+		val2 = expr_calc_value(e->right.expr);
+		return E_OR(val1, val2);
+	case E_NOT:
+		val1 = expr_calc_value(e->left.expr);
+		return E_NOT(val1);
+	case E_EQUAL:
+		sym_calc_value(e->left.sym);
+		sym_calc_value(e->right.sym);
+		str1 = sym_get_string_value(e->left.sym);
+		str2 = sym_get_string_value(e->right.sym);
+		return !strcmp(str1, str2) ? yes : no;
+	case E_UNEQUAL:
+		sym_calc_value(e->left.sym);
+		sym_calc_value(e->right.sym);
+		str1 = sym_get_string_value(e->left.sym);
+		str2 = sym_get_string_value(e->right.sym);
+		return !strcmp(str1, str2) ? no : yes;
+	default:
+		printf("expr_calc_value: %d?\n", e->type);
+		return no;
+	}
+}
+
+int expr_compare_type(enum expr_type t1, enum expr_type t2)
+{
+#if 0
+	return 1;
+#else
+	if (t1 == t2)
+		return 0;
+	switch (t1) {
+	case E_EQUAL:
+	case E_UNEQUAL:
+		if (t2 == E_NOT)
+			return 1;
+	case E_NOT:
+		if (t2 == E_AND)
+			return 1;
+	case E_AND:
+		if (t2 == E_OR)
+			return 1;
+	case E_OR:
+		if (t2 == E_CHOICE)
+			return 1;
+	case E_CHOICE:
+		if (t2 == 0)
+			return 1;
+	default:
+		return -1;
+	}
+	printf("[%dgt%d?]", t1, t2);
+	return 0;
+#endif
+}
+
+void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken)
+{
+	if (!e) {
+		fn(data, "y");
+		return;
+	}
+
+	if (expr_compare_type(prevtoken, e->type) > 0)
+		fn(data, "(");
+	switch (e->type) {
+	case E_SYMBOL:
+		if (e->left.sym->name)
+			fn(data, e->left.sym->name);
+		else
+			fn(data, "<choice>");
+		break;
+	case E_NOT:
+		fn(data, "!");
+		expr_print(e->left.expr, fn, data, E_NOT);
+		break;
+	case E_EQUAL:
+		fn(data, e->left.sym->name);
+		fn(data, "=");
+		fn(data, e->right.sym->name);
+		break;
+	case E_UNEQUAL:
+		fn(data, e->left.sym->name);
+		fn(data, "!=");
+		fn(data, e->right.sym->name);
+		break;
+	case E_OR:
+		expr_print(e->left.expr, fn, data, E_OR);
+		fn(data, " || ");
+		expr_print(e->right.expr, fn, data, E_OR);
+		break;
+	case E_AND:
+		expr_print(e->left.expr, fn, data, E_AND);
+		fn(data, " && ");
+		expr_print(e->right.expr, fn, data, E_AND);
+		break;
+	case E_CHOICE:
+		fn(data, e->right.sym->name);
+		if (e->left.expr) {
+			fn(data, " ^ ");
+			expr_print(e->left.expr, fn, data, E_CHOICE);
+		}
+		break;
+	case E_RANGE:
+		fn(data, "[");
+		fn(data, e->left.sym->name);
+		fn(data, " ");
+		fn(data, e->right.sym->name);
+		fn(data, "]");
+		break;
+	default:
+	  {
+		char buf[32];
+		sprintf(buf, "<unknown type %d>", e->type);
+		fn(data, buf);
+		break;
+	  }
+	}
+	if (expr_compare_type(prevtoken, e->type) > 0)
+		fn(data, ")");
+}
+
+static void expr_print_file_helper(void *data, const char *str)
+{
+	fwrite(str, strlen(str), 1, data);
+}
+
+void expr_fprint(struct expr *e, FILE *out)
+{
+	expr_print(e, expr_print_file_helper, out, E_NONE);
+}
diff --git a/openwrt/package/config/expr.h b/openwrt/package/config/expr.h
new file mode 100644
index 0000000000..cac51f6a86
--- /dev/null
+++ b/openwrt/package/config/expr.h
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#ifndef EXPR_H
+#define EXPR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#ifndef __cplusplus
+#include <stdbool.h>
+#endif
+
+struct file {
+	struct file *next;
+	struct file *parent;
+	char *name;
+	int lineno;
+	int flags;
+};
+
+#define FILE_BUSY		0x0001
+#define FILE_SCANNED		0x0002
+#define FILE_PRINTED		0x0004
+
+typedef enum tristate {
+	no, mod, yes
+} tristate;
+
+enum expr_type {
+	E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE
+};
+
+union expr_data {
+	struct expr *expr;
+	struct symbol *sym;
+};
+
+struct expr {
+	enum expr_type type;
+	union expr_data left, right;
+};
+
+#define E_OR(dep1, dep2)	(((dep1)>(dep2))?(dep1):(dep2))
+#define E_AND(dep1, dep2)	(((dep1)<(dep2))?(dep1):(dep2))
+#define E_NOT(dep)		(2-(dep))
+
+struct expr_value {
+	struct expr *expr;
+	tristate tri;
+};
+
+struct symbol_value {
+	void *val;
+	tristate tri;
+};
+
+enum symbol_type {
+	S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
+};
+
+struct symbol {
+	struct symbol *next;
+	char *name;
+	char *help;
+	enum symbol_type type;
+	struct symbol_value curr, user;
+	tristate visible;
+	int flags;
+	struct property *prop;
+	struct expr *dep, *dep2;
+	struct expr_value rev_dep;
+};
+
+#define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
+
+#define SYMBOL_YES		0x0001
+#define SYMBOL_MOD		0x0002
+#define SYMBOL_NO		0x0004
+#define SYMBOL_CONST		0x0007
+#define SYMBOL_CHECK		0x0008
+#define SYMBOL_CHOICE		0x0010
+#define SYMBOL_CHOICEVAL	0x0020
+#define SYMBOL_PRINTED		0x0040
+#define SYMBOL_VALID		0x0080
+#define SYMBOL_OPTIONAL		0x0100
+#define SYMBOL_WRITE		0x0200
+#define SYMBOL_CHANGED		0x0400
+#define SYMBOL_NEW		0x0800
+#define SYMBOL_AUTO		0x1000
+#define SYMBOL_CHECKED		0x2000
+#define SYMBOL_CHECK_DONE	0x4000
+#define SYMBOL_WARNED		0x8000
+
+#define SYMBOL_MAXLENGTH	256
+#define SYMBOL_HASHSIZE		257
+#define SYMBOL_HASHMASK		0xff
+
+enum prop_type {
+	P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE
+};
+
+struct property {
+	struct property *next;
+	struct symbol *sym;
+	enum prop_type type;
+	const char *text;
+	struct expr_value visible;
+	struct expr *expr;
+	struct menu *menu;
+	struct file *file;
+	int lineno;
+};
+
+#define for_all_properties(sym, st, tok) \
+	for (st = sym->prop; st; st = st->next) \
+		if (st->type == (tok))
+#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT)
+#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE)
+#define for_all_prompts(sym, st) \
+	for (st = sym->prop; st; st = st->next) \
+		if (st->text)
+
+struct menu {
+	struct menu *next;
+	struct menu *parent;
+	struct menu *list;
+	struct symbol *sym;
+	struct property *prompt;
+	struct expr *dep;
+	unsigned int flags;
+	//char *help;
+	struct file *file;
+	int lineno;
+	void *data;
+};
+
+#define MENU_CHANGED		0x0001
+#define MENU_ROOT		0x0002
+
+#ifndef SWIG
+
+extern struct file *file_list;
+extern struct file *current_file;
+struct file *lookup_file(const char *name);
+
+extern struct symbol symbol_yes, symbol_no, symbol_mod;
+extern struct symbol *modules_sym;
+extern int cdebug;
+struct expr *expr_alloc_symbol(struct symbol *sym);
+struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
+struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2);
+struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
+struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
+struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
+struct expr *expr_copy(struct expr *org);
+void expr_free(struct expr *e);
+int expr_eq(struct expr *e1, struct expr *e2);
+void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
+tristate expr_calc_value(struct expr *e);
+struct expr *expr_eliminate_yn(struct expr *e);
+struct expr *expr_trans_bool(struct expr *e);
+struct expr *expr_eliminate_dups(struct expr *e);
+struct expr *expr_transform(struct expr *e);
+int expr_contains_symbol(struct expr *dep, struct symbol *sym);
+bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
+struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
+struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
+void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
+struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
+
+void expr_fprint(struct expr *e, FILE *out);
+
+static inline int expr_is_yes(struct expr *e)
+{
+	return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
+}
+
+static inline int expr_is_no(struct expr *e)
+{
+	return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EXPR_H */
diff --git a/openwrt/package/config/inputbox.c b/openwrt/package/config/inputbox.c
new file mode 100644
index 0000000000..fa7bebc693
--- /dev/null
+++ b/openwrt/package/config/inputbox.c
@@ -0,0 +1,240 @@
+/*
+ *  inputbox.c -- implements the input box
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+unsigned char dialog_input_result[MAX_LEN + 1];
+
+/*
+ *  Print the termination buttons
+ */
+static void
+print_buttons(WINDOW *dialog, int height, int width, int selected)
+{
+    int x = width / 2 - 11;
+    int y = height - 2;
+
+    print_button (dialog, "  Ok  ", y, x, selected==0);
+    print_button (dialog, " Help ", y, x + 14, selected==1);
+
+    wmove(dialog, y, x+1+14*selected);
+    wrefresh(dialog);
+}
+
+/*
+ * Display a dialog box for inputing a string
+ */
+int
+dialog_inputbox (const char *title, const char *prompt, int height, int width,
+		 const char *init)
+{
+    int i, x, y, box_y, box_x, box_width;
+    int input_x = 0, scroll = 0, key = 0, button = -1;
+    unsigned char *instr = dialog_input_result;
+    WINDOW *dialog;
+
+    /* center dialog box on screen */
+    x = (COLS - width) / 2;
+    y = (LINES - height) / 2;
+
+
+    draw_shadow (stdscr, y, x, height, width);
+
+    dialog = newwin (height, width, y, x);
+    keypad (dialog, TRUE);
+
+    draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
+    wattrset (dialog, border_attr);
+    mvwaddch (dialog, height-3, 0, ACS_LTEE);
+    for (i = 0; i < width - 2; i++)
+	waddch (dialog, ACS_HLINE);
+    wattrset (dialog, dialog_attr);
+    waddch (dialog, ACS_RTEE);
+
+    if (title != NULL && strlen(title) >= width-2 ) {
+	/* truncate long title -- mec */
+	char * title2 = malloc(width-2+1);
+	memcpy( title2, title, width-2 );
+	title2[width-2] = '\0';
+	title = title2;
+    }
+
+    if (title != NULL) {
+	wattrset (dialog, title_attr);
+	mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+	waddstr (dialog, (char *)title);
+	waddch (dialog, ' ');
+    }
+
+    wattrset (dialog, dialog_attr);
+    print_autowrap (dialog, prompt, width - 2, 1, 3);
+
+    /* Draw the input field box */
+    box_width = width - 6;
+    getyx (dialog, y, x);
+    box_y = y + 2;
+    box_x = (width - box_width) / 2;
+    draw_box (dialog, y + 1, box_x - 1, 3, box_width + 2,
+	      border_attr, dialog_attr);
+
+    print_buttons(dialog, height, width, 0);
+
+    /* Set up the initial value */
+    wmove (dialog, box_y, box_x);
+    wattrset (dialog, inputbox_attr);
+
+    if (!init)
+	instr[0] = '\0';
+    else
+	strcpy (instr, init);
+
+    input_x = strlen (instr);
+
+    if (input_x >= box_width) {
+	scroll = input_x - box_width + 1;
+	input_x = box_width - 1;
+	for (i = 0; i < box_width - 1; i++)
+	    waddch (dialog, instr[scroll + i]);
+    } else
+	waddstr (dialog, instr);
+
+    wmove (dialog, box_y, box_x + input_x);
+
+    wrefresh (dialog);
+
+    while (key != ESC) {
+	key = wgetch (dialog);
+
+	if (button == -1) {	/* Input box selected */
+	    switch (key) {
+	    case TAB:
+	    case KEY_UP:
+	    case KEY_DOWN:
+		break;
+	    case KEY_LEFT:
+		continue;
+	    case KEY_RIGHT:
+		continue;
+	    case KEY_BACKSPACE:
+	    case 127:
+		if (input_x || scroll) {
+		    wattrset (dialog, inputbox_attr);
+		    if (!input_x) {
+			scroll = scroll < box_width - 1 ?
+			    0 : scroll - (box_width - 1);
+			wmove (dialog, box_y, box_x);
+			for (i = 0; i < box_width; i++)
+			    waddch (dialog, instr[scroll + input_x + i] ?
+				    instr[scroll + input_x + i] : ' ');
+			input_x = strlen (instr) - scroll;
+		    } else
+			input_x--;
+		    instr[scroll + input_x] = '\0';
+		    mvwaddch (dialog, box_y, input_x + box_x, ' ');
+		    wmove (dialog, box_y, input_x + box_x);
+		    wrefresh (dialog);
+		}
+		continue;
+	    default:
+		if (key < 0x100 && isprint (key)) {
+		    if (scroll + input_x < MAX_LEN) {
+			wattrset (dialog, inputbox_attr);
+			instr[scroll + input_x] = key;
+			instr[scroll + input_x + 1] = '\0';
+			if (input_x == box_width - 1) {
+			    scroll++;
+			    wmove (dialog, box_y, box_x);
+			    for (i = 0; i < box_width - 1; i++)
+				waddch (dialog, instr[scroll + i]);
+			} else {
+			    wmove (dialog, box_y, input_x++ + box_x);
+			    waddch (dialog, key);
+			}
+			wrefresh (dialog);
+		    } else
+			flash ();	/* Alarm user about overflow */
+		    continue;
+		}
+	    }
+	}
+	switch (key) {
+	case 'O':
+	case 'o':
+	    delwin (dialog);
+	    return 0;
+	case 'H':
+	case 'h':
+	    delwin (dialog);
+	    return 1;
+	case KEY_UP:
+	case KEY_LEFT:
+	    switch (button) {
+	    case -1:
+		button = 1;	/* Indicates "Cancel" button is selected */
+		print_buttons(dialog, height, width, 1);
+		break;
+	    case 0:
+		button = -1;	/* Indicates input box is selected */
+		print_buttons(dialog, height, width, 0);
+		wmove (dialog, box_y, box_x + input_x);
+		wrefresh (dialog);
+		break;
+	    case 1:
+		button = 0;	/* Indicates "OK" button is selected */
+		print_buttons(dialog, height, width, 0);
+		break;
+	    }
+	    break;
+	case TAB:
+	case KEY_DOWN:
+	case KEY_RIGHT:
+	    switch (button) {
+	    case -1:
+		button = 0;	/* Indicates "OK" button is selected */
+		print_buttons(dialog, height, width, 0);
+		break;
+	    case 0:
+		button = 1;	/* Indicates "Cancel" button is selected */
+		print_buttons(dialog, height, width, 1);
+		break;
+	    case 1:
+		button = -1;	/* Indicates input box is selected */
+		print_buttons(dialog, height, width, 0);
+		wmove (dialog, box_y, box_x + input_x);
+		wrefresh (dialog);
+		break;
+	    }
+	    break;
+	case ' ':
+	case '\n':
+	    delwin (dialog);
+	    return (button == -1 ? 0 : button);
+	case 'X':
+	case 'x':
+	    key = ESC;
+	case ESC:
+	    break;
+	}
+    }
+
+    delwin (dialog);
+    return -1;			/* ESC pressed */
+}
diff --git a/openwrt/package/config/lex.zconf.c_shipped b/openwrt/package/config/lex.zconf.c_shipped
new file mode 100644
index 0000000000..b877bb6b3c
--- /dev/null
+++ b/openwrt/package/config/lex.zconf.c_shipped
@@ -0,0 +1,3688 @@
+
+#line 3 "lex.zconf.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 31
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_CONST
+
+#endif	/* __STDC__ */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE zconfrestart(zconfin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int zconfleng;
+
+extern FILE *zconfin, *zconfout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up zconftext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef unsigned int yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via zconfrestart()), so that the user can continue scanning by
+	 * just pointing zconfin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when zconftext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int zconfleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow zconfwrap()'s to do buffer switches
+ * instead of setting up a fresh zconfin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void zconfrestart (FILE *input_file  );
+void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size  );
+void zconf_delete_buffer (YY_BUFFER_STATE b  );
+void zconf_flush_buffer (YY_BUFFER_STATE b  );
+void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void zconfpop_buffer_state (void );
+
+static void zconfensure_buffer_stack (void );
+static void zconf_load_buffer_state (void );
+static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len  );
+
+void *zconfalloc (yy_size_t  );
+void *zconfrealloc (void *,yy_size_t  );
+void zconffree (void *  );
+
+#define yy_new_buffer zconf_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        zconfensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        zconfensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define zconfwrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int zconflineno;
+
+int zconflineno = 1;
+
+extern char *zconftext;
+#define yytext_ptr zconftext
+static yyconst flex_int16_t yy_nxt[][38] =
+    {
+    {
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0
+    },
+
+    {
+       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12
+    },
+
+    {
+       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12
+    },
+
+    {
+       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
+       16,   16,   16,   18,   16,   16,   18,   18,   19,   20,
+       21,   22,   18,   18,   23,   24,   18,   25,   18,   26,
+       27,   18,   28,   29,   30,   18,   18,   16
+    },
+
+    {
+       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
+       16,   16,   16,   18,   16,   16,   18,   18,   19,   20,
+       21,   22,   18,   18,   23,   24,   18,   25,   18,   26,
+       27,   18,   28,   29,   30,   18,   18,   16
+
+    },
+
+    {
+       11,   31,   32,   33,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31
+    },
+
+    {
+       11,   31,   32,   33,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31
+    },
+
+    {
+       11,   34,   34,   35,   34,   36,   34,   34,   36,   34,
+       34,   34,   34,   34,   34,   37,   34,   34,   34,   34,
+
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34
+    },
+
+    {
+       11,   34,   34,   35,   34,   36,   34,   34,   36,   34,
+       34,   34,   34,   34,   34,   37,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34
+    },
+
+    {
+       11,   38,   38,   39,   40,   41,   42,   43,   41,   44,
+       45,   46,   47,   47,   48,   49,   47,   47,   47,   47,
+       47,   47,   47,   47,   47,   50,   47,   47,   47,   51,
+       47,   47,   47,   47,   47,   47,   47,   52
+
+    },
+
+    {
+       11,   38,   38,   39,   40,   41,   42,   43,   41,   44,
+       45,   46,   47,   47,   48,   49,   47,   47,   47,   47,
+       47,   47,   47,   47,   47,   50,   47,   47,   47,   51,
+       47,   47,   47,   47,   47,   47,   47,   52
+    },
+
+    {
+      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
+      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
+      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
+      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11
+    },
+
+    {
+       11,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
+      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
+
+      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
+      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12
+    },
+
+    {
+       11,  -13,   53,   54,  -13,  -13,   55,  -13,  -13,  -13,
+      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
+      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
+      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13
+    },
+
+    {
+       11,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
+      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
+      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
+      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14
+
+    },
+
+    {
+       11,   56,   56,   57,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56
+    },
+
+    {
+       11,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
+      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
+      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
+      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16
+    },
+
+    {
+       11,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
+      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
+
+      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
+      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17
+    },
+
+    {
+       11,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
+      -18,  -18,  -18,   58,  -18,  -18,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -18
+    },
+
+    {
+       11,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
+      -19,  -19,  -19,   58,  -19,  -19,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   59,
+       58,   58,   58,   58,   58,   58,   58,  -19
+
+    },
+
+    {
+       11,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
+      -20,  -20,  -20,   58,  -20,  -20,   58,   58,   58,   58,
+       58,   58,   58,   58,   60,   58,   58,   58,   58,   61,
+       58,   58,   58,   58,   58,   58,   58,  -20
+    },
+
+    {
+       11,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
+      -21,  -21,  -21,   58,  -21,  -21,   58,   58,   58,   58,
+       58,   62,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -21
+    },
+
+    {
+       11,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
+      -22,  -22,  -22,   58,  -22,  -22,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   63,   58,
+       58,   58,   58,   58,   58,   58,   58,  -22
+    },
+
+    {
+       11,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
+      -23,  -23,  -23,   58,  -23,  -23,   58,   58,   58,   58,
+       58,   64,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -23
+    },
+
+    {
+       11,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
+      -24,  -24,  -24,   58,  -24,  -24,   58,   58,   58,   58,
+       58,   58,   65,   58,   58,   58,   58,   58,   66,   58,
+       58,   58,   58,   58,   58,   58,   58,  -24
+
+    },
+
+    {
+       11,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
+      -25,  -25,  -25,   58,  -25,  -25,   58,   67,   58,   58,
+       58,   68,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -25
+    },
+
+    {
+       11,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
+      -26,  -26,  -26,   58,  -26,  -26,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       69,   58,   58,   58,   58,   58,   58,  -26
+    },
+
+    {
+       11,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
+      -27,  -27,  -27,   58,  -27,  -27,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   70,   58,   58,   58,   58,  -27
+    },
+
+    {
+       11,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
+      -28,  -28,  -28,   58,  -28,  -28,   58,   71,   58,   58,
+       58,   72,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -28
+    },
+
+    {
+       11,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
+      -29,  -29,  -29,   58,  -29,  -29,   58,   58,   58,   58,
+       58,   73,   58,   58,   58,   58,   58,   58,   58,   74,
+       58,   58,   58,   58,   75,   58,   58,  -29
+
+    },
+
+    {
+       11,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
+      -30,  -30,  -30,   58,  -30,  -30,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   76,   58,   58,   58,   58,  -30
+    },
+
+    {
+       11,   77,   77,  -31,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77
+    },
+
+    {
+       11,  -32,   78,   79,  -32,  -32,  -32,  -32,  -32,  -32,
+      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
+
+      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
+      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32
+    },
+
+    {
+       11,   80,  -33,  -33,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80
+    },
+
+    {
+       11,   81,   81,   82,   81,  -34,   81,   81,  -34,   81,
+       81,   81,   81,   81,   81,  -34,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81
+
+    },
+
+    {
+       11,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
+      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
+      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
+      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35
+    },
+
+    {
+       11,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
+      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
+      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
+      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36
+    },
+
+    {
+       11,   83,   83,   84,   83,   83,   83,   83,   83,   83,
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
+
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
+       83,   83,   83,   83,   83,   83,   83,   83
+    },
+
+    {
+       11,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
+      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
+      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
+      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38
+    },
+
+    {
+       11,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
+      -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
+      -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
+      -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39
+
+    },
+
+    {
+       11,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
+      -40,  -40,  -40,  -40,   85,  -40,  -40,  -40,  -40,  -40,
+      -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
+      -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40
+    },
+
+    {
+       11,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
+      -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
+      -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
+      -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41
+    },
+
+    {
+       11,   86,   86,  -42,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86
+    },
+
+    {
+       11,  -43,  -43,  -43,  -43,  -43,  -43,   87,  -43,  -43,
+      -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
+      -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
+      -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43
+    },
+
+    {
+       11,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
+      -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
+      -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
+      -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44
+
+    },
+
+    {
+       11,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
+      -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
+      -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
+      -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45
+    },
+
+    {
+       11,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
+      -46,   88,   89,   89,  -46,  -46,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -46
+    },
+
+    {
+       11,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
+      -47,   89,   89,   89,  -47,  -47,   89,   89,   89,   89,
+
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -47
+    },
+
+    {
+       11,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
+      -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
+      -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
+      -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48
+    },
+
+    {
+       11,  -49,  -49,   90,  -49,  -49,  -49,  -49,  -49,  -49,
+      -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
+      -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
+      -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49
+
+    },
+
+    {
+       11,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
+      -50,   89,   89,   89,  -50,  -50,   89,   89,   89,   89,
+       89,   89,   91,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -50
+    },
+
+    {
+       11,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
+      -51,   89,   89,   89,  -51,  -51,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   92,   89,
+       89,   89,   89,   89,   89,   89,   89,  -51
+    },
+
+    {
+       11,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
+      -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
+
+      -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
+      -52,  -52,  -52,  -52,  -52,  -52,  -52,   93
+    },
+
+    {
+       11,  -53,   53,   54,  -53,  -53,   55,  -53,  -53,  -53,
+      -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
+      -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
+      -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53
+    },
+
+    {
+       11,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
+      -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
+      -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
+      -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54
+
+    },
+
+    {
+       11,   56,   56,   57,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56
+    },
+
+    {
+       11,   56,   56,   57,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   56,   56,   56,   56,   56,   56
+    },
+
+    {
+       11,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
+      -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
+
+      -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
+      -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57
+    },
+
+    {
+       11,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,
+      -58,  -58,  -58,   58,  -58,  -58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -58
+    },
+
+    {
+       11,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,
+      -59,  -59,  -59,   58,  -59,  -59,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   94,
+       58,   58,   58,   58,   58,   58,   58,  -59
+
+    },
+
+    {
+       11,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,
+      -60,  -60,  -60,   58,  -60,  -60,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   95,
+       58,   58,   58,   58,   58,   58,   58,  -60
+    },
+
+    {
+       11,  -61,  -61,  -61,  -61,  -61,  -61,  -61,  -61,  -61,
+      -61,  -61,  -61,   58,  -61,  -61,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   96,   97,   58,
+       58,   58,   58,   58,   58,   58,   58,  -61
+    },
+
+    {
+       11,  -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,
+      -62,  -62,  -62,   58,  -62,  -62,   58,   58,   58,   58,
+
+       58,   58,   98,   58,   58,   58,   58,   58,   58,   58,
+       99,   58,   58,   58,   58,   58,   58,  -62
+    },
+
+    {
+       11,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
+      -63,  -63,  -63,   58,  -63,  -63,   58,  100,   58,   58,
+      101,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -63
+    },
+
+    {
+       11,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
+      -64,  -64,  -64,   58,  -64,  -64,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  102,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  103,  -64
+
+    },
+
+    {
+       11,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
+      -65,  -65,  -65,   58,  -65,  -65,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -65
+    },
+
+    {
+       11,  -66,  -66,  -66,  -66,  -66,  -66,  -66,  -66,  -66,
+      -66,  -66,  -66,   58,  -66,  -66,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  104,   58,   58,  -66
+    },
+
+    {
+       11,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
+      -67,  -67,  -67,   58,  -67,  -67,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,  105,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -67
+    },
+
+    {
+       11,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
+      -68,  -68,  -68,   58,  -68,  -68,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  106,   58,
+       58,   58,   58,   58,   58,   58,   58,  -68
+    },
+
+    {
+       11,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
+      -69,  -69,  -69,   58,  -69,  -69,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  107,   58,   58,  -69
+
+    },
+
+    {
+       11,  -70,  -70,  -70,  -70,  -70,  -70,  -70,  -70,  -70,
+      -70,  -70,  -70,   58,  -70,  -70,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,  108,
+       58,   58,   58,   58,   58,   58,   58,  -70
+    },
+
+    {
+       11,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
+      -71,  -71,  -71,   58,  -71,  -71,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  109,   58,
+       58,   58,   58,   58,   58,   58,   58,  -71
+    },
+
+    {
+       11,  -72,  -72,  -72,  -72,  -72,  -72,  -72,  -72,  -72,
+      -72,  -72,  -72,   58,  -72,  -72,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,  110,   58,   58,   58,   58,   58,  -72
+    },
+
+    {
+       11,  -73,  -73,  -73,  -73,  -73,  -73,  -73,  -73,  -73,
+      -73,  -73,  -73,   58,  -73,  -73,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  111,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -73
+    },
+
+    {
+       11,  -74,  -74,  -74,  -74,  -74,  -74,  -74,  -74,  -74,
+      -74,  -74,  -74,   58,  -74,  -74,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  112,   58,  -74
+
+    },
+
+    {
+       11,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,
+      -75,  -75,  -75,   58,  -75,  -75,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,  113,   58,   58,   58,   58,  -75
+    },
+
+    {
+       11,  -76,  -76,  -76,  -76,  -76,  -76,  -76,  -76,  -76,
+      -76,  -76,  -76,   58,  -76,  -76,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  114,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -76
+    },
+
+    {
+       11,   77,   77,  -77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77
+    },
+
+    {
+       11,  -78,   78,   79,  -78,  -78,  -78,  -78,  -78,  -78,
+      -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,
+      -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,
+      -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78
+    },
+
+    {
+       11,   80,  -79,  -79,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+       80,   80,   80,   80,   80,   80,   80,   80
+
+    },
+
+    {
+       11,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,
+      -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,
+      -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,
+      -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80
+    },
+
+    {
+       11,   81,   81,   82,   81,  -81,   81,   81,  -81,   81,
+       81,   81,   81,   81,   81,  -81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81
+    },
+
+    {
+       11,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,
+      -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,
+
+      -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,
+      -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82
+    },
+
+    {
+       11,  -83,  -83,   84,  -83,  -83,  -83,  -83,  -83,  -83,
+      -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,
+      -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,
+      -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83
+    },
+
+    {
+       11,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,
+      -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,
+      -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,
+      -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84
+
+    },
+
+    {
+       11,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,
+      -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,
+      -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,
+      -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85
+    },
+
+    {
+       11,   86,   86,  -86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86
+    },
+
+    {
+       11,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,
+      -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,
+
+      -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,
+      -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87
+    },
+
+    {
+       11,  -88,  -88,  -88,  -88,  -88,  -88,  -88,  -88,  -88,
+      -88,  115,   89,   89,  -88,  -88,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -88
+    },
+
+    {
+       11,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
+      -89,   89,   89,   89,  -89,  -89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -89
+
+    },
+
+    {
+       11,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,
+      -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,
+      -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,
+      -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90
+    },
+
+    {
+       11,  -91,  -91,  -91,  -91,  -91,  -91,  -91,  -91,  -91,
+      -91,   89,   89,   89,  -91,  -91,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -91
+    },
+
+    {
+       11,  -92,  -92,  -92,  -92,  -92,  -92,  -92,  -92,  -92,
+      -92,   89,   89,   89,  -92,  -92,   89,   89,   89,   89,
+
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,  -92
+    },
+
+    {
+       11,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,
+      -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,
+      -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,
+      -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93
+    },
+
+    {
+       11,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,
+      -94,  -94,  -94,   58,  -94,  -94,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  116,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -94
+
+    },
+
+    {
+       11,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
+      -95,  -95,  -95,   58,  -95,  -95,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  117,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -95
+    },
+
+    {
+       11,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
+      -96,  -96,  -96,   58,  -96,  -96,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  118,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -96
+    },
+
+    {
+       11,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
+      -97,  -97,  -97,   58,  -97,  -97,   58,   58,   58,   58,
+
+       58,   58,  119,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -97
+    },
+
+    {
+       11,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
+      -98,  -98,  -98,   58,  -98,  -98,  120,  121,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -98
+    },
+
+    {
+       11,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
+      -99,  -99,  -99,   58,  -99,  -99,   58,   58,   58,   58,
+       58,  122,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  -99
+
+    },
+
+    {
+       11, -100, -100, -100, -100, -100, -100, -100, -100, -100,
+     -100, -100, -100,   58, -100, -100,   58,   58,  123,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -100
+    },
+
+    {
+       11, -101, -101, -101, -101, -101, -101, -101, -101, -101,
+     -101, -101, -101,   58, -101, -101,   58,   58,   58,  124,
+       58,   58,   58,   58,   58,  125,   58,  126,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -101
+    },
+
+    {
+       11, -102, -102, -102, -102, -102, -102, -102, -102, -102,
+     -102, -102, -102,   58, -102, -102,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+      127,   58,   58,   58,   58,   58,   58, -102
+    },
+
+    {
+       11, -103, -103, -103, -103, -103, -103, -103, -103, -103,
+     -103, -103, -103,   58, -103, -103,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -103
+    },
+
+    {
+       11, -104, -104, -104, -104, -104, -104, -104, -104, -104,
+     -104, -104, -104,   58, -104, -104,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -104
+
+    },
+
+    {
+       11, -105, -105, -105, -105, -105, -105, -105, -105, -105,
+     -105, -105, -105,   58, -105, -105,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  128,   58,
+       58,   58,   58,   58,   58,   58,   58, -105
+    },
+
+    {
+       11, -106, -106, -106, -106, -106, -106, -106, -106, -106,
+     -106, -106, -106,   58, -106, -106,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  129,   58, -106
+    },
+
+    {
+       11, -107, -107, -107, -107, -107, -107, -107, -107, -107,
+     -107, -107, -107,   58, -107, -107,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,  130,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -107
+    },
+
+    {
+       11, -108, -108, -108, -108, -108, -108, -108, -108, -108,
+     -108, -108, -108,   58, -108, -108,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  131,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -108
+    },
+
+    {
+       11, -109, -109, -109, -109, -109, -109, -109, -109, -109,
+     -109, -109, -109,   58, -109, -109,   58,   58,   58,   58,
+       58,   58,   58,  132,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -109
+
+    },
+
+    {
+       11, -110, -110, -110, -110, -110, -110, -110, -110, -110,
+     -110, -110, -110,   58, -110, -110,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  133,   58, -110
+    },
+
+    {
+       11, -111, -111, -111, -111, -111, -111, -111, -111, -111,
+     -111, -111, -111,   58, -111, -111,   58,   58,   58,   58,
+       58,  134,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -111
+    },
+
+    {
+       11, -112, -112, -112, -112, -112, -112, -112, -112, -112,
+     -112, -112, -112,   58, -112, -112,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,  135,   58,   58,   58,   58, -112
+    },
+
+    {
+       11, -113, -113, -113, -113, -113, -113, -113, -113, -113,
+     -113, -113, -113,   58, -113, -113,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  136,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -113
+    },
+
+    {
+       11, -114, -114, -114, -114, -114, -114, -114, -114, -114,
+     -114, -114, -114,   58, -114, -114,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,  137,   58,   58,   58, -114
+
+    },
+
+    {
+       11, -115, -115, -115, -115, -115, -115, -115, -115, -115,
+     -115,   89,   89,   89, -115, -115,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89, -115
+    },
+
+    {
+       11, -116, -116, -116, -116, -116, -116, -116, -116, -116,
+     -116, -116, -116,   58, -116, -116,   58,   58,   58,   58,
+       58,  138,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -116
+    },
+
+    {
+       11, -117, -117, -117, -117, -117, -117, -117, -117, -117,
+     -117, -117, -117,   58, -117, -117,   58,   58,   58,  139,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -117
+    },
+
+    {
+       11, -118, -118, -118, -118, -118, -118, -118, -118, -118,
+     -118, -118, -118,   58, -118, -118,   58,   58,   58,   58,
+       58,  140,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -118
+    },
+
+    {
+       11, -119, -119, -119, -119, -119, -119, -119, -119, -119,
+     -119, -119, -119,   58, -119, -119,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  141,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -119
+
+    },
+
+    {
+       11, -120, -120, -120, -120, -120, -120, -120, -120, -120,
+     -120, -120, -120,   58, -120, -120,   58,   58,  142,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  143,   58,   58, -120
+    },
+
+    {
+       11, -121, -121, -121, -121, -121, -121, -121, -121, -121,
+     -121, -121, -121,   58, -121, -121,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  144,   58, -121
+    },
+
+    {
+       11, -122, -122, -122, -122, -122, -122, -122, -122, -122,
+     -122, -122, -122,   58, -122, -122,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,  145,   58,
+       58,   58,   58,   58,   58,   58,   58, -122
+    },
+
+    {
+       11, -123, -123, -123, -123, -123, -123, -123, -123, -123,
+     -123, -123, -123,   58, -123, -123,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  146,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -123
+    },
+
+    {
+       11, -124, -124, -124, -124, -124, -124, -124, -124, -124,
+     -124, -124, -124,   58, -124, -124,   58,   58,   58,   58,
+       58,   58,   58,   58,  147,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -124
+
+    },
+
+    {
+       11, -125, -125, -125, -125, -125, -125, -125, -125, -125,
+     -125, -125, -125,   58, -125, -125,   58,   58,   58,   58,
+       58,   58,  148,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -125
+    },
+
+    {
+       11, -126, -126, -126, -126, -126, -126, -126, -126, -126,
+     -126, -126, -126,   58, -126, -126,   58,   58,   58,   58,
+       58,  149,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -126
+    },
+
+    {
+       11, -127, -127, -127, -127, -127, -127, -127, -127, -127,
+     -127, -127, -127,   58, -127, -127,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -127
+    },
+
+    {
+       11, -128, -128, -128, -128, -128, -128, -128, -128, -128,
+     -128, -128, -128,   58, -128, -128,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,  150,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -128
+    },
+
+    {
+       11, -129, -129, -129, -129, -129, -129, -129, -129, -129,
+     -129, -129, -129,   58, -129, -129,   58,   58,   58,  151,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -129
+
+    },
+
+    {
+       11, -130, -130, -130, -130, -130, -130, -130, -130, -130,
+     -130, -130, -130,   58, -130, -130,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,  152,
+       58,   58,   58,   58,   58,   58,   58, -130
+    },
+
+    {
+       11, -131, -131, -131, -131, -131, -131, -131, -131, -131,
+     -131, -131, -131,   58, -131, -131,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+      153,   58,   58,   58,   58,   58,   58, -131
+    },
+
+    {
+       11, -132, -132, -132, -132, -132, -132, -132, -132, -132,
+     -132, -132, -132,   58, -132, -132,   58,   58,   58,   58,
+
+       58,  154,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -132
+    },
+
+    {
+       11, -133, -133, -133, -133, -133, -133, -133, -133, -133,
+     -133, -133, -133,   58, -133, -133,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  155,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -133
+    },
+
+    {
+       11, -134, -134, -134, -134, -134, -134, -134, -134, -134,
+     -134, -134, -134,   58, -134, -134,   58,   58,   58,  156,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -134
+
+    },
+
+    {
+       11, -135, -135, -135, -135, -135, -135, -135, -135, -135,
+     -135, -135, -135,   58, -135, -135,   58,   58,   58,  157,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -135
+    },
+
+    {
+       11, -136, -136, -136, -136, -136, -136, -136, -136, -136,
+     -136, -136, -136,   58, -136, -136,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  158,   58,
+       58,   58,   58,   58,   58,   58,   58, -136
+    },
+
+    {
+       11, -137, -137, -137, -137, -137, -137, -137, -137, -137,
+     -137, -137, -137,   58, -137, -137,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  159,   58,   58, -137
+    },
+
+    {
+       11, -138, -138, -138, -138, -138, -138, -138, -138, -138,
+     -138, -138, -138,   58, -138, -138,   58,  160,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -138
+    },
+
+    {
+       11, -139, -139, -139, -139, -139, -139, -139, -139, -139,
+     -139, -139, -139,   58, -139, -139,   58,   58,   58,   58,
+       58,  161,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -139
+
+    },
+
+    {
+       11, -140, -140, -140, -140, -140, -140, -140, -140, -140,
+     -140, -140, -140,   58, -140, -140,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  162,   58,
+       58,   58,   58,   58,   58,   58,   58, -140
+    },
+
+    {
+       11, -141, -141, -141, -141, -141, -141, -141, -141, -141,
+     -141, -141, -141,   58, -141, -141,   58,   58,   58,   58,
+       58,   58,   58,  163,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -141
+    },
+
+    {
+       11, -142, -142, -142, -142, -142, -142, -142, -142, -142,
+     -142, -142, -142,   58, -142, -142,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,  164,
+       58,   58,   58,   58,   58,   58,   58, -142
+    },
+
+    {
+       11, -143, -143, -143, -143, -143, -143, -143, -143, -143,
+     -143, -143, -143,   58, -143, -143,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,  165,   58,   58,   58,   58, -143
+    },
+
+    {
+       11, -144, -144, -144, -144, -144, -144, -144, -144, -144,
+     -144, -144, -144,   58, -144, -144,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  166,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -144
+
+    },
+
+    {
+       11, -145, -145, -145, -145, -145, -145, -145, -145, -145,
+     -145, -145, -145,   58, -145, -145,   58,   58,   58,   58,
+      167,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -145
+    },
+
+    {
+       11, -146, -146, -146, -146, -146, -146, -146, -146, -146,
+     -146, -146, -146,   58, -146, -146,   58,   58,   58,   58,
+       58,  168,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -146
+    },
+
+    {
+       11, -147, -147, -147, -147, -147, -147, -147, -147, -147,
+     -147, -147, -147,   58, -147, -147,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,  169,
+       58,   58,   58,   58,   58,   58,   58, -147
+    },
+
+    {
+       11, -148, -148, -148, -148, -148, -148, -148, -148, -148,
+     -148, -148, -148,   58, -148, -148,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -148
+    },
+
+    {
+       11, -149, -149, -149, -149, -149, -149, -149, -149, -149,
+     -149, -149, -149,   58, -149, -149,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  170,   58,
+       58,   58,   58,   58,   58,   58,   58, -149
+
+    },
+
+    {
+       11, -150, -150, -150, -150, -150, -150, -150, -150, -150,
+     -150, -150, -150,   58, -150, -150,   58,   58,   58,   58,
+       58,  171,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -150
+    },
+
+    {
+       11, -151, -151, -151, -151, -151, -151, -151, -151, -151,
+     -151, -151, -151,   58, -151, -151,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,  172,
+       58,   58,   58,   58,   58,   58,   58, -151
+    },
+
+    {
+       11, -152, -152, -152, -152, -152, -152, -152, -152, -152,
+     -152, -152, -152,   58, -152, -152,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,  173,   58,
+       58,   58,   58,   58,   58,   58,   58, -152
+    },
+
+    {
+       11, -153, -153, -153, -153, -153, -153, -153, -153, -153,
+     -153, -153, -153,   58, -153, -153,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  174,   58,   58, -153
+    },
+
+    {
+       11, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+     -154, -154, -154,   58, -154, -154,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -154
+
+    },
+
+    {
+       11, -155, -155, -155, -155, -155, -155, -155, -155, -155,
+     -155, -155, -155,   58, -155, -155,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,  175,   58,   58,   58,   58, -155
+    },
+
+    {
+       11, -156, -156, -156, -156, -156, -156, -156, -156, -156,
+     -156, -156, -156,   58, -156, -156,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  176,   58,   58, -156
+    },
+
+    {
+       11, -157, -157, -157, -157, -157, -157, -157, -157, -157,
+     -157, -157, -157,   58, -157, -157,   58,   58,   58,   58,
+
+       58,  177,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -157
+    },
+
+    {
+       11, -158, -158, -158, -158, -158, -158, -158, -158, -158,
+     -158, -158, -158,   58, -158, -158,   58,   58,   58,   58,
+       58,   58,   58,  178,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -158
+    },
+
+    {
+       11, -159, -159, -159, -159, -159, -159, -159, -159, -159,
+     -159, -159, -159,   58, -159, -159,   58,  179,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -159
+
+    },
+
+    {
+       11, -160, -160, -160, -160, -160, -160, -160, -160, -160,
+     -160, -160, -160,   58, -160, -160,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  180,   58,
+       58,   58,   58,   58,   58,   58,   58, -160
+    },
+
+    {
+       11, -161, -161, -161, -161, -161, -161, -161, -161, -161,
+     -161, -161, -161,   58, -161, -161,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -161
+    },
+
+    {
+       11, -162, -162, -162, -162, -162, -162, -162, -162, -162,
+     -162, -162, -162,   58, -162, -162,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  181,   58,   58, -162
+    },
+
+    {
+       11, -163, -163, -163, -163, -163, -163, -163, -163, -163,
+     -163, -163, -163,   58, -163, -163,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -163
+    },
+
+    {
+       11, -164, -164, -164, -164, -164, -164, -164, -164, -164,
+     -164, -164, -164,   58, -164, -164,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,  182,
+       58,   58,   58,   58,   58,   58,   58, -164
+
+    },
+
+    {
+       11, -165, -165, -165, -165, -165, -165, -165, -165, -165,
+     -165, -165, -165,   58, -165, -165,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  183,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -165
+    },
+
+    {
+       11, -166, -166, -166, -166, -166, -166, -166, -166, -166,
+     -166, -166, -166,   58, -166, -166,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  184,   58,   58, -166
+    },
+
+    {
+       11, -167, -167, -167, -167, -167, -167, -167, -167, -167,
+     -167, -167, -167,   58, -167, -167,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,  185,   58,   58,   58, -167
+    },
+
+    {
+       11, -168, -168, -168, -168, -168, -168, -168, -168, -168,
+     -168, -168, -168,   58, -168, -168,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -168
+    },
+
+    {
+       11, -169, -169, -169, -169, -169, -169, -169, -169, -169,
+     -169, -169, -169,   58, -169, -169,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  186,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -169
+
+    },
+
+    {
+       11, -170, -170, -170, -170, -170, -170, -170, -170, -170,
+     -170, -170, -170,   58, -170, -170,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  187,   58, -170
+    },
+
+    {
+       11, -171, -171, -171, -171, -171, -171, -171, -171, -171,
+     -171, -171, -171,   58, -171, -171,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  188,   58,
+       58,   58,   58,   58,   58,   58,   58, -171
+    },
+
+    {
+       11, -172, -172, -172, -172, -172, -172, -172, -172, -172,
+     -172, -172, -172,   58, -172, -172,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,  189,   58,
+       58,   58,   58,   58,   58,   58,   58, -172
+    },
+
+    {
+       11, -173, -173, -173, -173, -173, -173, -173, -173, -173,
+     -173, -173, -173,   58, -173, -173,   58,  190,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -173
+    },
+
+    {
+       11, -174, -174, -174, -174, -174, -174, -174, -174, -174,
+     -174, -174, -174,   58, -174, -174,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -174
+
+    },
+
+    {
+       11, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+     -175, -175, -175,   58, -175, -175,   58,   58,   58,   58,
+       58,  191,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -175
+    },
+
+    {
+       11, -176, -176, -176, -176, -176, -176, -176, -176, -176,
+     -176, -176, -176,   58, -176, -176,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -176
+    },
+
+    {
+       11, -177, -177, -177, -177, -177, -177, -177, -177, -177,
+     -177, -177, -177,   58, -177, -177,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -177
+    },
+
+    {
+       11, -178, -178, -178, -178, -178, -178, -178, -178, -178,
+     -178, -178, -178,   58, -178, -178,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -178
+    },
+
+    {
+       11, -179, -179, -179, -179, -179, -179, -179, -179, -179,
+     -179, -179, -179,   58, -179, -179,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  192,   58,   58, -179
+
+    },
+
+    {
+       11, -180, -180, -180, -180, -180, -180, -180, -180, -180,
+     -180, -180, -180,   58, -180, -180,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -180
+    },
+
+    {
+       11, -181, -181, -181, -181, -181, -181, -181, -181, -181,
+     -181, -181, -181,   58, -181, -181,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -181
+    },
+
+    {
+       11, -182, -182, -182, -182, -182, -182, -182, -182, -182,
+     -182, -182, -182,   58, -182, -182,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,  193,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -182
+    },
+
+    {
+       11, -183, -183, -183, -183, -183, -183, -183, -183, -183,
+     -183, -183, -183,   58, -183, -183,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,  194,   58,   58,   58, -183
+    },
+
+    {
+       11, -184, -184, -184, -184, -184, -184, -184, -184, -184,
+     -184, -184, -184,   58, -184, -184,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -184
+
+    },
+
+    {
+       11, -185, -185, -185, -185, -185, -185, -185, -185, -185,
+     -185, -185, -185,   58, -185, -185,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -185
+    },
+
+    {
+       11, -186, -186, -186, -186, -186, -186, -186, -186, -186,
+     -186, -186, -186,   58, -186, -186,   58,   58,   58,  195,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -186
+    },
+
+    {
+       11, -187, -187, -187, -187, -187, -187, -187, -187, -187,
+     -187, -187, -187,   58, -187, -187,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -187
+    },
+
+    {
+       11, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+     -188, -188, -188,   58, -188, -188,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,  196,   58, -188
+    },
+
+    {
+       11, -189, -189, -189, -189, -189, -189, -189, -189, -189,
+     -189, -189, -189,   58, -189, -189,   58,   58,   58,   58,
+       58,   58,  197,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -189
+
+    },
+
+    {
+       11, -190, -190, -190, -190, -190, -190, -190, -190, -190,
+     -190, -190, -190,   58, -190, -190,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,  198,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -190
+    },
+
+    {
+       11, -191, -191, -191, -191, -191, -191, -191, -191, -191,
+     -191, -191, -191,   58, -191, -191,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,  199,   58,   58,   58, -191
+    },
+
+    {
+       11, -192, -192, -192, -192, -192, -192, -192, -192, -192,
+     -192, -192, -192,   58, -192, -192,   58,   58,   58,   58,
+
+       58,  200,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -192
+    },
+
+    {
+       11, -193, -193, -193, -193, -193, -193, -193, -193, -193,
+     -193, -193, -193,   58, -193, -193,   58,   58,   58,   58,
+       58,  201,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -193
+    },
+
+    {
+       11, -194, -194, -194, -194, -194, -194, -194, -194, -194,
+     -194, -194, -194,   58, -194, -194,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  202,   58,   58, -194
+
+    },
+
+    {
+       11, -195, -195, -195, -195, -195, -195, -195, -195, -195,
+     -195, -195, -195,   58, -195, -195,   58,   58,   58,   58,
+       58,  203,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -195
+    },
+
+    {
+       11, -196, -196, -196, -196, -196, -196, -196, -196, -196,
+     -196, -196, -196,   58, -196, -196,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -196
+    },
+
+    {
+       11, -197, -197, -197, -197, -197, -197, -197, -197, -197,
+     -197, -197, -197,   58, -197, -197,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,  204,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -197
+    },
+
+    {
+       11, -198, -198, -198, -198, -198, -198, -198, -198, -198,
+     -198, -198, -198,   58, -198, -198,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -198
+    },
+
+    {
+       11, -199, -199, -199, -199, -199, -199, -199, -199, -199,
+     -199, -199, -199,   58, -199, -199,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -199
+
+    },
+
+    {
+       11, -200, -200, -200, -200, -200, -200, -200, -200, -200,
+     -200, -200, -200,   58, -200, -200,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -200
+    },
+
+    {
+       11, -201, -201, -201, -201, -201, -201, -201, -201, -201,
+     -201, -201, -201,   58, -201, -201,   58,  205,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -201
+    },
+
+    {
+       11, -202, -202, -202, -202, -202, -202, -202, -202, -202,
+     -202, -202, -202,   58, -202, -202,   58,  206,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -202
+    },
+
+    {
+       11, -203, -203, -203, -203, -203, -203, -203, -203, -203,
+     -203, -203, -203,   58, -203, -203,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -203
+    },
+
+    {
+       11, -204, -204, -204, -204, -204, -204, -204, -204, -204,
+     -204, -204, -204,   58, -204, -204,   58,   58,   58,   58,
+       58,   58,   58,  207,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -204
+
+    },
+
+    {
+       11, -205, -205, -205, -205, -205, -205, -205, -205, -205,
+     -205, -205, -205,   58, -205, -205,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,  208,   58,
+       58,   58,   58,   58,   58,   58,   58, -205
+    },
+
+    {
+       11, -206, -206, -206, -206, -206, -206, -206, -206, -206,
+     -206, -206, -206,   58, -206, -206,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,  209,   58,   58, -206
+    },
+
+    {
+       11, -207, -207, -207, -207, -207, -207, -207, -207, -207,
+     -207, -207, -207,   58, -207, -207,   58,   58,   58,   58,
+
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -207
+    },
+
+    {
+       11, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+     -208, -208, -208,   58, -208, -208,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -208
+    },
+
+    {
+       11, -209, -209, -209, -209, -209, -209, -209, -209, -209,
+     -209, -209, -209,   58, -209, -209,   58,   58,   58,   58,
+       58,  210,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -209
+
+    },
+
+    {
+       11, -210, -210, -210, -210, -210, -210, -210, -210, -210,
+     -210, -210, -210,   58, -210, -210,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   58,   58, -210
+    },
+
+    } ;
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up zconftext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	zconfleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 64
+#define YY_END_OF_BUFFER 65
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[211] =
+    {   0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       65,    5,    4,    3,    2,   36,   37,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       63,   60,   62,   55,   59,   58,   57,   53,   48,   42,
+       47,   51,   53,   40,   41,   50,   50,   43,   53,   50,
+       50,   53,    4,    3,    2,    2,    1,   35,   35,   35,
+       35,   35,   35,   35,   16,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   63,   60,   62,   61,
+       55,   54,   57,   56,   44,   51,   38,   50,   50,   52,
+       45,   46,   39,   35,   35,   35,   35,   35,   35,   35,
+
+       35,   35,   30,   29,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   49,   25,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   15,   35,    7,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   17,   35,   35,
+       35,   35,   35,   34,   35,   35,   35,   35,   35,   35,
+       10,   35,   13,   35,   35,   35,   35,   33,   35,   35,
+       35,   35,   35,   22,   35,   32,    9,   31,   35,   26,
+       12,   35,   35,   21,   18,   35,    8,   35,   35,   35,
+       35,   35,   27,   35,   35,    6,   35,   20,   19,   23,
+
+       35,   35,   11,   35,   35,   35,   14,   28,   35,   24
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    4,    5,    6,    1,    1,    7,    8,    9,
+       10,    1,    1,    1,   11,   12,   12,   13,   13,   13,
+       13,   13,   13,   13,   13,   13,   13,    1,    1,    1,
+       14,    1,    1,    1,   13,   13,   13,   13,   13,   13,
+       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+        1,   15,    1,    1,   16,    1,   17,   18,   19,   20,
+
+       21,   22,   23,   24,   25,   13,   13,   26,   27,   28,
+       29,   30,   31,   32,   33,   34,   35,   13,   13,   36,
+       13,   13,    1,   37,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+extern int zconf_flex_debug;
+int zconf_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *zconftext;
+
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+#define START_STRSIZE	16
+
+char *text;
+static char *text_ptr;
+static int text_size, text_asize;
+
+struct buffer {
+        struct buffer *parent;
+        YY_BUFFER_STATE state;
+};
+
+struct buffer *current_buf;
+
+static int last_ts, first_ts;
+
+static void zconf_endhelp(void);
+static struct buffer *zconf_endfile(void);
+
+void new_string(void)
+{
+	text = malloc(START_STRSIZE);
+	text_asize = START_STRSIZE;
+	text_ptr = text;
+	text_size = 0;
+	*text_ptr = 0;
+}
+
+void append_string(const char *str, int size)
+{
+	int new_size = text_size + size + 1;
+	if (new_size > text_asize) {
+		text = realloc(text, new_size);
+		text_asize = new_size;
+		text_ptr = text + text_size;
+	}
+	memcpy(text_ptr, str, size);
+	text_ptr += size;
+	text_size += size;
+	*text_ptr = 0;
+}
+
+void alloc_string(const char *str, int size)
+{
+	text = malloc(size + 1);
+	memcpy(text, str, size);
+	text[size] = 0;
+}
+
+#define INITIAL 0
+#define COMMAND 1
+#define HELP 2
+#define STRING 3
+#define PARAM 4
+
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int zconfwrap (void );
+#else
+extern int zconfwrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( zconftext, zconfleng, 1, zconfout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	errno=0; \
+	while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
+	{ \
+		if( errno != EINTR) \
+		{ \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+			break; \
+		} \
+		errno=0; \
+		clearerr(zconfin); \
+	}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int zconflex (void);
+
+#define YY_DECL int zconflex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after zconftext and zconfleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+
+	int str = 0;
+	int ts, i;
+
+	if ( (yy_init) )
+		{
+		(yy_init) = 0;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! zconfin )
+			zconfin = stdin;
+
+		if ( ! zconfout )
+			zconfout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			zconfensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				zconf_create_buffer(zconfin,YY_BUF_SIZE );
+		}
+
+		zconf_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of zconftext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+yy_match:
+		while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)]  ]) > 0 )
+			++yy_cp;
+
+		yy_current_state = -yy_current_state;
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+case 1:
+/* rule 1 can match eol */
+YY_RULE_SETUP
+current_file->lineno++;
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+
+	YY_BREAK
+case 3:
+/* rule 3 can match eol */
+YY_RULE_SETUP
+current_file->lineno++; return T_EOL;
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+{
+	BEGIN(COMMAND);
+}
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{
+	unput(zconftext[0]);
+	BEGIN(COMMAND);
+}
+	YY_BREAK
+
+case 6:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_MAINMENU;
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_MENU;
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_ENDMENU;
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_SOURCE;
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_CHOICE;
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_ENDCHOICE;
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_COMMENT;
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_CONFIG;
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_MENUCONFIG;
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_HELP;
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_IF;
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_ENDIF;
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_DEPENDS;
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_REQUIRES;
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_OPTIONAL;
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_DEFAULT;
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_PROMPT;
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_TRISTATE;
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_DEF_TRISTATE;
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_BOOLEAN;
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_BOOLEAN;
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_DEF_BOOLEAN;
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_DEF_BOOLEAN;
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_INT;
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_HEX;
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_STRING;
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_SELECT;
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_SELECT;
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+BEGIN(PARAM); return T_RANGE;
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+{
+		alloc_string(zconftext, zconfleng);
+		zconflval.string = text;
+		return T_WORD;
+	}
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+
+	YY_BREAK
+case 37:
+/* rule 37 can match eol */
+YY_RULE_SETUP
+current_file->lineno++; BEGIN(INITIAL);
+	YY_BREAK
+
+case 38:
+YY_RULE_SETUP
+return T_AND;
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+return T_OR;
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+return T_OPEN_PAREN;
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+return T_CLOSE_PAREN;
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+return T_NOT;
+	YY_BREAK
+case 43:
+YY_RULE_SETUP
+return T_EQUAL;
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+return T_UNEQUAL;
+	YY_BREAK
+case 45:
+YY_RULE_SETUP
+return T_IF;
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+return T_ON;
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+{
+		str = zconftext[0];
+		new_string();
+		BEGIN(STRING);
+	}
+	YY_BREAK
+case 48:
+/* rule 48 can match eol */
+YY_RULE_SETUP
+BEGIN(INITIAL); current_file->lineno++; return T_EOL;
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+/* ignore */
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+{
+		alloc_string(zconftext, zconfleng);
+		zconflval.string = text;
+		return T_WORD;
+	}
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+/* comment */
+	YY_BREAK
+case 52:
+/* rule 52 can match eol */
+YY_RULE_SETUP
+current_file->lineno++;
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+
+	YY_BREAK
+case YY_STATE_EOF(PARAM):
+{
+		BEGIN(INITIAL);
+	}
+	YY_BREAK
+
+case 54:
+/* rule 54 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up zconftext again */
+YY_RULE_SETUP
+{
+		append_string(zconftext, zconfleng);
+		zconflval.string = text;
+		return T_WORD_QUOTE;
+	}
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+{
+		append_string(zconftext, zconfleng);
+	}
+	YY_BREAK
+case 56:
+/* rule 56 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up zconftext again */
+YY_RULE_SETUP
+{
+		append_string(zconftext + 1, zconfleng - 1);
+		zconflval.string = text;
+		return T_WORD_QUOTE;
+	}
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
+{
+		append_string(zconftext + 1, zconfleng - 1);
+	}
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+{
+		if (str == zconftext[0]) {
+			BEGIN(PARAM);
+			zconflval.string = text;
+			return T_WORD_QUOTE;
+		} else
+			append_string(zconftext, 1);
+	}
+	YY_BREAK
+case 59:
+/* rule 59 can match eol */
+YY_RULE_SETUP
+{
+		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
+		current_file->lineno++;
+		BEGIN(INITIAL);
+		return T_EOL;
+	}
+	YY_BREAK
+case YY_STATE_EOF(STRING):
+{
+		BEGIN(INITIAL);
+	}
+	YY_BREAK
+
+case 60:
+YY_RULE_SETUP
+{
+		ts = 0;
+		for (i = 0; i < zconfleng; i++) {
+			if (zconftext[i] == '\t')
+				ts = (ts & ~7) + 8;
+			else
+				ts++;
+		}
+		last_ts = ts;
+		if (first_ts) {
+			if (ts < first_ts) {
+				zconf_endhelp();
+				return T_HELPTEXT;
+			}
+			ts -= first_ts;
+			while (ts > 8) {
+				append_string("        ", 8);
+				ts -= 8;
+			}
+			append_string("        ", ts);
+		}
+	}
+	YY_BREAK
+case 61:
+/* rule 61 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up zconftext again */
+YY_RULE_SETUP
+{
+		current_file->lineno++;
+		zconf_endhelp();
+		return T_HELPTEXT;
+	}
+	YY_BREAK
+case 62:
+/* rule 62 can match eol */
+YY_RULE_SETUP
+{
+		current_file->lineno++;
+		append_string("\n", 1);
+	}
+	YY_BREAK
+case 63:
+YY_RULE_SETUP
+{
+		append_string(zconftext, zconfleng);
+		if (!first_ts)
+			first_ts = last_ts;
+	}
+	YY_BREAK
+case YY_STATE_EOF(HELP):
+{
+		zconf_endhelp();
+		return T_HELPTEXT;
+	}
+	YY_BREAK
+
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(COMMAND):
+{
+	if (current_buf) {
+		zconf_endfile();
+		return T_EOF;
+	}
+	fclose(zconfin);
+	yyterminate();
+}
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+YY_FATAL_ERROR( "flex scanner jammed" );
+	YY_BREAK
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed zconfin at a new source and called
+			 * zconflex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( zconfwrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * zconftext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of zconflex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			size_t num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			zconfrestart(zconfin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+
+	yy_current_state = yy_nxt[yy_current_state][1];
+	yy_is_jam = (yy_current_state <= 0);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up zconftext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			int offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					zconfrestart(zconfin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( zconfwrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve zconftext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void zconfrestart  (FILE * input_file )
+{
+
+	if ( ! YY_CURRENT_BUFFER ){
+        zconfensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            zconf_create_buffer(zconfin,YY_BUF_SIZE );
+	}
+
+	zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
+	zconf_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+    void zconf_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		zconfpop_buffer_state();
+	 *		zconfpush_buffer_state(new_buffer);
+     */
+	zconfensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	zconf_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (zconfwrap()) processing, but the only time this flag
+	 * is looked at is after zconfwrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void zconf_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE zconf_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+
+	b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	zconf_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with zconf_create_buffer()
+ *
+ */
+    void zconf_delete_buffer (YY_BUFFER_STATE  b )
+{
+
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		zconffree((void *) b->yy_ch_buf  );
+
+	zconffree((void *) b  );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a zconfrestart() or at EOF.
+ */
+    static void zconf_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+
+	zconf_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then zconf_init_buffer was _probably_
+     * called from zconfrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = 0;
+
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+    void zconf_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		zconf_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *
+ */
+void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	zconfensure_buffer_stack();
+
+	/* This block is copied from zconf_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from zconf_switch_to_buffer. */
+	zconf_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *
+ */
+void zconfpop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	zconf_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		zconf_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void zconfensure_buffer_stack (void)
+{
+	int num_to_alloc;
+
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE zconf_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	zconf_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to zconflex() will
+ * scan from a @e copy of @a str.
+ * @param str a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       zconf_scan_bytes() instead.
+ */
+YY_BUFFER_STATE zconf_scan_string (yyconst char * str )
+{
+
+	return zconf_scan_bytes(str,strlen(str) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE zconf_scan_bytes  (yyconst char * bytes, int  len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = len + 2;
+	buf = (char *) zconfalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
+
+	for ( i = 0; i < len; ++i )
+		buf[i] = bytes[i];
+
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = zconf_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up zconftext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		zconftext[zconfleng] = (yy_hold_char); \
+		(yy_c_buf_p) = zconftext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		zconfleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int zconfget_lineno  (void)
+{
+
+    return zconflineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *zconfget_in  (void)
+{
+        return zconfin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *zconfget_out  (void)
+{
+        return zconfout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+int zconfget_leng  (void)
+{
+        return zconfleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *zconfget_text  (void)
+{
+        return zconftext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void zconfset_lineno (int  line_number )
+{
+
+    zconflineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see zconf_switch_to_buffer
+ */
+void zconfset_in (FILE *  in_str )
+{
+        zconfin = in_str ;
+}
+
+void zconfset_out (FILE *  out_str )
+{
+        zconfout = out_str ;
+}
+
+int zconfget_debug  (void)
+{
+        return zconf_flex_debug;
+}
+
+void zconfset_debug (int  bdebug )
+{
+        zconf_flex_debug = bdebug ;
+}
+
+/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
+int zconflex_destroy  (void)
+{
+
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		zconf_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		zconfpop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	zconffree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+    	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+    	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *zconfalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *zconfrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void zconffree (void * ptr )
+{
+	free( (char *) ptr );	/* see zconfrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#undef YY_NEW_FILE
+#undef YY_FLUSH_BUFFER
+#undef yy_set_bol
+#undef yy_new_buffer
+#undef yy_set_interactive
+#undef yytext_ptr
+#undef YY_DO_BEFORE_ACTION
+
+#ifdef YY_DECL_IS_OURS
+#undef YY_DECL_IS_OURS
+#undef YY_DECL
+#endif
+
+void zconf_starthelp(void)
+{
+	new_string();
+	last_ts = first_ts = 0;
+	BEGIN(HELP);
+}
+
+static void zconf_endhelp(void)
+{
+	zconflval.string = text;
+	BEGIN(INITIAL);
+}
+
+/*
+ * Try to open specified file with following names:
+ * ./name
+ * $(srctree)/name
+ * The latter is used when srctree is separate from objtree
+ * when compiling the kernel.
+ * Return NULL if file is not found.
+ */
+FILE *zconf_fopen(const char *name)
+{
+	char *env, fullname[PATH_MAX+1];
+	FILE *f;
+
+	f = fopen(name, "r");
+	if (!f && name[0] != '/') {
+		env = getenv(SRCTREE);
+		if (env) {
+			sprintf(fullname, "%s/%s", env, name);
+			f = fopen(fullname, "r");
+		}
+	}
+	return f;
+}
+
+void zconf_initscan(const char *name)
+{
+	zconfin = zconf_fopen(name);
+	if (!zconfin) {
+		printf("can't find file %s\n", name);
+		exit(1);
+	}
+
+	current_buf = malloc(sizeof(*current_buf));
+	memset(current_buf, 0, sizeof(*current_buf));
+
+	current_file = file_lookup(name);
+	current_file->lineno = 1;
+	current_file->flags = FILE_BUSY;
+}
+
+void zconf_nextfile(const char *name)
+{
+	struct file *file = file_lookup(name);
+	struct buffer *buf = malloc(sizeof(*buf));
+	memset(buf, 0, sizeof(*buf));
+
+	current_buf->state = YY_CURRENT_BUFFER;
+	zconfin = zconf_fopen(name);
+	if (!zconfin) {
+		printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+		exit(1);
+	}
+	zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
+	buf->parent = current_buf;
+	current_buf = buf;
+
+	if (file->flags & FILE_BUSY) {
+		printf("recursive scan (%s)?\n", name);
+		exit(1);
+	}
+	if (file->flags & FILE_SCANNED) {
+		printf("file %s already scanned?\n", name);
+		exit(1);
+	}
+	file->flags |= FILE_BUSY;
+	file->lineno = 1;
+	file->parent = current_file;
+	current_file = file;
+}
+
+static struct buffer *zconf_endfile(void)
+{
+	struct buffer *parent;
+
+	current_file->flags |= FILE_SCANNED;
+	current_file->flags &= ~FILE_BUSY;
+	current_file = current_file->parent;
+
+	parent = current_buf->parent;
+	if (parent) {
+		fclose(zconfin);
+		zconf_delete_buffer(YY_CURRENT_BUFFER);
+		zconf_switch_to_buffer(parent->state);
+	}
+	free(current_buf);
+	current_buf = parent;
+
+	return parent;
+}
+
+int zconf_lineno(void)
+{
+	if (current_buf)
+		return current_file->lineno - 1;
+	else
+		return 0;
+}
+
+char *zconf_curname(void)
+{
+	if (current_buf)
+		return current_file->name;
+	else
+		return "<none>";
+}
+
diff --git a/openwrt/package/config/lkc.h b/openwrt/package/config/lkc.h
new file mode 100644
index 0000000000..dd040f7a86
--- /dev/null
+++ b/openwrt/package/config/lkc.h
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#ifndef LKC_H
+#define LKC_H
+
+#include "expr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef LKC_DIRECT_LINK
+#define P(name,type,arg)	extern type name arg
+#else
+#include "lkc_defs.h"
+#define P(name,type,arg)	extern type (*name ## _p) arg
+#endif
+#include "lkc_proto.h"
+#undef P
+
+#define SRCTREE "srctree"
+
+int zconfparse(void);
+void zconfdump(FILE *out);
+
+extern int zconfdebug;
+void zconf_starthelp(void);
+FILE *zconf_fopen(const char *name);
+void zconf_initscan(const char *name);
+void zconf_nextfile(const char *name);
+int zconf_lineno(void);
+char *zconf_curname(void);
+
+/* confdata.c */
+extern const char conf_def_filename[];
+extern char conf_filename[];
+
+char *conf_get_default_confname(void);
+
+/* kconfig_load.c */
+void kconfig_load(void);
+
+/* menu.c */
+void menu_init(void);
+void menu_add_menu(void);
+void menu_end_menu(void);
+void menu_add_entry(struct symbol *sym);
+void menu_end_entry(void);
+void menu_add_dep(struct expr *dep);
+struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep);
+void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
+void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
+void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
+void menu_finalize(struct menu *parent);
+void menu_set_type(int type);
+struct file *file_lookup(const char *name);
+int file_write_dep(const char *name);
+
+extern struct menu *current_entry;
+extern struct menu *current_menu;
+
+/* symbol.c */
+void sym_init(void);
+void sym_clear_all_valid(void);
+void sym_set_changed(struct symbol *sym);
+struct symbol *sym_check_deps(struct symbol *sym);
+struct property *prop_alloc(enum prop_type type, struct symbol *sym);
+struct symbol *prop_get_symbol(struct property *prop);
+
+static inline tristate sym_get_tristate_value(struct symbol *sym)
+{
+	return sym->curr.tri;
+}
+
+
+static inline struct symbol *sym_get_choice_value(struct symbol *sym)
+{
+	return (struct symbol *)sym->curr.val;
+}
+
+static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
+{
+	return sym_set_tristate_value(chval, yes);
+}
+
+static inline bool sym_is_choice(struct symbol *sym)
+{
+	return sym->flags & SYMBOL_CHOICE ? true : false;
+}
+
+static inline bool sym_is_choice_value(struct symbol *sym)
+{
+	return sym->flags & SYMBOL_CHOICEVAL ? true : false;
+}
+
+static inline bool sym_is_optional(struct symbol *sym)
+{
+	return sym->flags & SYMBOL_OPTIONAL ? true : false;
+}
+
+static inline bool sym_has_value(struct symbol *sym)
+{
+	return sym->flags & SYMBOL_NEW ? false : true;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LKC_H */
diff --git a/openwrt/package/config/lkc_proto.h b/openwrt/package/config/lkc_proto.h
new file mode 100644
index 0000000000..97c79178ee
--- /dev/null
+++ b/openwrt/package/config/lkc_proto.h
@@ -0,0 +1,39 @@
+
+/* confdata.c */
+P(conf_parse,void,(const char *name));
+P(conf_read,int,(const char *name));
+P(conf_write,int,(const char *name));
+
+/* menu.c */
+P(rootmenu,struct menu,);
+
+P(menu_is_visible,bool,(struct menu *menu));
+P(menu_get_prompt,const char *,(struct menu *menu));
+P(menu_get_root_menu,struct menu *,(struct menu *menu));
+P(menu_get_parent_menu,struct menu *,(struct menu *menu));
+
+/* symbol.c */
+P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
+P(sym_change_count,int,);
+
+P(sym_lookup,struct symbol *,(const char *name, int isconst));
+P(sym_find,struct symbol *,(const char *name));
+P(sym_type_name,const char *,(enum symbol_type type));
+P(sym_calc_value,void,(struct symbol *sym));
+P(sym_get_type,enum symbol_type,(struct symbol *sym));
+P(sym_tristate_within_range,bool,(struct symbol *sym,tristate tri));
+P(sym_set_tristate_value,bool,(struct symbol *sym,tristate tri));
+P(sym_toggle_tristate_value,tristate,(struct symbol *sym));
+P(sym_string_valid,bool,(struct symbol *sym, const char *newval));
+P(sym_string_within_range,bool,(struct symbol *sym, const char *str));
+P(sym_set_string_value,bool,(struct symbol *sym, const char *newval));
+P(sym_is_changable,bool,(struct symbol *sym));
+P(sym_get_choice_prop,struct property *,(struct symbol *sym));
+P(sym_get_default_prop,struct property *,(struct symbol *sym));
+P(sym_get_string_value,const char *,(struct symbol *sym));
+
+P(prop_get_type_name,const char *,(enum prop_type type));
+
+/* expr.c */
+P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2));
+P(expr_print,void,(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken));
diff --git a/openwrt/package/config/mconf.c b/openwrt/package/config/mconf.c
new file mode 100644
index 0000000000..0db6f8f6c8
--- /dev/null
+++ b/openwrt/package/config/mconf.c
@@ -0,0 +1,713 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ *
+ * Introduced single menu mode (show all sub-menus in one large tree).
+ * 2002-11-06 Petr Baudis <pasky@ucw.cz>
+ *
+ * Directly use liblxdialog library routines.
+ * 2002-11-14 Petr Baudis <pasky@ucw.cz>
+ */
+
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+#include <sys/termios.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <termios.h>
+#include <unistd.h>
+
+#include "dialog.h"
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+static char menu_backtitle[128];
+static const char menu_instructions[] =
+	"Arrow keys navigate the menu.  "
+	"<Enter> selects submenus --->.  "
+	"Highlighted letters are hotkeys.  "
+	"Pressing <Y> selectes a feature, while <N> will exclude a feature.  "
+	"Press <Esc><Esc> to exit, <?> for Help.  "
+	"Legend: [*] feature is selected  [ ] feature is excluded",
+radiolist_instructions[] =
+	"Use the arrow keys to navigate this window or "
+	"press the hotkey of the item you wish to select "
+	"followed by the <SPACE BAR>. "
+	"Press <?> for additional information about this option.",
+inputbox_instructions_int[] =
+	"Please enter a decimal value. "
+	"Fractions will not be accepted.  "
+	"Use the <TAB> key to move from the input field to the buttons below it.",
+inputbox_instructions_hex[] =
+	"Please enter a hexadecimal value. "
+	"Use the <TAB> key to move from the input field to the buttons below it.",
+inputbox_instructions_string[] =
+	"Please enter a string value. "
+	"Use the <TAB> key to move from the input field to the buttons below it.",
+setmod_text[] =
+	"This feature depends on another which has been configured as a module.\n"
+	"As a result, this feature will be built as a module.",
+nohelp_text[] =
+	"There is no help available for this option.\n",
+load_config_text[] =
+	"Enter the name of the configuration file you wish to load.  "
+	"Accept the name shown to restore the configuration you "
+	"last retrieved.  Leave blank to abort.",
+load_config_help[] =
+	"\n"
+	"For various reasons, one may wish to keep several different Buildroot\n"
+	"configurations available on a single machine.\n"
+	"\n"
+	"If you have saved a previous configuration in a file other than the\n"
+	"Buildroot's default, entering the name of the file here will allow you\n"
+	"to modify that configuration.\n"
+	"\n"
+	"If you are uncertain, then you have probably never used alternate\n"
+	"configuration files.  You should therefor leave this blank to abort.\n",
+save_config_text[] =
+	"Enter a filename to which this configuration should be saved "
+	"as an alternate.  Leave blank to abort.",
+save_config_help[] =
+	"\n"
+	"For various reasons, one may wish to keep different Buildroot\n"
+	"configurations available on a single machine.\n"
+	"\n"
+	"Entering a file name here will allow you to later retrieve, modify\n"
+	"and use the current configuration as an alternate to whatever\n"
+	"configuration options you have selected at that time.\n"
+	"\n"
+	"If you are uncertain what all this means then you should probably\n"
+	"leave this blank.\n",
+top_menu_help[] =
+	"\n"
+	"Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
+	"you wish to change or submenu wish to select and press <Enter>.\n"
+	"Submenus are designated by \"--->\".\n"
+	"\n"
+	"Shortcut: Press the option's highlighted letter (hotkey).\n"
+	"\n"
+	"You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
+	"unseen options into view.\n"
+;
+
+static char filename[PATH_MAX+1] = ".config";
+static int indent = 0;
+static struct termios ios_org;
+static int rows, cols;
+static struct menu *current_menu;
+static int child_count;
+static int single_menu_mode;
+
+static struct dialog_list_item *items[16384]; /* FIXME: This ought to be dynamic. */
+static int item_no;
+
+static void conf(struct menu *menu);
+static void conf_choice(struct menu *menu);
+static void conf_string(struct menu *menu);
+static void conf_load(void);
+static void conf_save(void);
+static void show_textbox(const char *title, const char *text, int r, int c);
+static void show_helptext(const char *title, const char *text);
+static void show_help(struct menu *menu);
+static void show_readme(void);
+
+static void init_wsize(void)
+{
+	struct winsize ws;
+	char *env;
+
+	if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
+		rows = 24;
+		cols = 80;
+	} else {
+		rows = ws.ws_row;
+		cols = ws.ws_col;
+		if (!rows) {
+			env = getenv("LINES");
+			if (env)
+				rows = atoi(env);
+			if (!rows)
+				rows = 24;
+		}
+		if (!cols) {
+			env = getenv("COLUMNS");
+			if (env)
+				cols = atoi(env);
+			if (!cols)
+				cols = 80;
+		}
+	}
+
+	if (rows < 19 || cols < 80) {
+		fprintf(stderr, "Your display is too small to run Menuconfig!\n");
+		fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
+		exit(1);
+	}
+
+	rows -= 4;
+	cols -= 5;
+}
+
+static void cinit(void)
+{
+	item_no = 0;
+}
+
+static void cmake(void)
+{
+	items[item_no] = malloc(sizeof(struct dialog_list_item));
+	memset(items[item_no], 0, sizeof(struct dialog_list_item));
+	items[item_no]->tag = malloc(32); items[item_no]->tag[0] = 0;
+	items[item_no]->name = malloc(512); items[item_no]->name[0] = 0;
+	items[item_no]->namelen = 0;
+	item_no++;
+}
+
+static int cprint_name(const char *fmt, ...)
+{
+	va_list ap;
+	int res;
+
+	if (!item_no)
+		cmake();
+	va_start(ap, fmt);
+	res = vsnprintf(items[item_no - 1]->name + items[item_no - 1]->namelen,
+			512 - items[item_no - 1]->namelen, fmt, ap);
+	if (res > 0)
+		items[item_no - 1]->namelen += res;
+	va_end(ap);
+
+	return res;
+}
+
+static int cprint_tag(const char *fmt, ...)
+{
+	va_list ap;
+	int res;
+
+	if (!item_no)
+		cmake();
+	va_start(ap, fmt);
+	res = vsnprintf(items[item_no - 1]->tag, 32, fmt, ap);
+	va_end(ap);
+
+	return res;
+}
+
+static void cdone(void)
+{
+	int i;
+
+	for (i = 0; i < item_no; i++) {
+		free(items[i]->tag);
+		free(items[i]->name);
+		free(items[i]);
+	}
+
+	item_no = 0;
+}
+
+static void build_conf(struct menu *menu)
+{
+	struct symbol *sym;
+	struct property *prop;
+	struct menu *child;
+	int type, tmp, doint = 2;
+	tristate val;
+	char ch;
+
+	if (!menu_is_visible(menu))
+		return;
+
+	sym = menu->sym;
+	prop = menu->prompt;
+	if (!sym) {
+		if (prop && menu != current_menu) {
+			const char *prompt = menu_get_prompt(menu);
+			switch (prop->type) {
+			case P_MENU:
+				child_count++;
+				cmake();
+				cprint_tag("m%p", menu);
+
+				if (single_menu_mode) {
+					cprint_name("%s%*c%s",
+						menu->data ? "-->" : "++>",
+						indent + 1, ' ', prompt);
+				} else {
+					cprint_name("   %*c%s  --->", indent + 1, ' ', prompt);
+				}
+
+				if (single_menu_mode && menu->data)
+					goto conf_childs;
+				return;
+			default:
+				if (prompt) {
+					child_count++;
+					cmake();
+					cprint_tag(":%p", menu);
+					cprint_name("---%*c%s", indent + 1, ' ', prompt);
+				}
+			}
+		} else
+			doint = 0;
+		goto conf_childs;
+	}
+
+	cmake();
+	type = sym_get_type(sym);
+	if (sym_is_choice(sym)) {
+		struct symbol *def_sym = sym_get_choice_value(sym);
+		struct menu *def_menu = NULL;
+
+		child_count++;
+		for (child = menu->list; child; child = child->next) {
+			if (menu_is_visible(child) && child->sym == def_sym)
+				def_menu = child;
+		}
+
+		val = sym_get_tristate_value(sym);
+		if (sym_is_changable(sym)) {
+			cprint_tag("t%p", menu);
+			switch (type) {
+			case S_BOOLEAN:
+				cprint_name("[%c]", val == no ? ' ' : '*');
+				break;
+			case S_TRISTATE:
+				switch (val) {
+				case yes: ch = '*'; break;
+				case mod: ch = 'M'; break;
+				default:  ch = ' '; break;
+				}
+				cprint_name("<%c>", ch);
+				break;
+			}
+		} else {
+			cprint_tag("%c%p", def_menu ? 't' : ':', menu);
+			cprint_name("   ");
+		}
+
+		cprint_name("%*c%s", indent + 1, ' ', menu_get_prompt(menu));
+		if (val == yes) {
+			if (def_menu) {
+				cprint_name(" (%s)", menu_get_prompt(def_menu));
+				cprint_name("  --->");
+				if (def_menu->list) {
+					indent += 2;
+					build_conf(def_menu);
+					indent -= 2;
+				}
+			}
+			return;
+		}
+	} else {
+		child_count++;
+		val = sym_get_tristate_value(sym);
+		if (sym_is_choice_value(sym) && val == yes) {
+			cprint_tag(":%p", menu);
+			cprint_name("   ");
+		} else {
+			switch (type) {
+			case S_BOOLEAN:
+				cprint_tag("t%p", menu);
+				if (sym_is_changable(sym))
+					cprint_name("[%c]", val == no ? ' ' : '*');
+				else
+					cprint_name("---");
+				break;
+			case S_TRISTATE:
+				cprint_tag("t%p", menu);
+				switch (val) {
+				case yes: ch = '*'; break;
+				case mod: ch = 'M'; break;
+				default:  ch = ' '; break;
+				}
+				if (sym_is_changable(sym))
+					cprint_name("<%c>", ch);
+				else
+					cprint_name("---");
+				break;
+			default:
+				cprint_tag("s%p", menu);
+				tmp = cprint_name("(%s)", sym_get_string_value(sym));
+				tmp = indent - tmp + 4;
+				if (tmp < 0)
+					tmp = 0;
+				cprint_name("%*c%s%s", tmp, ' ', menu_get_prompt(menu),
+					(sym_has_value(sym) || !sym_is_changable(sym)) ?
+					"" : " (NEW)");
+				goto conf_childs;
+			}
+		}
+		cprint_name("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu),
+			(sym_has_value(sym) || !sym_is_changable(sym)) ?
+			"" : " (NEW)");
+		if (menu->prompt->type == P_MENU) {
+			cprint_name("  --->");
+			return;
+		}
+	}
+
+conf_childs:
+	indent += doint;
+	for (child = menu->list; child; child = child->next)
+		build_conf(child);
+	indent -= doint;
+}
+
+static void conf(struct menu *menu)
+{
+	struct dialog_list_item *active_item = NULL;
+	struct menu *submenu;
+	const char *prompt = menu_get_prompt(menu);
+	struct symbol *sym;
+	char active_entry[40];
+	int stat, type;
+
+	unlink("lxdialog.scrltmp");
+	active_entry[0] = 0;
+	while (1) {
+		indent = 0;
+		child_count = 0;
+  		current_menu = menu;
+		cdone(); cinit();
+		build_conf(menu);
+		if (!child_count)
+			break;
+		if (menu == &rootmenu) {
+			cmake(); cprint_tag(":"); cprint_name("--- ");
+			cmake(); cprint_tag("L"); cprint_name("Load an Alternate Configuration File");
+			cmake(); cprint_tag("S"); cprint_name("Save Configuration to an Alternate File");
+		}
+		dialog_clear();
+		stat = dialog_menu(prompt ? prompt : "Main Menu",
+				menu_instructions, rows, cols, rows - 10,
+				active_entry, item_no, items);
+		if (stat < 0)
+			return;
+
+		if (stat == 1 || stat == 255)
+			break;
+
+		active_item = first_sel_item(item_no, items);
+		if (!active_item)
+			continue;
+		active_item->selected = 0;
+		strncpy(active_entry, active_item->tag, sizeof(active_entry));
+		active_entry[sizeof(active_entry)-1] = 0;
+		type = active_entry[0];
+		if (!type)
+			continue;
+
+		sym = NULL;
+		submenu = NULL;
+		if (sscanf(active_entry + 1, "%p", &submenu) == 1)
+			sym = submenu->sym;
+
+		switch (stat) {
+		case 0:
+			switch (type) {
+			case 'm':
+				if (single_menu_mode)
+					submenu->data = (void *) (long) !submenu->data;
+				else
+					conf(submenu);
+				break;
+			case 't':
+				if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
+					conf_choice(submenu);
+				else if (submenu->prompt->type == P_MENU)
+					conf(submenu);
+				break;
+			case 's':
+				conf_string(submenu);
+				break;
+			case 'L':
+				conf_load();
+				break;
+			case 'S':
+				conf_save();
+				break;
+			}
+			break;
+		case 2:
+			if (sym)
+				show_help(submenu);
+			else
+				show_readme();
+			break;
+		case 3:
+			if (type == 't') {
+				if (sym_set_tristate_value(sym, yes))
+					break;
+				if (sym_set_tristate_value(sym, mod))
+					show_textbox(NULL, setmod_text, 6, 74);
+			}
+			break;
+		case 4:
+			if (type == 't')
+				sym_set_tristate_value(sym, no);
+			break;
+		case 5:
+			if (type == 't')
+				sym_set_tristate_value(sym, mod);
+			break;
+		case 6:
+			if (type == 't')
+				sym_toggle_tristate_value(sym);
+			else if (type == 'm')
+				conf(submenu);
+			break;
+		}
+	}
+}
+
+static void show_textbox(const char *title, const char *text, int r, int c)
+{
+	int fd;
+
+	fd = creat(".help.tmp", 0777);
+	write(fd, text, strlen(text));
+	close(fd);
+	while (dialog_textbox(title, ".help.tmp", r, c) < 0)
+		;
+	unlink(".help.tmp");
+}
+
+static void show_helptext(const char *title, const char *text)
+{
+	show_textbox(title, text, rows, cols);
+}
+
+static void show_help(struct menu *menu)
+{
+	const char *help;
+	char *helptext;
+	struct symbol *sym = menu->sym;
+
+	help = sym->help;
+	if (!help)
+		help = nohelp_text;
+	if (sym->name) {
+		helptext = malloc(strlen(sym->name) + strlen(help) + 16);
+		sprintf(helptext, "%s:\n\n%s", sym->name, help);
+		show_helptext(menu_get_prompt(menu), helptext);
+		free(helptext);
+	} else
+		show_helptext(menu_get_prompt(menu), help);
+}
+
+static void show_readme(void)
+{
+	show_helptext("Help", top_menu_help);
+}
+
+static void conf_choice(struct menu *menu)
+{
+	const char *prompt = menu_get_prompt(menu);
+	struct menu *child;
+	struct symbol *active;
+
+	active = sym_get_choice_value(menu->sym);
+	while (1) {
+		current_menu = menu;
+		cdone(); cinit();
+		for (child = menu->list; child; child = child->next) {
+			if (!menu_is_visible(child))
+				continue;
+			cmake();
+			cprint_tag("%p", child);
+			cprint_name("%s", menu_get_prompt(child));
+			if (child->sym == sym_get_choice_value(menu->sym))
+				items[item_no - 1]->selected = 1; /* ON */
+			else if (child->sym == active)
+				items[item_no - 1]->selected = 2; /* SELECTED */
+			else
+				items[item_no - 1]->selected = 0; /* OFF */
+		}
+
+		switch (dialog_checklist(prompt ? prompt : "Main Menu",
+					radiolist_instructions, 15, 70, 6,
+					item_no, items, FLAG_RADIO)) {
+		case 0:
+			if (sscanf(first_sel_item(item_no, items)->tag, "%p", &child) != 1)
+				break;
+			sym_set_tristate_value(child->sym, yes);
+			return;
+		case 1:
+			if (sscanf(first_sel_item(item_no, items)->tag, "%p", &child) == 1) {
+				show_help(child);
+				active = child->sym;
+			} else
+				show_help(menu);
+			break;
+		case 255:
+			return;
+		}
+	}
+}
+
+static void conf_string(struct menu *menu)
+{
+	const char *prompt = menu_get_prompt(menu);
+
+	while (1) {
+		char *heading;
+
+		switch (sym_get_type(menu->sym)) {
+		case S_INT:
+			heading = (char *) inputbox_instructions_int;
+			break;
+		case S_HEX:
+			heading = (char *) inputbox_instructions_hex;
+			break;
+		case S_STRING:
+			heading = (char *) inputbox_instructions_string;
+			break;
+		default:
+			heading = "Internal mconf error!";
+			/* panic? */;
+		}
+
+		switch (dialog_inputbox(prompt ? prompt : "Main Menu",
+					heading, 10, 75,
+					sym_get_string_value(menu->sym))) {
+		case 0:
+			if (sym_set_string_value(menu->sym, dialog_input_result))
+				return;
+			show_textbox(NULL, "You have made an invalid entry.", 5, 43);
+			break;
+		case 1:
+			show_help(menu);
+			break;
+		case 255:
+			return;
+		}
+	}
+}
+
+static void conf_load(void)
+{
+	while (1) {
+		switch (dialog_inputbox(NULL, load_config_text, 11, 55,
+					filename)) {
+		case 0:
+			if (!dialog_input_result[0])
+				return;
+			if (!conf_read(dialog_input_result))
+				return;
+			show_textbox(NULL, "File does not exist!", 5, 38);
+			break;
+		case 1:
+			show_helptext("Load Alternate Configuration", load_config_help);
+			break;
+		case 255:
+			return;
+		}
+	}
+}
+
+static void conf_save(void)
+{
+	while (1) {
+		switch (dialog_inputbox(NULL, save_config_text, 11, 55,
+					filename)) {
+		case 0:
+			if (!dialog_input_result[0])
+				return;
+			if (!conf_write(dialog_input_result))
+				return;
+			show_textbox(NULL, "Can't create file!  Probably a nonexistent directory.", 5, 60);
+			break;
+		case 1:
+			show_helptext("Save Alternate Configuration", save_config_help);
+			break;
+		case 255:
+			return;
+		}
+	}
+}
+
+static void conf_cleanup(void)
+{
+	tcsetattr(1, TCSAFLUSH, &ios_org);
+	unlink(".help.tmp");
+}
+
+static void winch_handler(int sig)
+{
+	struct winsize ws;
+
+	if (ioctl(1, TIOCGWINSZ, &ws) == -1) {
+		rows = 24;
+		cols = 80;
+	} else {
+		rows = ws.ws_row;
+		cols = ws.ws_col;
+	}
+
+	if (rows < 19 || cols < 80) {
+		end_dialog();
+		fprintf(stderr, "Your display is too small to run Menuconfig!\n");
+		fprintf(stderr, "It must be at least 19 lines by 80 columns.\n");
+		exit(1);
+	}
+
+	rows -= 4;
+	cols -= 5;
+
+}
+
+int main(int ac, char **av)
+{
+	int stat;
+	char *mode;
+	struct symbol *sym;
+
+	conf_parse(av[1]);
+	conf_read(NULL);
+
+	sym = sym_lookup("VERSION", 0);
+	sym_calc_value(sym);
+	snprintf(menu_backtitle, 128, "Buildroot v%s Configuration",
+		sym_get_string_value(sym));
+
+	mode = getenv("MENUCONFIG_MODE");
+	if (mode) {
+		if (!strcasecmp(mode, "single_menu"))
+			single_menu_mode = 1;
+	}
+
+	tcgetattr(1, &ios_org);
+	atexit(conf_cleanup);
+	init_wsize();
+	init_dialog();
+	signal(SIGWINCH, winch_handler);
+	conf(&rootmenu);
+	end_dialog();
+
+	/* Restart dialog to act more like when lxdialog was still separate */
+	init_dialog();
+	do {
+		stat = dialog_yesno(NULL,
+				"Do you wish to save your new Buildroot configuration?", 5, 60);
+	} while (stat < 0);
+	end_dialog();
+
+	if (stat == 0) {
+		conf_write(NULL);
+		printf("\n\n"
+			"*** End of Buildroot configuration.\n"
+			"*** Check the top-level Makefile for additional configuration options.\n\n");
+	} else
+		printf("\n\nYour Buildroot configuration changes were NOT saved.\n\n");
+
+	return 0;
+}
diff --git a/openwrt/package/config/menu.c b/openwrt/package/config/menu.c
new file mode 100644
index 0000000000..6425296fc3
--- /dev/null
+++ b/openwrt/package/config/menu.c
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+struct menu rootmenu;
+struct menu *current_menu, *current_entry;
+static struct menu **last_entry_ptr;
+
+struct file *file_list;
+struct file *current_file;
+
+static void menu_warn(struct menu *menu, const char *fmt, ...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno);
+	vfprintf(stderr, fmt, ap);
+	fprintf(stderr, "\n");
+	va_end(ap);
+}
+
+static void prop_warn(struct property *prop, const char *fmt, ...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno);
+	vfprintf(stderr, fmt, ap);
+	fprintf(stderr, "\n");
+	va_end(ap);
+}
+
+void menu_init(void)
+{
+	current_entry = current_menu = &rootmenu;
+	last_entry_ptr = &rootmenu.list;
+}
+
+void menu_add_entry(struct symbol *sym)
+{
+	struct menu *menu;
+
+	menu = malloc(sizeof(*menu));
+	memset(menu, 0, sizeof(*menu));
+	menu->sym = sym;
+	menu->parent = current_menu;
+	menu->file = current_file;
+	menu->lineno = zconf_lineno();
+
+	*last_entry_ptr = menu;
+	last_entry_ptr = &menu->next;
+	current_entry = menu;
+}
+
+void menu_end_entry(void)
+{
+}
+
+void menu_add_menu(void)
+{
+	current_menu = current_entry;
+	last_entry_ptr = &current_entry->list;
+}
+
+void menu_end_menu(void)
+{
+	last_entry_ptr = &current_menu->next;
+	current_menu = current_menu->parent;
+}
+
+struct expr *menu_check_dep(struct expr *e)
+{
+	if (!e)
+		return e;
+
+	switch (e->type) {
+	case E_NOT:
+		e->left.expr = menu_check_dep(e->left.expr);
+		break;
+	case E_OR:
+	case E_AND:
+		e->left.expr = menu_check_dep(e->left.expr);
+		e->right.expr = menu_check_dep(e->right.expr);
+		break;
+	case E_SYMBOL:
+		/* change 'm' into 'm' && MODULES */
+		if (e->left.sym == &symbol_mod)
+			return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
+		break;
+	default:
+		break;
+	}
+	return e;
+}
+
+void menu_add_dep(struct expr *dep)
+{
+	current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
+}
+
+void menu_set_type(int type)
+{
+	struct symbol *sym = current_entry->sym;
+
+	if (sym->type == type)
+		return;
+	if (sym->type == S_UNKNOWN) {
+		sym->type = type;
+		return;
+	}
+	menu_warn(current_entry, "type of '%s' redefined from '%s' to '%s'\n",
+	    sym->name ? sym->name : "<choice>",
+	    sym_type_name(sym->type), sym_type_name(type));
+}
+
+struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep)
+{
+	struct property *prop = prop_alloc(type, current_entry->sym);
+
+	prop->menu = current_entry;
+	prop->text = prompt;
+	prop->expr = expr;
+	prop->visible.expr = menu_check_dep(dep);
+
+	if (prompt) {
+		if (current_entry->prompt)
+			menu_warn(current_entry, "prompt redefined\n");
+		current_entry->prompt = prop;
+	}
+
+	return prop;
+}
+
+void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
+{
+	menu_add_prop(type, prompt, NULL, dep);
+}
+
+void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep)
+{
+	menu_add_prop(type, NULL, expr, dep);
+}
+
+void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
+{
+	menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
+}
+
+void sym_check_prop(struct symbol *sym)
+{
+	struct property *prop;
+	struct symbol *sym2;
+	for (prop = sym->prop; prop; prop = prop->next) {
+		switch (prop->type) {
+		case P_DEFAULT:
+			if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) &&
+			    prop->expr->type != E_SYMBOL)
+				prop_warn(prop,
+				    "default for config symbol '%'"
+				    " must be a single symbol", sym->name);
+			break;
+		case P_SELECT:
+			sym2 = prop_get_symbol(prop);
+			if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)
+				prop_warn(prop,
+				    "config symbol '%s' uses select, but is "
+				    "not boolean or tristate", sym->name);
+			else if (sym2->type == S_UNKNOWN)
+				prop_warn(prop,
+				    "'select' used by config symbol '%s' "
+				    "refer to undefined symbol '%s'",
+				    sym->name, sym2->name);
+			else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE)
+				prop_warn(prop,
+				    "'%s' has wrong type. 'select' only "
+				    "accept arguments of boolean and "
+				    "tristate type", sym2->name);
+			break;
+		case P_RANGE:
+			if (sym->type != S_INT && sym->type != S_HEX)
+				prop_warn(prop, "range is only allowed "
+				                "for int or hex symbols");
+			if (!sym_string_valid(sym, prop->expr->left.sym->name) ||
+			    !sym_string_valid(sym, prop->expr->right.sym->name))
+				prop_warn(prop, "range is invalid");
+			break;
+		default:
+			;
+		}
+	}
+}
+
+void menu_finalize(struct menu *parent)
+{
+	struct menu *menu, *last_menu;
+	struct symbol *sym;
+	struct property *prop;
+	struct expr *parentdep, *basedep, *dep, *dep2, **ep;
+
+	sym = parent->sym;
+	if (parent->list) {
+		if (sym && sym_is_choice(sym)) {
+			/* find the first choice value and find out choice type */
+			for (menu = parent->list; menu; menu = menu->next) {
+				if (menu->sym) {
+					current_entry = parent;
+					menu_set_type(menu->sym->type);
+					current_entry = menu;
+					menu_set_type(sym->type);
+					break;
+				}
+			}
+			parentdep = expr_alloc_symbol(sym);
+		} else if (parent->prompt)
+			parentdep = parent->prompt->visible.expr;
+		else
+			parentdep = parent->dep;
+
+		for (menu = parent->list; menu; menu = menu->next) {
+			basedep = expr_transform(menu->dep);
+			basedep = expr_alloc_and(expr_copy(parentdep), basedep);
+			basedep = expr_eliminate_dups(basedep);
+			menu->dep = basedep;
+			if (menu->sym)
+				prop = menu->sym->prop;
+			else
+				prop = menu->prompt;
+			for (; prop; prop = prop->next) {
+				if (prop->menu != menu)
+					continue;
+				dep = expr_transform(prop->visible.expr);
+				dep = expr_alloc_and(expr_copy(basedep), dep);
+				dep = expr_eliminate_dups(dep);
+				if (menu->sym && menu->sym->type != S_TRISTATE)
+					dep = expr_trans_bool(dep);
+				prop->visible.expr = dep;
+				if (prop->type == P_SELECT) {
+					struct symbol *es = prop_get_symbol(prop);
+					es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,
+							expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));
+				}
+			}
+		}
+		for (menu = parent->list; menu; menu = menu->next)
+			menu_finalize(menu);
+	} else if (sym) {
+		basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
+		basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
+		basedep = expr_eliminate_dups(expr_transform(basedep));
+		last_menu = NULL;
+		for (menu = parent->next; menu; menu = menu->next) {
+			dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;
+			if (!expr_contains_symbol(dep, sym))
+				break;
+			if (expr_depends_symbol(dep, sym))
+				goto next;
+			dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);
+			dep = expr_eliminate_dups(expr_transform(dep));
+			dep2 = expr_copy(basedep);
+			expr_eliminate_eq(&dep, &dep2);
+			expr_free(dep);
+			if (!expr_is_yes(dep2)) {
+				expr_free(dep2);
+				break;
+			}
+			expr_free(dep2);
+		next:
+			menu_finalize(menu);
+			menu->parent = parent;
+			last_menu = menu;
+		}
+		if (last_menu) {
+			parent->list = parent->next;
+			parent->next = last_menu->next;
+			last_menu->next = NULL;
+		}
+	}
+	for (menu = parent->list; menu; menu = menu->next) {
+		if (sym && sym_is_choice(sym) && menu->sym) {
+			menu->sym->flags |= SYMBOL_CHOICEVAL;
+			if (!menu->prompt)
+				menu_warn(menu, "choice value must have a prompt");
+			for (prop = menu->sym->prop; prop; prop = prop->next) {
+				if (prop->type == P_PROMPT && prop->menu != menu) {
+					prop_warn(prop, "choice values "
+					    "currently only support a "
+					    "single prompt");
+				}
+				if (prop->type == P_DEFAULT)
+					prop_warn(prop, "defaults for choice "
+					    "values not supported");
+			}
+			current_entry = menu;
+			menu_set_type(sym->type);
+			menu_add_symbol(P_CHOICE, sym, NULL);
+			prop = sym_get_choice_prop(sym);
+			for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
+				;
+			*ep = expr_alloc_one(E_CHOICE, NULL);
+			(*ep)->right.sym = menu->sym;
+		}
+		if (menu->list && (!menu->prompt || !menu->prompt->text)) {
+			for (last_menu = menu->list; ; last_menu = last_menu->next) {
+				last_menu->parent = parent;
+				if (!last_menu->next)
+					break;
+			}
+			last_menu->next = menu->next;
+			menu->next = menu->list;
+			menu->list = NULL;
+		}
+	}
+
+	if (sym && !(sym->flags & SYMBOL_WARNED)) {
+		if (sym->type == S_UNKNOWN)
+			menu_warn(parent, "config symbol defined "
+			    "without type\n");
+
+		if (sym_is_choice(sym) && !parent->prompt)
+			menu_warn(parent, "choice must have a prompt\n");
+
+		/* Check properties connected to this symbol */
+		sym_check_prop(sym);
+		sym->flags |= SYMBOL_WARNED;
+	}
+
+	if (sym && !sym_is_optional(sym) && parent->prompt) {
+		sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr,
+				expr_alloc_and(parent->prompt->visible.expr,
+					expr_alloc_symbol(&symbol_mod)));
+	}
+}
+
+bool menu_is_visible(struct menu *menu)
+{
+	struct menu *child;
+	struct symbol *sym;
+	tristate visible;
+
+	if (!menu->prompt)
+		return false;
+	sym = menu->sym;
+	if (sym) {
+		sym_calc_value(sym);
+		visible = menu->prompt->visible.tri;
+	} else
+		visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);
+
+	if (visible != no)
+		return true;
+	if (!sym || sym_get_tristate_value(menu->sym) == no)
+		return false;
+
+	for (child = menu->list; child; child = child->next)
+		if (menu_is_visible(child))
+			return true;
+	return false;
+}
+
+const char *menu_get_prompt(struct menu *menu)
+{
+	if (menu->prompt)
+		return menu->prompt->text;
+	else if (menu->sym)
+		return menu->sym->name;
+	return NULL;
+}
+
+struct menu *menu_get_root_menu(struct menu *menu)
+{
+	return &rootmenu;
+}
+
+struct menu *menu_get_parent_menu(struct menu *menu)
+{
+	enum prop_type type;
+
+	for (; menu != &rootmenu; menu = menu->parent) {
+		type = menu->prompt ? menu->prompt->type : 0;
+		if (type == P_MENU)
+			break;
+	}
+	return menu;
+}
+
+struct file *file_lookup(const char *name)
+{
+	struct file *file;
+
+	for (file = file_list; file; file = file->next) {
+		if (!strcmp(name, file->name))
+			return file;
+	}
+
+	file = malloc(sizeof(*file));
+	memset(file, 0, sizeof(*file));
+	file->name = strdup(name);
+	file->next = file_list;
+	file_list = file;
+	return file;
+}
+
+int file_write_dep(const char *name)
+{
+	struct file *file;
+	FILE *out;
+
+	if (!name)
+		name = ".config.cmd";
+	out = fopen(".config.tmp", "w");
+	if (!out)
+		return 1;
+	fprintf(out, "deps_config := \\\n");
+	for (file = file_list; file; file = file->next) {
+		if (file->next)
+			fprintf(out, "\t%s \\\n", file->name);
+		else
+			fprintf(out, "\t%s\n", file->name);
+	}
+	fprintf(out, "\n.config include/config.h: $(deps_config)\n\n$(deps_config):\n");
+	fclose(out);
+	rename(".config.tmp", name);
+	return 0;
+}
+
diff --git a/openwrt/package/config/menubox.c b/openwrt/package/config/menubox.c
new file mode 100644
index 0000000000..431f09fc99
--- /dev/null
+++ b/openwrt/package/config/menubox.c
@@ -0,0 +1,436 @@
+/*
+ *  menubox.c -- implements the menu box
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ *  Changes by Clifford Wolf (god@clifford.at)
+ *
+ *  [ 1998-06-13 ]
+ *
+ *    *)  A bugfix for the Page-Down problem
+ *
+ *    *)  Formerly when I used Page Down and Page Up, the cursor would be set
+ *        to the first position in the menu box.  Now lxdialog is a bit
+ *        smarter and works more like other menu systems (just have a look at
+ *        it).
+ *
+ *    *)  Formerly if I selected something my scrolling would be broken because
+ *        lxdialog is re-invoked by the Menuconfig shell script, can't
+ *        remember the last scrolling position, and just sets it so that the
+ *        cursor is at the bottom of the box.  Now it writes the temporary file
+ *        lxdialog.scrltmp which contains this information. The file is
+ *        deleted by lxdialog if the user leaves a submenu or enters a new
+ *        one, but it would be nice if Menuconfig could make another "rm -f"
+ *        just to be sure.  Just try it out - you will recognise a difference!
+ *
+ *  [ 1998-06-14 ]
+ *
+ *    *)  Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
+ *        and menus change their size on the fly.
+ *
+ *    *)  If for some reason the last scrolling position is not saved by
+ *        lxdialog, it sets the scrolling so that the selected item is in the
+ *        middle of the menu box, not at the bottom.
+ *
+ * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
+ * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
+ * This fixes a bug in Menuconfig where using ' ' to descend into menus
+ * would leave mis-synchronized lxdialog.scrltmp files lying around,
+ * fscanf would read in 'scroll', and eventually that value would get used.
+ */
+
+#include "dialog.h"
+
+static int menu_width, item_x;
+
+/*
+ * Print menu item
+ */
+static void
+print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey)
+{
+    int j;
+    char menu_item[menu_width+1];
+
+    strncpy(menu_item, item, menu_width);
+    menu_item[menu_width] = 0;
+    j = first_alpha(menu_item, "YyNnMm");
+
+    /* Clear 'residue' of last item */
+    wattrset (win, menubox_attr);
+    wmove (win, choice, 0);
+#if OLD_NCURSES
+    {
+        int i;
+        for (i = 0; i < menu_width; i++)
+	    waddch (win, ' ');
+    }
+#else
+    wclrtoeol(win);
+#endif
+    wattrset (win, selected ? item_selected_attr : item_attr);
+    mvwaddstr (win, choice, item_x, menu_item);
+    if (hotkey) {
+    	wattrset (win, selected ? tag_key_selected_attr : tag_key_attr);
+    	mvwaddch(win, choice, item_x+j, menu_item[j]);
+    }
+    if (selected) {
+	wmove (win, choice, item_x+1);
+	wrefresh (win);
+    }
+}
+
+/*
+ * Print the scroll indicators.
+ */
+static void
+print_arrows (WINDOW * win, int item_no, int scroll,
+		int y, int x, int height)
+{
+    int cur_y, cur_x;
+
+    getyx(win, cur_y, cur_x);
+
+    wmove(win, y, x);
+
+    if (scroll > 0) {
+	wattrset (win, uarrow_attr);
+	waddch (win, ACS_UARROW);
+	waddstr (win, "(-)");
+    }
+    else {
+	wattrset (win, menubox_attr);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+    }
+
+   y = y + height + 1;
+   wmove(win, y, x);
+
+   if ((height < item_no) && (scroll + height < item_no)) {
+	wattrset (win, darrow_attr);
+	waddch (win, ACS_DARROW);
+	waddstr (win, "(+)");
+    }
+    else {
+	wattrset (win, menubox_border_attr);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+	waddch (win, ACS_HLINE);
+   }
+
+   wmove(win, cur_y, cur_x);
+}
+
+/*
+ * Display the termination buttons.
+ */
+static void
+print_buttons (WINDOW *win, int height, int width, int selected)
+{
+    int x = width / 2 - 16;
+    int y = height - 2;
+
+    print_button (win, "Select", y, x, selected == 0);
+    print_button (win, " Exit ", y, x + 12, selected == 1);
+    print_button (win, " Help ", y, x + 24, selected == 2);
+
+    wmove(win, y, x+1+12*selected);
+    wrefresh (win);
+}
+
+/*
+ * Display a menu for choosing among a number of options
+ */
+int
+dialog_menu (const char *title, const char *prompt, int height, int width,
+		int menu_height, const char *current, int item_no,
+		struct dialog_list_item ** items)
+{
+    int i, j, x, y, box_x, box_y;
+    int key = 0, button = 0, scroll = 0, choice = 0, first_item = 0, max_choice;
+    WINDOW *dialog, *menu;
+    FILE *f;
+
+    max_choice = MIN (menu_height, item_no);
+
+    /* center dialog box on screen */
+    x = (COLS - width) / 2;
+    y = (LINES - height) / 2;
+
+    draw_shadow (stdscr, y, x, height, width);
+
+    dialog = newwin (height, width, y, x);
+    keypad (dialog, TRUE);
+
+    draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
+    wattrset (dialog, border_attr);
+    mvwaddch (dialog, height - 3, 0, ACS_LTEE);
+    for (i = 0; i < width - 2; i++)
+	waddch (dialog, ACS_HLINE);
+    wattrset (dialog, dialog_attr);
+    wbkgdset (dialog, dialog_attr & A_COLOR);
+    waddch (dialog, ACS_RTEE);
+
+    if (title != NULL && strlen(title) >= width-2 ) {
+	/* truncate long title -- mec */
+	char * title2 = malloc(width-2+1);
+	memcpy( title2, title, width-2 );
+	title2[width-2] = '\0';
+	title = title2;
+    }
+
+    if (title != NULL) {
+	wattrset (dialog, title_attr);
+	mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+	waddstr (dialog, (char *)title);
+	waddch (dialog, ' ');
+    }
+
+    wattrset (dialog, dialog_attr);
+    print_autowrap (dialog, prompt, width - 2, 1, 3);
+
+    menu_width = width - 6;
+    box_y = height - menu_height - 5;
+    box_x = (width - menu_width) / 2 - 1;
+
+    /* create new window for the menu */
+    menu = subwin (dialog, menu_height, menu_width,
+		y + box_y + 1, x + box_x + 1);
+    keypad (menu, TRUE);
+
+    /* draw a box around the menu items */
+    draw_box (dialog, box_y, box_x, menu_height + 2, menu_width + 2,
+	      menubox_border_attr, menubox_attr);
+
+    /*
+     * Find length of longest item in order to center menu.
+     * Set 'choice' to default item.
+     */
+    item_x = 0;
+    for (i = 0; i < item_no; i++) {
+	item_x = MAX (item_x, MIN(menu_width, strlen (items[i]->name) + 2));
+	if (strcmp(current, items[i]->tag) == 0) choice = i;
+    }
+
+    item_x = (menu_width - item_x) / 2;
+
+    /* get the scroll info from the temp file */
+    if ( (f=fopen("lxdialog.scrltmp","r")) != NULL ) {
+	if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) &&
+	     (scroll+max_choice > choice) && (scroll >= 0) &&
+	     (scroll+max_choice <= item_no) ) {
+	    first_item = scroll;
+	    choice = choice - scroll;
+	    fclose(f);
+	} else {
+	    scroll=0;
+	    remove("lxdialog.scrltmp");
+	    fclose(f);
+	    f=NULL;
+	}
+    }
+    if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) {
+	if (choice >= item_no-max_choice/2)
+	    scroll = first_item = item_no-max_choice;
+	else
+	    scroll = first_item = choice - max_choice/2;
+	choice = choice - scroll;
+    }
+
+    /* Print the menu */
+    for (i=0; i < max_choice; i++) {
+	print_item (menu, items[first_item + i]->name, i, i == choice,
+                    (items[first_item + i]->tag[0] != ':'));
+    }
+
+    wnoutrefresh (menu);
+
+    print_arrows(dialog, item_no, scroll,
+		 box_y, box_x+item_x+1, menu_height);
+
+    print_buttons (dialog, height, width, 0);
+    wmove (menu, choice, item_x+1);
+    wrefresh (menu);
+
+    while (key != ESC) {
+	key = wgetch(menu);
+
+	if (key < 256 && isalpha(key)) key = tolower(key);
+
+	if (strchr("ynm", key))
+		i = max_choice;
+	else {
+        for (i = choice+1; i < max_choice; i++) {
+		j = first_alpha(items[scroll + i]->name, "YyNnMm>");
+		if (key == tolower(items[scroll + i]->name[j]))
+                	break;
+	}
+	if (i == max_choice)
+       		for (i = 0; i < max_choice; i++) {
+			j = first_alpha(items[scroll + i]->name, "YyNnMm>");
+			if (key == tolower(items[scroll + i]->name[j]))
+                		break;
+		}
+	}
+
+	if (i < max_choice ||
+            key == KEY_UP || key == KEY_DOWN ||
+            key == '-' || key == '+' ||
+            key == KEY_PPAGE || key == KEY_NPAGE) {
+
+            print_item (menu, items[scroll + choice]->name, choice, FALSE,
+                       (items[scroll + choice]->tag[0] != ':'));
+
+	    if (key == KEY_UP || key == '-') {
+                if (choice < 2 && scroll) {
+	            /* Scroll menu down */
+                    scrollok (menu, TRUE);
+                    wscrl (menu, -1);
+                    scrollok (menu, FALSE);
+
+                    scroll--;
+
+                    print_item (menu, items[scroll]->name, 0, FALSE,
+                               (items[scroll]->tag[0] != ':'));
+		} else
+		    choice = MAX(choice - 1, 0);
+
+	    } else if (key == KEY_DOWN || key == '+')  {
+
+		print_item (menu, items[scroll + choice]->name, choice, FALSE,
+                                (items[scroll + choice]->tag[0] != ':'));
+
+                if ((choice > max_choice-3) &&
+                    (scroll + max_choice < item_no)
+                   ) {
+		    /* Scroll menu up */
+		    scrollok (menu, TRUE);
+                    scroll (menu);
+                    scrollok (menu, FALSE);
+
+                    scroll++;
+
+                    print_item (menu, items[scroll + max_choice - 1]->name,
+                               max_choice-1, FALSE,
+                               (items[scroll + max_choice - 1]->tag[0] != ':'));
+                } else
+                    choice = MIN(choice+1, max_choice-1);
+
+	    } else if (key == KEY_PPAGE) {
+	        scrollok (menu, TRUE);
+                for (i=0; (i < max_choice); i++) {
+                    if (scroll > 0) {
+                	wscrl (menu, -1);
+                	scroll--;
+                	print_item (menu, items[scroll]->name, 0, FALSE,
+                	(items[scroll]->tag[0] != ':'));
+                    } else {
+                        if (choice > 0)
+                            choice--;
+                    }
+                }
+                scrollok (menu, FALSE);
+
+            } else if (key == KEY_NPAGE) {
+                for (i=0; (i < max_choice); i++) {
+                    if (scroll+max_choice < item_no) {
+			scrollok (menu, TRUE);
+			scroll(menu);
+			scrollok (menu, FALSE);
+                	scroll++;
+                	print_item (menu, items[scroll + max_choice - 1]->name,
+			            max_choice-1, FALSE,
+			            (items[scroll + max_choice - 1]->tag[0] != ':'));
+		    } else {
+			if (choice+1 < max_choice)
+			    choice++;
+		    }
+                }
+
+            } else
+                choice = i;
+
+            print_item (menu, items[scroll + choice]->name, choice, TRUE,
+                       (items[scroll + choice]->tag[0] != ':'));
+
+            print_arrows(dialog, item_no, scroll,
+                         box_y, box_x+item_x+1, menu_height);
+
+            wnoutrefresh (dialog);
+            wrefresh (menu);
+
+	    continue;		/* wait for another key press */
+        }
+
+	switch (key) {
+	case KEY_LEFT:
+	case TAB:
+	case KEY_RIGHT:
+	    button = ((key == KEY_LEFT ? --button : ++button) < 0)
+			? 2 : (button > 2 ? 0 : button);
+
+	    print_buttons(dialog, height, width, button);
+	    wrefresh (menu);
+	    break;
+	case ' ':
+	case 's':
+	case 'y':
+	case 'n':
+	case 'm':
+	    /* save scroll info */
+	    if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) {
+		fprintf(f,"%d\n",scroll);
+		fclose(f);
+	    }
+	    delwin (dialog);
+            items[scroll + choice]->selected = 1;
+            switch (key) {
+            case 's': return 3;
+            case 'y': return 3;
+            case 'n': return 4;
+            case 'm': return 5;
+            case ' ': return 6;
+            }
+	    return 0;
+	case 'h':
+	case '?':
+	    button = 2;
+	case '\n':
+	    delwin (dialog);
+	    items[scroll + choice]->selected = 1;
+
+	    remove("lxdialog.scrltmp");
+	    return button;
+	case 'e':
+	case 'x':
+	    key = ESC;
+	case ESC:
+	    break;
+	}
+    }
+
+    delwin (dialog);
+    remove("lxdialog.scrltmp");
+    return -1;			/* ESC pressed */
+}
diff --git a/openwrt/package/config/msgbox.c b/openwrt/package/config/msgbox.c
new file mode 100644
index 0000000000..93692e1fbc
--- /dev/null
+++ b/openwrt/package/config/msgbox.c
@@ -0,0 +1,85 @@
+/*
+ *  msgbox.c -- implements the message box and info box
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+/*
+ * Display a message box. Program will pause and display an "OK" button
+ * if the parameter 'pause' is non-zero.
+ */
+int
+dialog_msgbox (const char *title, const char *prompt, int height, int width,
+		int pause)
+{
+    int i, x, y, key = 0;
+    WINDOW *dialog;
+
+    /* center dialog box on screen */
+    x = (COLS - width) / 2;
+    y = (LINES - height) / 2;
+
+    draw_shadow (stdscr, y, x, height, width);
+
+    dialog = newwin (height, width, y, x);
+    keypad (dialog, TRUE);
+
+    draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
+
+    if (title != NULL && strlen(title) >= width-2 ) {
+	/* truncate long title -- mec */
+	char * title2 = malloc(width-2+1);
+	memcpy( title2, title, width-2 );
+	title2[width-2] = '\0';
+	title = title2;
+    }
+
+    if (title != NULL) {
+	wattrset (dialog, title_attr);
+	mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+	waddstr (dialog, (char *)title);
+	waddch (dialog, ' ');
+    }
+    wattrset (dialog, dialog_attr);
+    print_autowrap (dialog, prompt, width - 2, 1, 2);
+
+    if (pause) {
+	wattrset (dialog, border_attr);
+	mvwaddch (dialog, height - 3, 0, ACS_LTEE);
+	for (i = 0; i < width - 2; i++)
+	    waddch (dialog, ACS_HLINE);
+	wattrset (dialog, dialog_attr);
+	waddch (dialog, ACS_RTEE);
+
+	print_button (dialog, "  Ok  ",
+		      height - 2, width / 2 - 4, TRUE);
+
+	wrefresh (dialog);
+	while (key != ESC && key != '\n' && key != ' ' &&
+               key != 'O' && key != 'o' && key != 'X' && key != 'x')
+	    key = wgetch (dialog);
+    } else {
+	key = '\n';
+	wrefresh (dialog);
+    }
+
+    delwin (dialog);
+    return key == ESC ? -1 : 0;
+}
diff --git a/openwrt/package/config/symbol.c b/openwrt/package/config/symbol.c
new file mode 100644
index 0000000000..a9fae9c13a
--- /dev/null
+++ b/openwrt/package/config/symbol.c
@@ -0,0 +1,771 @@
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/utsname.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+struct symbol symbol_yes = {
+	.name = "y",
+	.curr = { "y", yes },
+	.flags = SYMBOL_YES|SYMBOL_VALID,
+}, symbol_mod = {
+	.name = "m",
+	.curr = { "m", mod },
+	.flags = SYMBOL_MOD|SYMBOL_VALID,
+}, symbol_no = {
+	.name = "n",
+	.curr = { "n", no },
+	.flags = SYMBOL_NO|SYMBOL_VALID,
+}, symbol_empty = {
+	.name = "",
+	.curr = { "", no },
+	.flags = SYMBOL_VALID,
+};
+
+int sym_change_count;
+struct symbol *modules_sym;
+tristate modules_val;
+
+void sym_add_default(struct symbol *sym, const char *def)
+{
+	struct property *prop = prop_alloc(P_DEFAULT, sym);
+
+	prop->expr = expr_alloc_symbol(sym_lookup(def, 1));
+}
+
+void sym_init(void)
+{
+	struct symbol *sym;
+	char *p;
+	static bool inited = false;
+
+	if (inited)
+		return;
+	inited = true;
+
+	sym = sym_lookup("VERSION", 0);
+	sym->type = S_STRING;
+	sym->flags |= SYMBOL_AUTO;
+	p = getenv("VERSION");
+	if (p)
+		sym_add_default(sym, p);
+
+	sym = sym_lookup("TARGET_ARCH", 0);
+	sym->type = S_STRING;
+	sym->flags |= SYMBOL_AUTO;
+	p = getenv("TARGET_ARCH");
+	if (p)
+		sym_add_default(sym, p);
+
+}
+
+enum symbol_type sym_get_type(struct symbol *sym)
+{
+	enum symbol_type type = sym->type;
+
+	if (type == S_TRISTATE) {
+		if (sym_is_choice_value(sym) && sym->visible == yes)
+			type = S_BOOLEAN;
+		else if (modules_val == no)
+			type = S_BOOLEAN;
+	}
+	return type;
+}
+
+const char *sym_type_name(enum symbol_type type)
+{
+	switch (type) {
+	case S_BOOLEAN:
+		return "boolean";
+	case S_TRISTATE:
+		return "tristate";
+	case S_INT:
+		return "integer";
+	case S_HEX:
+		return "hex";
+	case S_STRING:
+		return "string";
+	case S_UNKNOWN:
+		return "unknown";
+	case S_OTHER:
+		break;
+	}
+	return "???";
+}
+
+struct property *sym_get_choice_prop(struct symbol *sym)
+{
+	struct property *prop;
+
+	for_all_choices(sym, prop)
+		return prop;
+	return NULL;
+}
+
+struct property *sym_get_default_prop(struct symbol *sym)
+{
+	struct property *prop;
+
+	for_all_defaults(sym, prop) {
+		prop->visible.tri = expr_calc_value(prop->visible.expr);
+		if (prop->visible.tri != no)
+			return prop;
+	}
+	return NULL;
+}
+
+struct property *sym_get_range_prop(struct symbol *sym)
+{
+	struct property *prop;
+
+	for_all_properties(sym, prop, P_RANGE) {
+		prop->visible.tri = expr_calc_value(prop->visible.expr);
+		if (prop->visible.tri != no)
+			return prop;
+	}
+	return NULL;
+}
+
+static void sym_calc_visibility(struct symbol *sym)
+{
+	struct property *prop;
+	tristate tri;
+
+	/* any prompt visible? */
+	tri = no;
+	for_all_prompts(sym, prop) {
+		prop->visible.tri = expr_calc_value(prop->visible.expr);
+		tri = E_OR(tri, prop->visible.tri);
+	}
+	if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
+		tri = yes;
+	if (sym->visible != tri) {
+		sym->visible = tri;
+		sym_set_changed(sym);
+	}
+	if (sym_is_choice_value(sym))
+		return;
+	tri = no;
+	if (sym->rev_dep.expr)
+		tri = expr_calc_value(sym->rev_dep.expr);
+	if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
+		tri = yes;
+	if (sym->rev_dep.tri != tri) {
+		sym->rev_dep.tri = tri;
+		sym_set_changed(sym);
+	}
+}
+
+static struct symbol *sym_calc_choice(struct symbol *sym)
+{
+	struct symbol *def_sym;
+	struct property *prop;
+	struct expr *e;
+
+	/* is the user choice visible? */
+	def_sym = sym->user.val;
+	if (def_sym) {
+		sym_calc_visibility(def_sym);
+		if (def_sym->visible != no)
+			return def_sym;
+	}
+
+	/* any of the defaults visible? */
+	for_all_defaults(sym, prop) {
+		prop->visible.tri = expr_calc_value(prop->visible.expr);
+		if (prop->visible.tri == no)
+			continue;
+		def_sym = prop_get_symbol(prop);
+		sym_calc_visibility(def_sym);
+		if (def_sym->visible != no)
+			return def_sym;
+	}
+
+	/* just get the first visible value */
+	prop = sym_get_choice_prop(sym);
+	for (e = prop->expr; e; e = e->left.expr) {
+		def_sym = e->right.sym;
+		sym_calc_visibility(def_sym);
+		if (def_sym->visible != no)
+			return def_sym;
+	}
+
+	/* no choice? reset tristate value */
+	sym->curr.tri = no;
+	return NULL;
+}
+
+void sym_calc_value(struct symbol *sym)
+{
+	struct symbol_value newval, oldval;
+	struct property *prop;
+	struct expr *e;
+
+	if (!sym)
+		return;
+
+	if (sym->flags & SYMBOL_VALID)
+		return;
+	sym->flags |= SYMBOL_VALID;
+
+	oldval = sym->curr;
+
+	switch (sym->type) {
+	case S_INT:
+	case S_HEX:
+	case S_STRING:
+		newval = symbol_empty.curr;
+		break;
+	case S_BOOLEAN:
+	case S_TRISTATE:
+		newval = symbol_no.curr;
+		break;
+	default:
+		sym->curr.val = sym->name;
+		sym->curr.tri = no;
+		return;
+	}
+	if (!sym_is_choice_value(sym))
+		sym->flags &= ~SYMBOL_WRITE;
+
+	sym_calc_visibility(sym);
+
+	/* set default if recursively called */
+	sym->curr = newval;
+
+	switch (sym_get_type(sym)) {
+	case S_BOOLEAN:
+	case S_TRISTATE:
+		if (sym_is_choice_value(sym) && sym->visible == yes) {
+			prop = sym_get_choice_prop(sym);
+			newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
+		} else if (E_OR(sym->visible, sym->rev_dep.tri) != no) {
+			sym->flags |= SYMBOL_WRITE;
+			if (sym_has_value(sym))
+				newval.tri = sym->user.tri;
+			else if (!sym_is_choice(sym)) {
+				prop = sym_get_default_prop(sym);
+				if (prop)
+					newval.tri = expr_calc_value(prop->expr);
+			}
+			newval.tri = E_OR(E_AND(newval.tri, sym->visible), sym->rev_dep.tri);
+		} else if (!sym_is_choice(sym)) {
+			prop = sym_get_default_prop(sym);
+			if (prop) {
+				sym->flags |= SYMBOL_WRITE;
+				newval.tri = expr_calc_value(prop->expr);
+			}
+		}
+		if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
+			newval.tri = yes;
+		break;
+	case S_STRING:
+	case S_HEX:
+	case S_INT:
+		if (sym->visible != no) {
+			sym->flags |= SYMBOL_WRITE;
+			if (sym_has_value(sym)) {
+				newval.val = sym->user.val;
+				break;
+			}
+		}
+		prop = sym_get_default_prop(sym);
+		if (prop) {
+			struct symbol *ds = prop_get_symbol(prop);
+			if (ds) {
+				sym->flags |= SYMBOL_WRITE;
+				sym_calc_value(ds);
+				newval.val = ds->curr.val;
+			}
+		}
+		break;
+	default:
+		;
+	}
+
+	sym->curr = newval;
+	if (sym_is_choice(sym) && newval.tri == yes)
+		sym->curr.val = sym_calc_choice(sym);
+
+	if (memcmp(&oldval, &sym->curr, sizeof(oldval)))
+		sym_set_changed(sym);
+	if (modules_sym == sym)
+		modules_val = modules_sym->curr.tri;
+
+	if (sym_is_choice(sym)) {
+		int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
+		prop = sym_get_choice_prop(sym);
+		for (e = prop->expr; e; e = e->left.expr) {
+			e->right.sym->flags |= flags;
+			if (flags & SYMBOL_CHANGED)
+				sym_set_changed(e->right.sym);
+		}
+	}
+}
+
+void sym_clear_all_valid(void)
+{
+	struct symbol *sym;
+	int i;
+
+	for_all_symbols(i, sym)
+		sym->flags &= ~SYMBOL_VALID;
+	sym_change_count++;
+	if (modules_sym)
+		sym_calc_value(modules_sym);
+}
+
+void sym_set_changed(struct symbol *sym)
+{
+	struct property *prop;
+
+	sym->flags |= SYMBOL_CHANGED;
+	for (prop = sym->prop; prop; prop = prop->next) {
+		if (prop->menu)
+			prop->menu->flags |= MENU_CHANGED;
+	}
+}
+
+void sym_set_all_changed(void)
+{
+	struct symbol *sym;
+	int i;
+
+	for_all_symbols(i, sym)
+		sym_set_changed(sym);
+}
+
+bool sym_tristate_within_range(struct symbol *sym, tristate val)
+{
+	int type = sym_get_type(sym);
+
+	if (sym->visible == no)
+		return false;
+
+	if (type != S_BOOLEAN && type != S_TRISTATE)
+		return false;
+
+	if (type == S_BOOLEAN && val == mod)
+		return false;
+	if (sym->visible <= sym->rev_dep.tri)
+		return false;
+	if (sym_is_choice_value(sym) && sym->visible == yes)
+		return val == yes;
+	return val >= sym->rev_dep.tri && val <= sym->visible;
+}
+
+bool sym_set_tristate_value(struct symbol *sym, tristate val)
+{
+	tristate oldval = sym_get_tristate_value(sym);
+
+	if (oldval != val && !sym_tristate_within_range(sym, val))
+		return false;
+
+	if (sym->flags & SYMBOL_NEW) {
+		sym->flags &= ~SYMBOL_NEW;
+		sym_set_changed(sym);
+	}
+	if (sym_is_choice_value(sym) && val == yes) {
+		struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
+
+		cs->user.val = sym;
+		cs->flags &= ~SYMBOL_NEW;
+	}
+
+	sym->user.tri = val;
+	if (oldval != val) {
+		sym_clear_all_valid();
+		if (sym == modules_sym)
+			sym_set_all_changed();
+	}
+
+	return true;
+}
+
+tristate sym_toggle_tristate_value(struct symbol *sym)
+{
+	tristate oldval, newval;
+
+	oldval = newval = sym_get_tristate_value(sym);
+	do {
+		switch (newval) {
+		case no:
+			newval = mod;
+			break;
+		case mod:
+			newval = yes;
+			break;
+		case yes:
+			newval = no;
+			break;
+		}
+		if (sym_set_tristate_value(sym, newval))
+			break;
+	} while (oldval != newval);
+	return newval;
+}
+
+bool sym_string_valid(struct symbol *sym, const char *str)
+{
+	char ch;
+
+	switch (sym->type) {
+	case S_STRING:
+		return true;
+	case S_INT:
+		ch = *str++;
+		if (ch == '-')
+			ch = *str++;
+		if (!isdigit(ch))
+			return false;
+		if (ch == '0' && *str != 0)
+			return false;
+		while ((ch = *str++)) {
+			if (!isdigit(ch))
+				return false;
+		}
+		return true;
+	case S_HEX:
+		if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
+			str += 2;
+		ch = *str++;
+		do {
+			if (!isxdigit(ch))
+				return false;
+		} while ((ch = *str++));
+		return true;
+	case S_BOOLEAN:
+	case S_TRISTATE:
+		switch (str[0]) {
+		case 'y': case 'Y':
+		case 'm': case 'M':
+		case 'n': case 'N':
+			return true;
+		}
+		return false;
+	default:
+		return false;
+	}
+}
+
+bool sym_string_within_range(struct symbol *sym, const char *str)
+{
+	struct property *prop;
+	int val;
+
+	switch (sym->type) {
+	case S_STRING:
+		return sym_string_valid(sym, str);
+	case S_INT:
+		if (!sym_string_valid(sym, str))
+			return false;
+		prop = sym_get_range_prop(sym);
+		if (!prop)
+			return true;
+		val = strtol(str, NULL, 10);
+		return val >= strtol(prop->expr->left.sym->name, NULL, 10) &&
+		       val <= strtol(prop->expr->right.sym->name, NULL, 10);
+	case S_HEX:
+		if (!sym_string_valid(sym, str))
+			return false;
+		prop = sym_get_range_prop(sym);
+		if (!prop)
+			return true;
+		val = strtol(str, NULL, 16);
+		return val >= strtol(prop->expr->left.sym->name, NULL, 16) &&
+		       val <= strtol(prop->expr->right.sym->name, NULL, 16);
+	case S_BOOLEAN:
+	case S_TRISTATE:
+		switch (str[0]) {
+		case 'y': case 'Y':
+			return sym_tristate_within_range(sym, yes);
+		case 'm': case 'M':
+			return sym_tristate_within_range(sym, mod);
+		case 'n': case 'N':
+			return sym_tristate_within_range(sym, no);
+		}
+		return false;
+	default:
+		return false;
+	}
+}
+
+bool sym_set_string_value(struct symbol *sym, const char *newval)
+{
+	const char *oldval;
+	char *val;
+	int size;
+
+	switch (sym->type) {
+	case S_BOOLEAN:
+	case S_TRISTATE:
+		switch (newval[0]) {
+		case 'y': case 'Y':
+			return sym_set_tristate_value(sym, yes);
+		case 'm': case 'M':
+			return sym_set_tristate_value(sym, mod);
+		case 'n': case 'N':
+			return sym_set_tristate_value(sym, no);
+		}
+		return false;
+	default:
+		;
+	}
+
+	if (!sym_string_within_range(sym, newval))
+		return false;
+
+	if (sym->flags & SYMBOL_NEW) {
+		sym->flags &= ~SYMBOL_NEW;
+		sym_set_changed(sym);
+	}
+
+	oldval = sym->user.val;
+	size = strlen(newval) + 1;
+	if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
+		size += 2;
+		sym->user.val = val = malloc(size);
+		*val++ = '0';
+		*val++ = 'x';
+	} else if (!oldval || strcmp(oldval, newval))
+		sym->user.val = val = malloc(size);
+	else
+		return true;
+
+	strcpy(val, newval);
+	free((void *)oldval);
+	sym_clear_all_valid();
+
+	return true;
+}
+
+const char *sym_get_string_value(struct symbol *sym)
+{
+	tristate val;
+
+	switch (sym->type) {
+	case S_BOOLEAN:
+	case S_TRISTATE:
+		val = sym_get_tristate_value(sym);
+		switch (val) {
+		case no:
+			return "n";
+		case mod:
+			return "m";
+		case yes:
+			return "y";
+		}
+		break;
+	default:
+		;
+	}
+	return (const char *)sym->curr.val;
+}
+
+bool sym_is_changable(struct symbol *sym)
+{
+	return sym->visible > sym->rev_dep.tri;
+}
+
+struct symbol *sym_lookup(const char *name, int isconst)
+{
+	struct symbol *symbol;
+	const char *ptr;
+	char *new_name;
+	int hash = 0;
+
+	if (name) {
+		if (name[0] && !name[1]) {
+			switch (name[0]) {
+			case 'y': return &symbol_yes;
+			case 'm': return &symbol_mod;
+			case 'n': return &symbol_no;
+			}
+		}
+		for (ptr = name; *ptr; ptr++)
+			hash += *ptr;
+		hash &= 0xff;
+
+		for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
+			if (!strcmp(symbol->name, name)) {
+				if ((isconst && symbol->flags & SYMBOL_CONST) ||
+				    (!isconst && !(symbol->flags & SYMBOL_CONST)))
+					return symbol;
+			}
+		}
+		new_name = strdup(name);
+	} else {
+		new_name = NULL;
+		hash = 256;
+	}
+
+	symbol = malloc(sizeof(*symbol));
+	memset(symbol, 0, sizeof(*symbol));
+	symbol->name = new_name;
+	symbol->type = S_UNKNOWN;
+	symbol->flags = SYMBOL_NEW;
+	if (isconst)
+		symbol->flags |= SYMBOL_CONST;
+
+	symbol->next = symbol_hash[hash];
+	symbol_hash[hash] = symbol;
+
+	return symbol;
+}
+
+struct symbol *sym_find(const char *name)
+{
+	struct symbol *symbol = NULL;
+	const char *ptr;
+	int hash = 0;
+
+	if (!name)
+		return NULL;
+
+	if (name[0] && !name[1]) {
+		switch (name[0]) {
+		case 'y': return &symbol_yes;
+		case 'm': return &symbol_mod;
+		case 'n': return &symbol_no;
+		}
+	}
+	for (ptr = name; *ptr; ptr++)
+		hash += *ptr;
+	hash &= 0xff;
+
+	for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
+		if (!strcmp(symbol->name, name) &&
+		    !(symbol->flags & SYMBOL_CONST))
+				break;
+	}
+
+	return symbol;
+}
+
+struct symbol *sym_check_deps(struct symbol *sym);
+
+static struct symbol *sym_check_expr_deps(struct expr *e)
+{
+	struct symbol *sym;
+
+	if (!e)
+		return NULL;
+	switch (e->type) {
+	case E_OR:
+	case E_AND:
+		sym = sym_check_expr_deps(e->left.expr);
+		if (sym)
+			return sym;
+		return sym_check_expr_deps(e->right.expr);
+	case E_NOT:
+		return sym_check_expr_deps(e->left.expr);
+	case E_EQUAL:
+	case E_UNEQUAL:
+		sym = sym_check_deps(e->left.sym);
+		if (sym)
+			return sym;
+		return sym_check_deps(e->right.sym);
+	case E_SYMBOL:
+		return sym_check_deps(e->left.sym);
+	default:
+		break;
+	}
+	printf("Oops! How to check %d?\n", e->type);
+	return NULL;
+}
+
+struct symbol *sym_check_deps(struct symbol *sym)
+{
+	struct symbol *sym2;
+	struct property *prop;
+
+	if (sym->flags & SYMBOL_CHECK_DONE)
+		return NULL;
+	if (sym->flags & SYMBOL_CHECK) {
+		printf("Warning! Found recursive dependency: %s", sym->name);
+		return sym;
+	}
+
+	sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
+	sym2 = sym_check_expr_deps(sym->rev_dep.expr);
+	if (sym2)
+		goto out;
+
+	for (prop = sym->prop; prop; prop = prop->next) {
+		if (prop->type == P_CHOICE || prop->type == P_SELECT)
+			continue;
+		sym2 = sym_check_expr_deps(prop->visible.expr);
+		if (sym2)
+			goto out;
+		if (prop->type != P_DEFAULT || sym_is_choice(sym))
+			continue;
+		sym2 = sym_check_expr_deps(prop->expr);
+		if (sym2)
+			goto out;
+	}
+out:
+	if (sym2)
+		printf(" %s", sym->name);
+	sym->flags &= ~SYMBOL_CHECK;
+	return sym2;
+}
+
+struct property *prop_alloc(enum prop_type type, struct symbol *sym)
+{
+	struct property *prop;
+	struct property **propp;
+
+	prop = malloc(sizeof(*prop));
+	memset(prop, 0, sizeof(*prop));
+	prop->type = type;
+	prop->sym = sym;
+	prop->file = current_file;
+	prop->lineno = zconf_lineno();
+
+	/* append property to the prop list of symbol */
+	if (sym) {
+		for (propp = &sym->prop; *propp; propp = &(*propp)->next)
+			;
+		*propp = prop;
+	}
+
+	return prop;
+}
+
+struct symbol *prop_get_symbol(struct property *prop)
+{
+	if (prop->expr && (prop->expr->type == E_SYMBOL ||
+			   prop->expr->type == E_CHOICE))
+		return prop->expr->left.sym;
+	return NULL;
+}
+
+const char *prop_get_type_name(enum prop_type type)
+{
+	switch (type) {
+	case P_PROMPT:
+		return "prompt";
+	case P_COMMENT:
+		return "comment";
+	case P_MENU:
+		return "menu";
+	case P_DEFAULT:
+		return "default";
+	case P_CHOICE:
+		return "choice";
+	case P_SELECT:
+		return "select";
+	case P_RANGE:
+		return "range";
+	case P_UNKNOWN:
+		break;
+	}
+	return "unknown";
+}
diff --git a/openwrt/package/config/textbox.c b/openwrt/package/config/textbox.c
new file mode 100644
index 0000000000..a5a460b5cc
--- /dev/null
+++ b/openwrt/package/config/textbox.c
@@ -0,0 +1,556 @@
+/*
+ *  textbox.c -- implements the text box
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+static void back_lines (int n);
+static void print_page (WINDOW * win, int height, int width);
+static void print_line (WINDOW * win, int row, int width);
+static char *get_line (void);
+static void print_position (WINDOW * win, int height, int width);
+
+static int hscroll, fd, file_size, bytes_read;
+static int begin_reached = 1, end_reached, page_length;
+static char *buf, *page;
+
+/*
+ * Display text from a file in a dialog box.
+ */
+int
+dialog_textbox (const char *title, const char *file, int height, int width)
+{
+    int i, x, y, cur_x, cur_y, fpos, key = 0;
+    int passed_end;
+    char search_term[MAX_LEN + 1];
+    WINDOW *dialog, *text;
+
+    search_term[0] = '\0';	/* no search term entered yet */
+
+    /* Open input file for reading */
+    if ((fd = open (file, O_RDONLY)) == -1) {
+	endwin ();
+	fprintf (stderr,
+		 "\nCan't open input file in dialog_textbox().\n");
+	exit (-1);
+    }
+    /* Get file size. Actually, 'file_size' is the real file size - 1,
+       since it's only the last byte offset from the beginning */
+    if ((file_size = lseek (fd, 0, SEEK_END)) == -1) {
+	endwin ();
+	fprintf (stderr, "\nError getting file size in dialog_textbox().\n");
+	exit (-1);
+    }
+    /* Restore file pointer to beginning of file after getting file size */
+    if (lseek (fd, 0, SEEK_SET) == -1) {
+	endwin ();
+	fprintf (stderr, "\nError moving file pointer in dialog_textbox().\n");
+	exit (-1);
+    }
+    /* Allocate space for read buffer */
+    if ((buf = malloc (BUF_SIZE + 1)) == NULL) {
+	endwin ();
+	fprintf (stderr, "\nCan't allocate memory in dialog_textbox().\n");
+	exit (-1);
+    }
+    if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
+	endwin ();
+	fprintf (stderr, "\nError reading file in dialog_textbox().\n");
+	exit (-1);
+    }
+    buf[bytes_read] = '\0';	/* mark end of valid data */
+    page = buf;			/* page is pointer to start of page to be displayed */
+
+    /* center dialog box on screen */
+    x = (COLS - width) / 2;
+    y = (LINES - height) / 2;
+
+
+    draw_shadow (stdscr, y, x, height, width);
+
+    dialog = newwin (height, width, y, x);
+    keypad (dialog, TRUE);
+
+    /* Create window for text region, used for scrolling text */
+    text = subwin (dialog, height - 4, width - 2, y + 1, x + 1);
+    wattrset (text, dialog_attr);
+    wbkgdset (text, dialog_attr & A_COLOR);
+
+    keypad (text, TRUE);
+
+    /* register the new window, along with its borders */
+    draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
+
+    wattrset (dialog, border_attr);
+    mvwaddch (dialog, height-3, 0, ACS_LTEE);
+    for (i = 0; i < width - 2; i++)
+	waddch (dialog, ACS_HLINE);
+    wattrset (dialog, dialog_attr);
+    wbkgdset (dialog, dialog_attr & A_COLOR);
+    waddch (dialog, ACS_RTEE);
+
+    if (title != NULL && strlen(title) >= width-2 ) {
+	/* truncate long title -- mec */
+	char * title2 = malloc(width-2+1);
+	memcpy( title2, title, width-2 );
+	title2[width-2] = '\0';
+	title = title2;
+    }
+
+    if (title != NULL) {
+	wattrset (dialog, title_attr);
+	mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+	waddstr (dialog, (char *)title);
+	waddch (dialog, ' ');
+    }
+    print_button (dialog, " Exit ", height - 2, width / 2 - 4, TRUE);
+    wnoutrefresh (dialog);
+    getyx (dialog, cur_y, cur_x);	/* Save cursor position */
+
+    /* Print first page of text */
+    attr_clear (text, height - 4, width - 2, dialog_attr);
+    print_page (text, height - 4, width - 2);
+    print_position (dialog, height, width);
+    wmove (dialog, cur_y, cur_x);	/* Restore cursor position */
+    wrefresh (dialog);
+
+    while ((key != ESC) && (key != '\n')) {
+	key = wgetch (dialog);
+	switch (key) {
+	case 'E':		/* Exit */
+	case 'e':
+	case 'X':
+	case 'x':
+	    delwin (dialog);
+	    free (buf);
+	    close (fd);
+	    return 0;
+	case 'g':		/* First page */
+	case KEY_HOME:
+	    if (!begin_reached) {
+		begin_reached = 1;
+		/* First page not in buffer? */
+		if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
+		    endwin ();
+		    fprintf (stderr,
+		      "\nError moving file pointer in dialog_textbox().\n");
+		    exit (-1);
+		}
+		if (fpos > bytes_read) {	/* Yes, we have to read it in */
+		    if (lseek (fd, 0, SEEK_SET) == -1) {
+			endwin ();
+			fprintf (stderr, "\nError moving file pointer in "
+				 "dialog_textbox().\n");
+			exit (-1);
+		    }
+		    if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
+			endwin ();
+			fprintf (stderr,
+			     "\nError reading file in dialog_textbox().\n");
+			exit (-1);
+		    }
+		    buf[bytes_read] = '\0';
+		}
+		page = buf;
+		print_page (text, height - 4, width - 2);
+		print_position (dialog, height, width);
+		wmove (dialog, cur_y, cur_x);	/* Restore cursor position */
+		wrefresh (dialog);
+	    }
+	    break;
+	case 'G':		/* Last page */
+	case KEY_END:
+
+	    end_reached = 1;
+	    /* Last page not in buffer? */
+	    if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
+		endwin ();
+		fprintf (stderr,
+		      "\nError moving file pointer in dialog_textbox().\n");
+		exit (-1);
+	    }
+	    if (fpos < file_size) {	/* Yes, we have to read it in */
+		if (lseek (fd, -BUF_SIZE, SEEK_END) == -1) {
+		    endwin ();
+		    fprintf (stderr,
+		      "\nError moving file pointer in dialog_textbox().\n");
+		    exit (-1);
+		}
+		if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
+		    endwin ();
+		    fprintf (stderr,
+			     "\nError reading file in dialog_textbox().\n");
+		    exit (-1);
+		}
+		buf[bytes_read] = '\0';
+	    }
+	    page = buf + bytes_read;
+	    back_lines (height - 4);
+	    print_page (text, height - 4, width - 2);
+	    print_position (dialog, height, width);
+	    wmove (dialog, cur_y, cur_x);	/* Restore cursor position */
+	    wrefresh (dialog);
+	    break;
+	case 'K':		/* Previous line */
+	case 'k':
+	case KEY_UP:
+	    if (!begin_reached) {
+		back_lines (page_length + 1);
+
+		/* We don't call print_page() here but use scrolling to ensure
+		   faster screen update. However, 'end_reached' and
+		   'page_length' should still be updated, and 'page' should
+		   point to start of next page. This is done by calling
+		   get_line() in the following 'for' loop. */
+		scrollok (text, TRUE);
+		wscrl (text, -1);	/* Scroll text region down one line */
+		scrollok (text, FALSE);
+		page_length = 0;
+		passed_end = 0;
+		for (i = 0; i < height - 4; i++) {
+		    if (!i) {
+			/* print first line of page */
+			print_line (text, 0, width - 2);
+			wnoutrefresh (text);
+		    } else
+			/* Called to update 'end_reached' and 'page' */
+			get_line ();
+		    if (!passed_end)
+			page_length++;
+		    if (end_reached && !passed_end)
+			passed_end = 1;
+		}
+
+		print_position (dialog, height, width);
+		wmove (dialog, cur_y, cur_x);	/* Restore cursor position */
+		wrefresh (dialog);
+	    }
+	    break;
+	case 'B':		/* Previous page */
+	case 'b':
+	case KEY_PPAGE:
+	    if (begin_reached)
+		break;
+	    back_lines (page_length + height - 4);
+	    print_page (text, height - 4, width - 2);
+	    print_position (dialog, height, width);
+	    wmove (dialog, cur_y, cur_x);
+	    wrefresh (dialog);
+	    break;
+	case 'J':		/* Next line */
+	case 'j':
+	case KEY_DOWN:
+	    if (!end_reached) {
+		begin_reached = 0;
+		scrollok (text, TRUE);
+		scroll (text);	/* Scroll text region up one line */
+		scrollok (text, FALSE);
+		print_line (text, height - 5, width - 2);
+		wnoutrefresh (text);
+		print_position (dialog, height, width);
+		wmove (dialog, cur_y, cur_x);	/* Restore cursor position */
+		wrefresh (dialog);
+	    }
+	    break;
+	case KEY_NPAGE:		/* Next page */
+	case ' ':
+	    if (end_reached)
+		break;
+
+	    begin_reached = 0;
+	    print_page (text, height - 4, width - 2);
+	    print_position (dialog, height, width);
+	    wmove (dialog, cur_y, cur_x);
+	    wrefresh (dialog);
+	    break;
+	case '0':		/* Beginning of line */
+	case 'H':		/* Scroll left */
+	case 'h':
+	case KEY_LEFT:
+	    if (hscroll <= 0)
+		break;
+
+	    if (key == '0')
+		hscroll = 0;
+	    else
+		hscroll--;
+	    /* Reprint current page to scroll horizontally */
+	    back_lines (page_length);
+	    print_page (text, height - 4, width - 2);
+	    wmove (dialog, cur_y, cur_x);
+	    wrefresh (dialog);
+	    break;
+	case 'L':		/* Scroll right */
+	case 'l':
+	case KEY_RIGHT:
+	    if (hscroll >= MAX_LEN)
+		break;
+	    hscroll++;
+	    /* Reprint current page to scroll horizontally */
+	    back_lines (page_length);
+	    print_page (text, height - 4, width - 2);
+	    wmove (dialog, cur_y, cur_x);
+	    wrefresh (dialog);
+	    break;
+	case ESC:
+	    break;
+	}
+    }
+
+    delwin (dialog);
+    free (buf);
+    close (fd);
+    return 1;			/* ESC pressed */
+}
+
+/*
+ * Go back 'n' lines in text file. Called by dialog_textbox().
+ * 'page' will be updated to point to the desired line in 'buf'.
+ */
+static void
+back_lines (int n)
+{
+    int i, fpos;
+
+    begin_reached = 0;
+    /* We have to distinguish between end_reached and !end_reached
+       since at end of file, the line is not ended by a '\n'.
+       The code inside 'if' basically does a '--page' to move one
+       character backward so as to skip '\n' of the previous line */
+    if (!end_reached) {
+	/* Either beginning of buffer or beginning of file reached? */
+	if (page == buf) {
+	    if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
+		endwin ();
+		fprintf (stderr, "\nError moving file pointer in "
+			 "back_lines().\n");
+		exit (-1);
+	    }
+	    if (fpos > bytes_read) {	/* Not beginning of file yet */
+		/* We've reached beginning of buffer, but not beginning of
+		   file yet, so read previous part of file into buffer.
+		   Note that we only move backward for BUF_SIZE/2 bytes,
+		   but not BUF_SIZE bytes to avoid re-reading again in
+		   print_page() later */
+		/* Really possible to move backward BUF_SIZE/2 bytes? */
+		if (fpos < BUF_SIZE / 2 + bytes_read) {
+		    /* No, move less then */
+		    if (lseek (fd, 0, SEEK_SET) == -1) {
+			endwin ();
+			fprintf (stderr, "\nError moving file pointer in "
+				 "back_lines().\n");
+			exit (-1);
+		    }
+		    page = buf + fpos - bytes_read;
+		} else {	/* Move backward BUF_SIZE/2 bytes */
+		    if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR)
+			== -1) {
+			endwin ();
+			fprintf (stderr, "\nError moving file pointer "
+				 "in back_lines().\n");
+			exit (-1);
+		    }
+		    page = buf + BUF_SIZE / 2;
+		}
+		if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
+		    endwin ();
+		    fprintf (stderr, "\nError reading file in back_lines().\n");
+		    exit (-1);
+		}
+		buf[bytes_read] = '\0';
+	    } else {		/* Beginning of file reached */
+		begin_reached = 1;
+		return;
+	    }
+	}
+	if (*(--page) != '\n') {	/* '--page' here */
+	    /* Something's wrong... */
+	    endwin ();
+	    fprintf (stderr, "\nInternal error in back_lines().\n");
+	    exit (-1);
+	}
+    }
+    /* Go back 'n' lines */
+    for (i = 0; i < n; i++)
+	do {
+	    if (page == buf) {
+		if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
+		    endwin ();
+		    fprintf (stderr,
+			  "\nError moving file pointer in back_lines().\n");
+		    exit (-1);
+		}
+		if (fpos > bytes_read) {
+		    /* Really possible to move backward BUF_SIZE/2 bytes? */
+		    if (fpos < BUF_SIZE / 2 + bytes_read) {
+			/* No, move less then */
+			if (lseek (fd, 0, SEEK_SET) == -1) {
+			    endwin ();
+			    fprintf (stderr, "\nError moving file pointer "
+				     "in back_lines().\n");
+			    exit (-1);
+			}
+			page = buf + fpos - bytes_read;
+		    } else {	/* Move backward BUF_SIZE/2 bytes */
+			if (lseek (fd, -(BUF_SIZE / 2 + bytes_read),
+				   SEEK_CUR) == -1) {
+			    endwin ();
+			    fprintf (stderr, "\nError moving file pointer"
+				     " in back_lines().\n");
+			    exit (-1);
+			}
+			page = buf + BUF_SIZE / 2;
+		    }
+		    if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
+			endwin ();
+			fprintf (stderr, "\nError reading file in "
+				 "back_lines().\n");
+			exit (-1);
+		    }
+		    buf[bytes_read] = '\0';
+		} else {	/* Beginning of file reached */
+		    begin_reached = 1;
+		    return;
+		}
+	    }
+	} while (*(--page) != '\n');
+    page++;
+}
+
+/*
+ * Print a new page of text. Called by dialog_textbox().
+ */
+static void
+print_page (WINDOW * win, int height, int width)
+{
+    int i, passed_end = 0;
+
+    page_length = 0;
+    for (i = 0; i < height; i++) {
+	print_line (win, i, width);
+	if (!passed_end)
+	    page_length++;
+	if (end_reached && !passed_end)
+	    passed_end = 1;
+    }
+    wnoutrefresh (win);
+}
+
+/*
+ * Print a new line of text. Called by dialog_textbox() and print_page().
+ */
+static void
+print_line (WINDOW * win, int row, int width)
+{
+    int y, x;
+    char *line;
+
+    line = get_line ();
+    line += MIN (strlen (line), hscroll);	/* Scroll horizontally */
+    wmove (win, row, 0);	/* move cursor to correct line */
+    waddch (win, ' ');
+    waddnstr (win, line, MIN (strlen (line), width - 2));
+
+    getyx (win, y, x);
+    /* Clear 'residue' of previous line */
+#if OLD_NCURSES
+    {
+        int i;
+        for (i = 0; i < width - x; i++)
+	    waddch (win, ' ');
+    }
+#else
+    wclrtoeol(win);
+#endif
+}
+
+/*
+ * Return current line of text. Called by dialog_textbox() and print_line().
+ * 'page' should point to start of current line before calling, and will be
+ * updated to point to start of next line.
+ */
+static char *
+get_line (void)
+{
+    int i = 0, fpos;
+    static char line[MAX_LEN + 1];
+
+    end_reached = 0;
+    while (*page != '\n') {
+	if (*page == '\0') {
+	    /* Either end of file or end of buffer reached */
+	    if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
+		endwin ();
+		fprintf (stderr, "\nError moving file pointer in "
+			 "get_line().\n");
+		exit (-1);
+	    }
+	    if (fpos < file_size) {	/* Not end of file yet */
+		/* We've reached end of buffer, but not end of file yet,
+		   so read next part of file into buffer */
+		if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) {
+		    endwin ();
+		    fprintf (stderr, "\nError reading file in get_line().\n");
+		    exit (-1);
+		}
+		buf[bytes_read] = '\0';
+		page = buf;
+	    } else {
+		if (!end_reached)
+		    end_reached = 1;
+		break;
+	    }
+	} else if (i < MAX_LEN)
+	    line[i++] = *(page++);
+	else {
+	    /* Truncate lines longer than MAX_LEN characters */
+	    if (i == MAX_LEN)
+		line[i++] = '\0';
+	    page++;
+	}
+    }
+    if (i <= MAX_LEN)
+	line[i] = '\0';
+    if (!end_reached)
+	page++;			/* move pass '\n' */
+
+    return line;
+}
+
+/*
+ * Print current position
+ */
+static void
+print_position (WINDOW * win, int height, int width)
+{
+    int fpos, percent;
+
+    if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) {
+	endwin ();
+	fprintf (stderr, "\nError moving file pointer in print_position().\n");
+	exit (-1);
+    }
+    wattrset (win, position_indicator_attr);
+    wbkgdset (win, position_indicator_attr & A_COLOR);
+    percent = !file_size ?
+	100 : ((fpos - bytes_read + page - buf) * 100) / file_size;
+    wmove (win, height - 3, width - 9);
+    wprintw (win, "(%3d%%)", percent);
+}
diff --git a/openwrt/package/config/util.c b/openwrt/package/config/util.c
new file mode 100644
index 0000000000..0a2f827570
--- /dev/null
+++ b/openwrt/package/config/util.c
@@ -0,0 +1,375 @@
+/*
+ *  util.c
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+
+/* use colors by default? */
+bool use_colors = 1;
+
+char *backtitle = NULL;
+
+const char *dialog_result;
+
+/*
+ * Attribute values, default is for mono display
+ */
+chtype attributes[] =
+{
+    A_NORMAL,			/* screen_attr */
+    A_NORMAL,			/* shadow_attr */
+    A_NORMAL,			/* dialog_attr */
+    A_BOLD,			/* title_attr */
+    A_NORMAL,			/* border_attr */
+    A_REVERSE,			/* button_active_attr */
+    A_DIM,			/* button_inactive_attr */
+    A_REVERSE,			/* button_key_active_attr */
+    A_BOLD,			/* button_key_inactive_attr */
+    A_REVERSE,			/* button_label_active_attr */
+    A_NORMAL,			/* button_label_inactive_attr */
+    A_NORMAL,			/* inputbox_attr */
+    A_NORMAL,			/* inputbox_border_attr */
+    A_NORMAL,			/* searchbox_attr */
+    A_BOLD,			/* searchbox_title_attr */
+    A_NORMAL,			/* searchbox_border_attr */
+    A_BOLD,			/* position_indicator_attr */
+    A_NORMAL,			/* menubox_attr */
+    A_NORMAL,			/* menubox_border_attr */
+    A_NORMAL,			/* item_attr */
+    A_REVERSE,			/* item_selected_attr */
+    A_BOLD,			/* tag_attr */
+    A_REVERSE,			/* tag_selected_attr */
+    A_BOLD,			/* tag_key_attr */
+    A_REVERSE,			/* tag_key_selected_attr */
+    A_BOLD,			/* check_attr */
+    A_REVERSE,			/* check_selected_attr */
+    A_BOLD,			/* uarrow_attr */
+    A_BOLD			/* darrow_attr */
+};
+
+
+#include "colors.h"
+
+/*
+ * Table of color values
+ */
+int color_table[][3] =
+{
+    {SCREEN_FG, SCREEN_BG, SCREEN_HL},
+    {SHADOW_FG, SHADOW_BG, SHADOW_HL},
+    {DIALOG_FG, DIALOG_BG, DIALOG_HL},
+    {TITLE_FG, TITLE_BG, TITLE_HL},
+    {BORDER_FG, BORDER_BG, BORDER_HL},
+    {BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL},
+    {BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL},
+    {BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL},
+    {BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG, BUTTON_KEY_INACTIVE_HL},
+    {BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG, BUTTON_LABEL_ACTIVE_HL},
+    {BUTTON_LABEL_INACTIVE_FG, BUTTON_LABEL_INACTIVE_BG,
+     BUTTON_LABEL_INACTIVE_HL},
+    {INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL},
+    {INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL},
+    {SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL},
+    {SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL},
+    {SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL},
+    {POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL},
+    {MENUBOX_FG, MENUBOX_BG, MENUBOX_HL},
+    {MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL},
+    {ITEM_FG, ITEM_BG, ITEM_HL},
+    {ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL},
+    {TAG_FG, TAG_BG, TAG_HL},
+    {TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL},
+    {TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL},
+    {TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL},
+    {CHECK_FG, CHECK_BG, CHECK_HL},
+    {CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL},
+    {UARROW_FG, UARROW_BG, UARROW_HL},
+    {DARROW_FG, DARROW_BG, DARROW_HL},
+};				/* color_table */
+
+/*
+ * Set window to attribute 'attr'
+ */
+void
+attr_clear (WINDOW * win, int height, int width, chtype attr)
+{
+    int i, j;
+
+    wattrset (win, attr);
+    for (i = 0; i < height; i++) {
+	wmove (win, i, 0);
+	for (j = 0; j < width; j++)
+	    waddch (win, ' ');
+    }
+    touchwin (win);
+}
+
+void dialog_clear (void)
+{
+    attr_clear (stdscr, LINES, COLS, screen_attr);
+    /* Display background title if it exists ... - SLH */
+    if (backtitle != NULL) {
+        int i;
+
+        wattrset (stdscr, screen_attr);
+        mvwaddstr (stdscr, 0, 1, (char *)backtitle);
+        wmove (stdscr, 1, 1);
+        for (i = 1; i < COLS - 1; i++)
+            waddch (stdscr, ACS_HLINE);
+    }
+    wnoutrefresh (stdscr);
+}
+
+/*
+ * Do some initialization for dialog
+ */
+void
+init_dialog (void)
+{
+    initscr ();			/* Init curses */
+    keypad (stdscr, TRUE);
+    cbreak ();
+    noecho ();
+
+
+    if (use_colors)	/* Set up colors */
+	color_setup ();
+
+
+    dialog_clear ();
+}
+
+/*
+ * Setup for color display
+ */
+void
+color_setup (void)
+{
+    int i;
+
+    if (has_colors ()) {	/* Terminal supports color? */
+	start_color ();
+
+	/* Initialize color pairs */
+	for (i = 0; i < ATTRIBUTE_COUNT; i++)
+	    init_pair (i + 1, color_table[i][0], color_table[i][1]);
+
+	/* Setup color attributes */
+	for (i = 0; i < ATTRIBUTE_COUNT; i++)
+	    attributes[i] = C_ATTR (color_table[i][2], i + 1);
+    }
+}
+
+/*
+ * End using dialog functions.
+ */
+void
+end_dialog (void)
+{
+    endwin ();
+}
+
+
+/*
+ * Print a string of text in a window, automatically wrap around to the
+ * next line if the string is too long to fit on one line. Newline
+ * characters '\n' are replaced by spaces.  We start on a new line
+ * if there is no room for at least 4 nonblanks following a double-space.
+ */
+void
+print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
+{
+    int newl, cur_x, cur_y;
+    int i, prompt_len, room, wlen;
+    char tempstr[MAX_LEN + 1], *word, *sp, *sp2;
+
+    strcpy (tempstr, prompt);
+
+    prompt_len = strlen(tempstr);
+
+    /*
+     * Remove newlines
+     */
+    for(i=0; i<prompt_len; i++) {
+	if(tempstr[i] == '\n') tempstr[i] = ' ';
+    }
+
+    if (prompt_len <= width - x * 2) {	/* If prompt is short */
+	wmove (win, y, (width - prompt_len) / 2);
+	waddstr (win, tempstr);
+    } else {
+	cur_x = x;
+	cur_y = y;
+	newl = 1;
+	word = tempstr;
+	while (word && *word) {
+	    sp = index(word, ' ');
+	    if (sp)
+	        *sp++ = 0;
+
+	    /* Wrap to next line if either the word does not fit,
+	       or it is the first word of a new sentence, and it is
+	       short, and the next word does not fit. */
+	    room = width - cur_x;
+	    wlen = strlen(word);
+	    if (wlen > room ||
+	       (newl && wlen < 4 && sp && wlen+1+strlen(sp) > room
+		     && (!(sp2 = index(sp, ' ')) || wlen+1+(sp2-sp) > room))) {
+		cur_y++;
+		cur_x = x;
+	    }
+	    wmove (win, cur_y, cur_x);
+	    waddstr (win, word);
+	    getyx (win, cur_y, cur_x);
+	    cur_x++;
+	    if (sp && *sp == ' ') {
+	        cur_x++;	/* double space */
+		while (*++sp == ' ');
+		newl = 1;
+	    } else
+	        newl = 0;
+	    word = sp;
+	}
+    }
+}
+
+/*
+ * Print a button
+ */
+void
+print_button (WINDOW * win, const char *label, int y, int x, int selected)
+{
+    int i, temp;
+
+    wmove (win, y, x);
+    wattrset (win, selected ? button_active_attr : button_inactive_attr);
+    waddstr (win, "<");
+    temp = strspn (label, " ");
+    label += temp;
+    wattrset (win, selected ? button_label_active_attr
+	      : button_label_inactive_attr);
+    for (i = 0; i < temp; i++)
+	waddch (win, ' ');
+    wattrset (win, selected ? button_key_active_attr
+	      : button_key_inactive_attr);
+    waddch (win, label[0]);
+    wattrset (win, selected ? button_label_active_attr
+	      : button_label_inactive_attr);
+    waddstr (win, (char *)label + 1);
+    wattrset (win, selected ? button_active_attr : button_inactive_attr);
+    waddstr (win, ">");
+    wmove (win, y, x + temp + 1);
+}
+
+/*
+ * Draw a rectangular box with line drawing characters
+ */
+void
+draw_box (WINDOW * win, int y, int x, int height, int width,
+	  chtype box, chtype border)
+{
+    int i, j;
+
+    wattrset (win, 0);
+    for (i = 0; i < height; i++) {
+	wmove (win, y + i, x);
+	for (j = 0; j < width; j++)
+	    if (!i && !j)
+		waddch (win, border | ACS_ULCORNER);
+	    else if (i == height - 1 && !j)
+		waddch (win, border | ACS_LLCORNER);
+	    else if (!i && j == width - 1)
+		waddch (win, box | ACS_URCORNER);
+	    else if (i == height - 1 && j == width - 1)
+		waddch (win, box | ACS_LRCORNER);
+	    else if (!i)
+		waddch (win, border | ACS_HLINE);
+	    else if (i == height - 1)
+		waddch (win, box | ACS_HLINE);
+	    else if (!j)
+		waddch (win, border | ACS_VLINE);
+	    else if (j == width - 1)
+		waddch (win, box | ACS_VLINE);
+	    else
+		waddch (win, box | ' ');
+    }
+}
+
+/*
+ * Draw shadows along the right and bottom edge to give a more 3D look
+ * to the boxes
+ */
+void
+draw_shadow (WINDOW * win, int y, int x, int height, int width)
+{
+    int i;
+
+    if (has_colors ()) {	/* Whether terminal supports color? */
+	wattrset (win, shadow_attr);
+	wmove (win, y + height, x + 2);
+	for (i = 0; i < width; i++)
+	    waddch (win, winch (win) & A_CHARTEXT);
+	for (i = y + 1; i < y + height + 1; i++) {
+	    wmove (win, i, x + width);
+	    waddch (win, winch (win) & A_CHARTEXT);
+	    waddch (win, winch (win) & A_CHARTEXT);
+	}
+	wnoutrefresh (win);
+    }
+}
+
+/*
+ *  Return the position of the first alphabetic character in a string.
+ */
+int
+first_alpha(const char *string, const char *exempt)
+{
+	int i, in_paren=0, c;
+
+	for (i = 0; i < strlen(string); i++) {
+		c = tolower(string[i]);
+
+		if (strchr("<[(", c)) ++in_paren;
+		if (strchr(">])", c) && in_paren > 0) --in_paren;
+
+		if ((! in_paren) && isalpha(c) &&
+		     strchr(exempt, c) == 0)
+			return i;
+	}
+
+	return 0;
+}
+
+/*
+ * Get the first selected item in the dialog_list_item list.
+ */
+struct dialog_list_item *
+first_sel_item(int item_no, struct dialog_list_item ** items)
+{
+	int i;
+
+	for (i = 0; i < item_no; i++) {
+		if (items[i]->selected)
+			return items[i];
+	}
+
+	return NULL;
+}
diff --git a/openwrt/package/config/yesno.c b/openwrt/package/config/yesno.c
new file mode 100644
index 0000000000..11fcc25f51
--- /dev/null
+++ b/openwrt/package/config/yesno.c
@@ -0,0 +1,118 @@
+/*
+ *  yesno.c -- implements the yes/no box
+ *
+ *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
+ *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "dialog.h"
+
+/*
+ * Display termination buttons
+ */
+static void
+print_buttons(WINDOW *dialog, int height, int width, int selected)
+{
+    int x = width / 2 - 10;
+    int y = height - 2;
+
+    print_button (dialog, " Yes ", y, x, selected == 0);
+    print_button (dialog, "  No  ", y, x + 13, selected == 1);
+
+    wmove(dialog, y, x+1 + 13*selected );
+    wrefresh (dialog);
+}
+
+/*
+ * Display a dialog box with two buttons - Yes and No
+ */
+int
+dialog_yesno (const char *title, const char *prompt, int height, int width)
+{
+    int i, x, y, key = 0, button = 0;
+    WINDOW *dialog;
+
+    /* center dialog box on screen */
+    x = (COLS - width) / 2;
+    y = (LINES - height) / 2;
+
+    draw_shadow (stdscr, y, x, height, width);
+
+    dialog = newwin (height, width, y, x);
+    keypad (dialog, TRUE);
+
+    draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr);
+    wattrset (dialog, border_attr);
+    mvwaddch (dialog, height-3, 0, ACS_LTEE);
+    for (i = 0; i < width - 2; i++)
+	waddch (dialog, ACS_HLINE);
+    wattrset (dialog, dialog_attr);
+    waddch (dialog, ACS_RTEE);
+
+    if (title != NULL && strlen(title) >= width-2 ) {
+	/* truncate long title -- mec */
+	char * title2 = malloc(width-2+1);
+	memcpy( title2, title, width-2 );
+	title2[width-2] = '\0';
+	title = title2;
+    }
+
+    if (title != NULL) {
+	wattrset (dialog, title_attr);
+	mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+	waddstr (dialog, (char *)title);
+	waddch (dialog, ' ');
+    }
+
+    wattrset (dialog, dialog_attr);
+    print_autowrap (dialog, prompt, width - 2, 1, 3);
+
+    print_buttons(dialog, height, width, 0);
+
+    while (key != ESC) {
+	key = wgetch (dialog);
+	switch (key) {
+	case 'Y':
+	case 'y':
+	    delwin (dialog);
+	    return 0;
+	case 'N':
+	case 'n':
+	    delwin (dialog);
+	    return 1;
+
+	case TAB:
+	case KEY_LEFT:
+	case KEY_RIGHT:
+	    button = ((key == KEY_LEFT ? --button : ++button) < 0)
+			? 1 : (button > 1 ? 0 : button);
+
+	    print_buttons(dialog, height, width, button);
+	    wrefresh (dialog);
+	    break;
+	case ' ':
+	case '\n':
+	    delwin (dialog);
+	    return button;
+	case ESC:
+	    break;
+	}
+    }
+
+    delwin (dialog);
+    return -1;			/* ESC pressed */
+}
diff --git a/openwrt/package/config/zconf.l b/openwrt/package/config/zconf.l
new file mode 100644
index 0000000000..55517b2877
--- /dev/null
+++ b/openwrt/package/config/zconf.l
@@ -0,0 +1,366 @@
+%option backup nostdinit noyywrap never-interactive full ecs
+%option 8bit backup nodefault perf-report perf-report
+%x COMMAND HELP STRING PARAM
+%{
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+#define START_STRSIZE	16
+
+char *text;
+static char *text_ptr;
+static int text_size, text_asize;
+
+struct buffer {
+        struct buffer *parent;
+        YY_BUFFER_STATE state;
+};
+
+struct buffer *current_buf;
+
+static int last_ts, first_ts;
+
+static void zconf_endhelp(void);
+static struct buffer *zconf_endfile(void);
+
+void new_string(void)
+{
+	text = malloc(START_STRSIZE);
+	text_asize = START_STRSIZE;
+	text_ptr = text;
+	text_size = 0;
+	*text_ptr = 0;
+}
+
+void append_string(const char *str, int size)
+{
+	int new_size = text_size + size + 1;
+	if (new_size > text_asize) {
+		text = realloc(text, new_size);
+		text_asize = new_size;
+		text_ptr = text + text_size;
+	}
+	memcpy(text_ptr, str, size);
+	text_ptr += size;
+	text_size += size;
+	*text_ptr = 0;
+}
+
+void alloc_string(const char *str, int size)
+{
+	text = malloc(size + 1);
+	memcpy(text, str, size);
+	text[size] = 0;
+}
+%}
+
+ws	[ \n\t]
+n	[A-Za-z0-9_]
+
+%%
+	int str = 0;
+	int ts, i;
+
+[ \t]*#.*\n	current_file->lineno++;
+[ \t]*#.*
+
+[ \t]*\n	current_file->lineno++; return T_EOL;
+
+[ \t]+	{
+	BEGIN(COMMAND);
+}
+
+.	{
+	unput(yytext[0]);
+	BEGIN(COMMAND);
+}
+
+
+<COMMAND>{
+	"mainmenu"		BEGIN(PARAM); return T_MAINMENU;
+	"menu"			BEGIN(PARAM); return T_MENU;
+	"endmenu"		BEGIN(PARAM); return T_ENDMENU;
+	"source"		BEGIN(PARAM); return T_SOURCE;
+	"choice"		BEGIN(PARAM); return T_CHOICE;
+	"endchoice"		BEGIN(PARAM); return T_ENDCHOICE;
+	"comment"		BEGIN(PARAM); return T_COMMENT;
+	"config"		BEGIN(PARAM); return T_CONFIG;
+	"menuconfig"		BEGIN(PARAM); return T_MENUCONFIG;
+	"help"			BEGIN(PARAM); return T_HELP;
+	"if"			BEGIN(PARAM); return T_IF;
+	"endif"			BEGIN(PARAM); return T_ENDIF;
+	"depends"		BEGIN(PARAM); return T_DEPENDS;
+	"requires"		BEGIN(PARAM); return T_REQUIRES;
+	"optional"		BEGIN(PARAM); return T_OPTIONAL;
+	"default"		BEGIN(PARAM); return T_DEFAULT;
+	"prompt"		BEGIN(PARAM); return T_PROMPT;
+	"tristate"		BEGIN(PARAM); return T_TRISTATE;
+	"def_tristate"		BEGIN(PARAM); return T_DEF_TRISTATE;
+	"bool"			BEGIN(PARAM); return T_BOOLEAN;
+	"boolean"		BEGIN(PARAM); return T_BOOLEAN;
+	"def_bool"		BEGIN(PARAM); return T_DEF_BOOLEAN;
+	"def_boolean"		BEGIN(PARAM); return T_DEF_BOOLEAN;
+	"int"			BEGIN(PARAM); return T_INT;
+	"hex"			BEGIN(PARAM); return T_HEX;
+	"string"		BEGIN(PARAM); return T_STRING;
+	"select"		BEGIN(PARAM); return T_SELECT;
+	"enable"		BEGIN(PARAM); return T_SELECT;
+	"range"			BEGIN(PARAM); return T_RANGE;
+	{n}+	{
+		alloc_string(yytext, yyleng);
+		zconflval.string = text;
+		return T_WORD;
+	}
+	.
+	\n	current_file->lineno++; BEGIN(INITIAL);
+}
+
+<PARAM>{
+	"&&"	return T_AND;
+	"||"	return T_OR;
+	"("	return T_OPEN_PAREN;
+	")"	return T_CLOSE_PAREN;
+	"!"	return T_NOT;
+	"="	return T_EQUAL;
+	"!="	return T_UNEQUAL;
+	"if"	return T_IF;
+	"on"	return T_ON;
+	\"|\'	{
+		str = yytext[0];
+		new_string();
+		BEGIN(STRING);
+	}
+	\n	BEGIN(INITIAL); current_file->lineno++; return T_EOL;
+	---	/* ignore */
+	({n}|[-/.])+	{
+		alloc_string(yytext, yyleng);
+		zconflval.string = text;
+		return T_WORD;
+	}
+	#.*	/* comment */
+	\\\n	current_file->lineno++;
+	.
+	<<EOF>> {
+		BEGIN(INITIAL);
+	}
+}
+
+<STRING>{
+	[^'"\\\n]+/\n	{
+		append_string(yytext, yyleng);
+		zconflval.string = text;
+		return T_WORD_QUOTE;
+	}
+	[^'"\\\n]+	{
+		append_string(yytext, yyleng);
+	}
+	\\.?/\n	{
+		append_string(yytext + 1, yyleng - 1);
+		zconflval.string = text;
+		return T_WORD_QUOTE;
+	}
+	\\.?	{
+		append_string(yytext + 1, yyleng - 1);
+	}
+	\'|\"	{
+		if (str == yytext[0]) {
+			BEGIN(PARAM);
+			zconflval.string = text;
+			return T_WORD_QUOTE;
+		} else
+			append_string(yytext, 1);
+	}
+	\n	{
+		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
+		current_file->lineno++;
+		BEGIN(INITIAL);
+		return T_EOL;
+	}
+	<<EOF>>	{
+		BEGIN(INITIAL);
+	}
+}
+
+<HELP>{
+	[ \t]+	{
+		ts = 0;
+		for (i = 0; i < yyleng; i++) {
+			if (yytext[i] == '\t')
+				ts = (ts & ~7) + 8;
+			else
+				ts++;
+		}
+		last_ts = ts;
+		if (first_ts) {
+			if (ts < first_ts) {
+				zconf_endhelp();
+				return T_HELPTEXT;
+			}
+			ts -= first_ts;
+			while (ts > 8) {
+				append_string("        ", 8);
+				ts -= 8;
+			}
+			append_string("        ", ts);
+		}
+	}
+	[ \t]*\n/[^ \t\n] {
+		current_file->lineno++;
+		zconf_endhelp();
+		return T_HELPTEXT;
+	}
+	[ \t]*\n	{
+		current_file->lineno++;
+		append_string("\n", 1);
+	}
+	[^ \t\n].* {
+		append_string(yytext, yyleng);
+		if (!first_ts)
+			first_ts = last_ts;
+	}
+	<<EOF>>	{
+		zconf_endhelp();
+		return T_HELPTEXT;
+	}
+}
+
+<<EOF>>	{
+	if (current_buf) {
+		zconf_endfile();
+		return T_EOF;
+	}
+	fclose(yyin);
+	yyterminate();
+}
+
+%%
+void zconf_starthelp(void)
+{
+	new_string();
+	last_ts = first_ts = 0;
+	BEGIN(HELP);
+}
+
+static void zconf_endhelp(void)
+{
+	zconflval.string = text;
+	BEGIN(INITIAL);
+}
+
+
+/*
+ * Try to open specified file with following names:
+ * ./name
+ * $(srctree)/name
+ * The latter is used when srctree is separate from objtree
+ * when compiling the kernel.
+ * Return NULL if file is not found.
+ */
+FILE *zconf_fopen(const char *name)
+{
+	char *env, fullname[PATH_MAX+1];
+	FILE *f;
+
+	f = fopen(name, "r");
+	if (!f && name[0] != '/') {
+		env = getenv(SRCTREE);
+		if (env) {
+			sprintf(fullname, "%s/%s", env, name);
+			f = fopen(fullname, "r");
+		}
+	}
+	return f;
+}
+
+void zconf_initscan(const char *name)
+{
+	yyin = zconf_fopen(name);
+	if (!yyin) {
+		printf("can't find file %s\n", name);
+		exit(1);
+	}
+
+	current_buf = malloc(sizeof(*current_buf));
+	memset(current_buf, 0, sizeof(*current_buf));
+
+	current_file = file_lookup(name);
+	current_file->lineno = 1;
+	current_file->flags = FILE_BUSY;
+}
+
+void zconf_nextfile(const char *name)
+{
+	struct file *file = file_lookup(name);
+	struct buffer *buf = malloc(sizeof(*buf));
+	memset(buf, 0, sizeof(*buf));
+
+	current_buf->state = YY_CURRENT_BUFFER;
+	yyin = zconf_fopen(name);
+	if (!yyin) {
+		printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+		exit(1);
+	}
+	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
+	buf->parent = current_buf;
+	current_buf = buf;
+
+	if (file->flags & FILE_BUSY) {
+		printf("recursive scan (%s)?\n", name);
+		exit(1);
+	}
+	if (file->flags & FILE_SCANNED) {
+		printf("file %s already scanned?\n", name);
+		exit(1);
+	}
+	file->flags |= FILE_BUSY;
+	file->lineno = 1;
+	file->parent = current_file;
+	current_file = file;
+}
+
+static struct buffer *zconf_endfile(void)
+{
+	struct buffer *parent;
+
+	current_file->flags |= FILE_SCANNED;
+	current_file->flags &= ~FILE_BUSY;
+	current_file = current_file->parent;
+
+	parent = current_buf->parent;
+	if (parent) {
+		fclose(yyin);
+		yy_delete_buffer(YY_CURRENT_BUFFER);
+		yy_switch_to_buffer(parent->state);
+	}
+	free(current_buf);
+	current_buf = parent;
+
+	return parent;
+}
+
+int zconf_lineno(void)
+{
+	if (current_buf)
+		return current_file->lineno - 1;
+	else
+		return 0;
+}
+
+char *zconf_curname(void)
+{
+	if (current_buf)
+		return current_file->name;
+	else
+		return "<none>";
+}
diff --git a/openwrt/package/config/zconf.tab.c_shipped b/openwrt/package/config/zconf.tab.c_shipped
new file mode 100644
index 0000000000..83dbf9ed57
--- /dev/null
+++ b/openwrt/package/config/zconf.tab.c_shipped
@@ -0,0 +1,2127 @@
+/* A Bison parser, made by GNU Bison 1.875a.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Written by Richard Stallman by simplifying the original so called
+   ``semantic'' parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* If NAME_PREFIX is specified substitute the variables and functions
+   names.  */
+#define yyparse zconfparse
+#define yylex   zconflex
+#define yyerror zconferror
+#define yylval  zconflval
+#define yychar  zconfchar
+#define yydebug zconfdebug
+#define yynerrs zconfnerrs
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     T_MAINMENU = 258,
+     T_MENU = 259,
+     T_ENDMENU = 260,
+     T_SOURCE = 261,
+     T_CHOICE = 262,
+     T_ENDCHOICE = 263,
+     T_COMMENT = 264,
+     T_CONFIG = 265,
+     T_MENUCONFIG = 266,
+     T_HELP = 267,
+     T_HELPTEXT = 268,
+     T_IF = 269,
+     T_ENDIF = 270,
+     T_DEPENDS = 271,
+     T_REQUIRES = 272,
+     T_OPTIONAL = 273,
+     T_PROMPT = 274,
+     T_DEFAULT = 275,
+     T_TRISTATE = 276,
+     T_DEF_TRISTATE = 277,
+     T_BOOLEAN = 278,
+     T_DEF_BOOLEAN = 279,
+     T_STRING = 280,
+     T_INT = 281,
+     T_HEX = 282,
+     T_WORD = 283,
+     T_WORD_QUOTE = 284,
+     T_UNEQUAL = 285,
+     T_EOF = 286,
+     T_EOL = 287,
+     T_CLOSE_PAREN = 288,
+     T_OPEN_PAREN = 289,
+     T_ON = 290,
+     T_SELECT = 291,
+     T_RANGE = 292,
+     T_OR = 293,
+     T_AND = 294,
+     T_EQUAL = 295,
+     T_NOT = 296
+   };
+#endif
+#define T_MAINMENU 258
+#define T_MENU 259
+#define T_ENDMENU 260
+#define T_SOURCE 261
+#define T_CHOICE 262
+#define T_ENDCHOICE 263
+#define T_COMMENT 264
+#define T_CONFIG 265
+#define T_MENUCONFIG 266
+#define T_HELP 267
+#define T_HELPTEXT 268
+#define T_IF 269
+#define T_ENDIF 270
+#define T_DEPENDS 271
+#define T_REQUIRES 272
+#define T_OPTIONAL 273
+#define T_PROMPT 274
+#define T_DEFAULT 275
+#define T_TRISTATE 276
+#define T_DEF_TRISTATE 277
+#define T_BOOLEAN 278
+#define T_DEF_BOOLEAN 279
+#define T_STRING 280
+#define T_INT 281
+#define T_HEX 282
+#define T_WORD 283
+#define T_WORD_QUOTE 284
+#define T_UNEQUAL 285
+#define T_EOF 286
+#define T_EOL 287
+#define T_CLOSE_PAREN 288
+#define T_OPEN_PAREN 289
+#define T_ON 290
+#define T_SELECT 291
+#define T_RANGE 292
+#define T_OR 293
+#define T_AND 294
+#define T_EQUAL 295
+#define T_NOT 296
+
+
+
+
+/* Copy the first part of user declarations.  */
+
+
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
+
+#define PRINTD		0x0001
+#define DEBUG_PARSE	0x0002
+
+int cdebug = PRINTD;
+
+extern int zconflex(void);
+static void zconfprint(const char *err, ...);
+static void zconferror(const char *err);
+static bool zconf_endtoken(int token, int starttoken, int endtoken);
+
+struct symbol *symbol_hash[257];
+
+#define YYERROR_VERBOSE
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+
+typedef union YYSTYPE {
+	int token;
+	char *string;
+	struct symbol *symbol;
+	struct expr *expr;
+	struct menu *menu;
+} YYSTYPE;
+/* Line 191 of yacc.c.  */
+
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+
+
+/* Line 214 of yacc.c.  */
+
+
+#if ! defined (yyoverflow) || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# if YYSTACK_USE_ALLOCA
+#  define YYSTACK_ALLOC alloca
+# else
+#  ifndef YYSTACK_USE_ALLOCA
+#   if defined (alloca) || defined (_ALLOCA_H)
+#    define YYSTACK_ALLOC alloca
+#   else
+#    ifdef __GNUC__
+#     define YYSTACK_ALLOC __builtin_alloca
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+#  if defined (__STDC__) || defined (__cplusplus)
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T size_t
+#  endif
+#  define YYSTACK_ALLOC malloc
+#  define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+
+#if (! defined (yyoverflow) \
+     && (! defined (__cplusplus) \
+	 || (YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  register YYSIZE_T yyi;		\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (0)
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+   typedef signed char yysigned_char;
+#else
+   typedef short yysigned_char;
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL  2
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   201
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  42
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  41
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  104
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  182
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   296
+
+#define YYTRANSLATE(YYX) 						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const unsigned char yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const unsigned short yyprhs[] =
+{
+       0,     0,     3,     4,     7,     9,    11,    13,    17,    19,
+      21,    23,    26,    28,    30,    32,    34,    36,    38,    42,
+      45,    49,    52,    53,    56,    59,    62,    65,    69,    74,
+      78,    83,    87,    91,    95,   100,   105,   110,   116,   119,
+     122,   124,   128,   131,   132,   135,   138,   141,   144,   149,
+     153,   157,   160,   165,   166,   169,   173,   175,   179,   182,
+     183,   186,   189,   192,   196,   199,   201,   205,   208,   209,
+     212,   215,   218,   222,   226,   228,   232,   235,   238,   241,
+     242,   245,   248,   253,   257,   261,   262,   265,   267,   269,
+     272,   275,   278,   280,   282,   283,   286,   288,   292,   296,
+     300,   303,   307,   311,   313
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yysigned_char yyrhs[] =
+{
+      43,     0,    -1,    -1,    43,    44,    -1,    45,    -1,    55,
+      -1,    66,    -1,     3,    77,    79,    -1,     5,    -1,    15,
+      -1,     8,    -1,     1,    79,    -1,    61,    -1,    71,    -1,
+      47,    -1,    49,    -1,    69,    -1,    79,    -1,    10,    28,
+      32,    -1,    46,    50,    -1,    11,    28,    32,    -1,    48,
+      50,    -1,    -1,    50,    51,    -1,    50,    75,    -1,    50,
+      73,    -1,    50,    32,    -1,    21,    76,    32,    -1,    22,
+      81,    80,    32,    -1,    23,    76,    32,    -1,    24,    81,
+      80,    32,    -1,    26,    76,    32,    -1,    27,    76,    32,
+      -1,    25,    76,    32,    -1,    19,    77,    80,    32,    -1,
+      20,    81,    80,    32,    -1,    36,    28,    80,    32,    -1,
+      37,    82,    82,    80,    32,    -1,     7,    32,    -1,    52,
+      56,    -1,    78,    -1,    53,    58,    54,    -1,    53,    58,
+      -1,    -1,    56,    57,    -1,    56,    75,    -1,    56,    73,
+      -1,    56,    32,    -1,    19,    77,    80,    32,    -1,    21,
+      76,    32,    -1,    23,    76,    32,    -1,    18,    32,    -1,
+      20,    28,    80,    32,    -1,    -1,    58,    45,    -1,    14,
+      81,    32,    -1,    78,    -1,    59,    62,    60,    -1,    59,
+      62,    -1,    -1,    62,    45,    -1,    62,    66,    -1,    62,
+      55,    -1,     4,    77,    32,    -1,    63,    74,    -1,    78,
+      -1,    64,    67,    65,    -1,    64,    67,    -1,    -1,    67,
+      45,    -1,    67,    66,    -1,    67,    55,    -1,    67,     1,
+      32,    -1,     6,    77,    32,    -1,    68,    -1,     9,    77,
+      32,    -1,    70,    74,    -1,    12,    32,    -1,    72,    13,
+      -1,    -1,    74,    75,    -1,    74,    32,    -1,    16,    35,
+      81,    32,    -1,    16,    81,    32,    -1,    17,    81,    32,
+      -1,    -1,    77,    80,    -1,    28,    -1,    29,    -1,     5,
+      79,    -1,     8,    79,    -1,    15,    79,    -1,    32,    -1,
+      31,    -1,    -1,    14,    81,    -1,    82,    -1,    82,    40,
+      82,    -1,    82,    30,    82,    -1,    34,    81,    33,    -1,
+      41,    81,    -1,    81,    38,    81,    -1,    81,    39,    81,
+      -1,    28,    -1,    29,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const unsigned short yyrline[] =
+{
+       0,    94,    94,    95,    98,    99,   100,   101,   102,   103,
+     104,   105,   109,   110,   111,   112,   113,   114,   120,   128,
+     134,   142,   152,   154,   155,   156,   157,   160,   166,   173,
+     179,   186,   192,   198,   204,   210,   216,   222,   230,   239,
+     245,   254,   255,   261,   263,   264,   265,   266,   269,   275,
+     281,   287,   293,   299,   301,   306,   315,   324,   325,   331,
+     333,   334,   335,   340,   347,   353,   362,   363,   369,   371,
+     372,   373,   374,   377,   383,   390,   397,   404,   410,   417,
+     418,   419,   422,   427,   432,   440,   442,   447,   448,   451,
+     452,   453,   457,   457,   459,   460,   463,   464,   465,   466,
+     467,   468,   469,   472,   473
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
+  "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
+  "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
+  "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE",
+  "T_DEF_TRISTATE", "T_BOOLEAN", "T_DEF_BOOLEAN", "T_STRING", "T_INT",
+  "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", "T_EOF", "T_EOL",
+  "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_SELECT", "T_RANGE", "T_OR",
+  "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block",
+  "common_block", "config_entry_start", "config_stmt",
+  "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
+  "config_option", "choice", "choice_entry", "choice_end", "choice_stmt",
+  "choice_option_list", "choice_option", "choice_block", "if", "if_end",
+  "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt",
+  "menu_block", "source", "source_stmt", "comment", "comment_stmt",
+  "help_start", "help", "depends_list", "depends", "prompt_stmt_opt",
+  "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const unsigned short yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const unsigned char yyr1[] =
+{
+       0,    42,    43,    43,    44,    44,    44,    44,    44,    44,
+      44,    44,    45,    45,    45,    45,    45,    45,    46,    47,
+      48,    49,    50,    50,    50,    50,    50,    51,    51,    51,
+      51,    51,    51,    51,    51,    51,    51,    51,    52,    53,
+      54,    55,    55,    56,    56,    56,    56,    56,    57,    57,
+      57,    57,    57,    58,    58,    59,    60,    61,    61,    62,
+      62,    62,    62,    63,    64,    65,    66,    66,    67,    67,
+      67,    67,    67,    68,    69,    70,    71,    72,    73,    74,
+      74,    74,    75,    75,    75,    76,    76,    77,    77,    78,
+      78,    78,    79,    79,    80,    80,    81,    81,    81,    81,
+      81,    81,    81,    82,    82
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const unsigned char yyr2[] =
+{
+       0,     2,     0,     2,     1,     1,     1,     3,     1,     1,
+       1,     2,     1,     1,     1,     1,     1,     1,     3,     2,
+       3,     2,     0,     2,     2,     2,     2,     3,     4,     3,
+       4,     3,     3,     3,     4,     4,     4,     5,     2,     2,
+       1,     3,     2,     0,     2,     2,     2,     2,     4,     3,
+       3,     2,     4,     0,     2,     3,     1,     3,     2,     0,
+       2,     2,     2,     3,     2,     1,     3,     2,     0,     2,
+       2,     2,     3,     3,     1,     3,     2,     2,     2,     0,
+       2,     2,     4,     3,     3,     0,     2,     1,     1,     2,
+       2,     2,     1,     1,     0,     2,     1,     3,     3,     3,
+       2,     3,     3,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const unsigned char yydefact[] =
+{
+       2,     0,     1,     0,     0,     0,     8,     0,     0,    10,
+       0,     0,     0,     0,     9,    93,    92,     3,     4,    22,
+      14,    22,    15,    43,    53,     5,    59,    12,    79,    68,
+       6,    74,    16,    79,    13,    17,    11,    87,    88,     0,
+       0,     0,    38,     0,     0,     0,   103,   104,     0,     0,
+       0,    96,    19,    21,    39,    42,    58,    64,     0,    76,
+       7,    63,    73,    75,    18,    20,     0,   100,    55,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    85,     0,
+      85,     0,    85,    85,    85,    26,     0,     0,    23,     0,
+      25,    24,     0,     0,     0,    85,    85,    47,    44,    46,
+      45,     0,     0,     0,    54,    41,    40,    60,    62,    57,
+      61,    56,    81,    80,     0,    69,    71,    66,    70,    65,
+      99,   101,   102,    98,    97,    77,     0,     0,     0,    94,
+      94,     0,    94,    94,     0,    94,     0,     0,     0,    94,
+       0,    78,    51,    94,    94,     0,     0,    89,    90,    91,
+      72,     0,    83,    84,     0,     0,     0,    27,    86,     0,
+      29,     0,    33,    31,    32,     0,    94,     0,     0,    49,
+      50,    82,    95,    34,    35,    28,    30,    36,     0,    48,
+      52,    37
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short yydefgoto[] =
+{
+      -1,     1,    17,    18,    19,    20,    21,    22,    52,    88,
+      23,    24,   105,    25,    54,    98,    55,    26,   109,    27,
+      56,    28,    29,   117,    30,    58,    31,    32,    33,    34,
+      89,    90,    57,    91,   131,   132,   106,    35,   155,    50,
+      51
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -99
+static const short yypact[] =
+{
+     -99,    48,   -99,    38,    46,    46,   -99,    46,   -29,   -99,
+      46,   -17,    -3,   -11,   -99,   -99,   -99,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,    38,
+      12,    15,   -99,    18,    51,    62,   -99,   -99,   -11,   -11,
+       4,   -24,   138,   138,   160,   121,   110,    -4,    81,    -4,
+     -99,   -99,   -99,   -99,   -99,   -99,   -19,   -99,   -99,   -11,
+     -11,    70,    70,    73,    32,   -11,    46,   -11,    46,   -11,
+      46,   -11,    46,    46,    46,   -99,    36,    70,   -99,    95,
+     -99,   -99,    96,    46,   106,    46,    46,   -99,   -99,   -99,
+     -99,    38,    38,    38,   -99,   -99,   -99,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   112,   -99,   -99,   -99,   -99,   -99,
+     -99,   117,   -99,   -99,   -99,   -99,   -11,    33,    65,   131,
+       1,   119,   131,     1,   136,     1,   153,   154,   155,   131,
+      70,   -99,   -99,   131,   131,   156,   157,   -99,   -99,   -99,
+     -99,   101,   -99,   -99,   -11,   158,   159,   -99,   -99,   161,
+     -99,   162,   -99,   -99,   -99,   163,   131,   164,   165,   -99,
+     -99,   -99,    99,   -99,   -99,   -99,   -99,   -99,   166,   -99,
+     -99,   -99
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const short yypgoto[] =
+{
+     -99,   -99,   -99,   111,   -99,   -99,   -99,   -99,   178,   -99,
+     -99,   -99,   -99,    91,   -99,   -99,   -99,   -99,   -99,   -99,
+     -99,   -99,   -99,   -99,   115,   -99,   -99,   -99,   -99,   -99,
+     -99,   146,   168,    89,    27,     0,   126,    -1,   -98,   -48,
+     -63
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -68
+static const short yytable[] =
+{
+      66,    67,    36,    42,    39,    40,    71,    41,   123,   124,
+      43,    44,    74,    75,   120,   154,    72,    46,    47,    69,
+      70,   121,   122,    48,   140,    45,   127,   128,   112,   130,
+      49,   133,   156,   135,   158,   159,    68,   161,    60,    69,
+      70,   165,    69,    70,    61,   167,   168,    62,     2,     3,
+      63,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      46,    47,    13,    14,   139,   152,    48,   126,   178,    15,
+      16,    69,    70,    49,    37,    38,   129,   166,   151,    15,
+      16,   -67,   114,    64,   -67,     5,   101,     7,     8,   102,
+      10,    11,    12,   143,    65,    13,   103,   153,    46,    47,
+     147,   148,   149,    69,    70,   125,   172,   134,   141,   136,
+     137,   138,    15,    16,     5,   101,     7,     8,   102,    10,
+      11,    12,   145,   146,    13,   103,   101,     7,   142,   102,
+      10,    11,    12,   171,   144,    13,   103,    69,    70,    69,
+      70,    15,    16,   100,   150,   154,   113,   108,   113,   116,
+      73,   157,    15,    16,    74,    75,    70,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,   104,   107,   160,   115,
+      85,   110,    73,   118,    86,    87,    74,    75,    92,    93,
+      94,    95,   111,    96,   119,   162,   163,   164,   169,   170,
+     173,   174,    97,   175,   176,   177,   179,   180,   181,    53,
+      99,    59
+};
+
+static const unsigned char yycheck[] =
+{
+      48,    49,     3,    32,     4,     5,    30,     7,    71,    72,
+      10,    28,    16,    17,    33,    14,    40,    28,    29,    38,
+      39,    69,    70,    34,    87,    28,    74,    75,    32,    77,
+      41,    79,   130,    81,   132,   133,    32,   135,    39,    38,
+      39,   139,    38,    39,    32,   143,   144,    32,     0,     1,
+      32,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      28,    29,    14,    15,    28,    32,    34,    35,   166,    31,
+      32,    38,    39,    41,    28,    29,    76,   140,   126,    31,
+      32,     0,     1,    32,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    93,    32,    14,    15,    32,    28,    29,
+     101,   102,   103,    38,    39,    32,   154,    80,    13,    82,
+      83,    84,    31,    32,     4,     5,     6,     7,     8,     9,
+      10,    11,    95,    96,    14,    15,     5,     6,    32,     8,
+       9,    10,    11,    32,    28,    14,    15,    38,    39,    38,
+      39,    31,    32,    54,    32,    14,    57,    56,    59,    58,
+      12,    32,    31,    32,    16,    17,    39,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    55,    56,    32,    58,
+      32,    56,    12,    58,    36,    37,    16,    17,    18,    19,
+      20,    21,    56,    23,    58,    32,    32,    32,    32,    32,
+      32,    32,    32,    32,    32,    32,    32,    32,    32,    21,
+      54,    33
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const unsigned char yystos[] =
+{
+       0,    43,     0,     1,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    14,    15,    31,    32,    44,    45,    46,
+      47,    48,    49,    52,    53,    55,    59,    61,    63,    64,
+      66,    68,    69,    70,    71,    79,    79,    28,    29,    77,
+      77,    77,    32,    77,    28,    28,    28,    29,    34,    41,
+      81,    82,    50,    50,    56,    58,    62,    74,    67,    74,
+      79,    32,    32,    32,    32,    32,    81,    81,    32,    38,
+      39,    30,    40,    12,    16,    17,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    32,    36,    37,    51,    72,
+      73,    75,    18,    19,    20,    21,    23,    32,    57,    73,
+      75,     5,     8,    15,    45,    54,    78,    45,    55,    60,
+      66,    78,    32,    75,     1,    45,    55,    65,    66,    78,
+      33,    81,    81,    82,    82,    32,    35,    81,    81,    77,
+      81,    76,    77,    81,    76,    81,    76,    76,    76,    28,
+      82,    13,    32,    77,    28,    76,    76,    79,    79,    79,
+      32,    81,    32,    32,    14,    80,    80,    32,    80,    80,
+      32,    80,    32,    32,    32,    80,    82,    80,    80,    32,
+      32,    32,    81,    32,    32,    32,    32,    32,    80,    32,
+      32,    32
+};
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrlab1
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK;						\
+      goto yybackup;						\
+    }								\
+  else								\
+    { 								\
+      yyerror ("syntax error: cannot back up");\
+      YYERROR;							\
+    }								\
+while (0)
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+   are run).  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)         \
+  Current.first_line   = Rhs[1].first_line;      \
+  Current.first_column = Rhs[1].first_column;    \
+  Current.last_line    = Rhs[N].last_line;       \
+  Current.last_column  = Rhs[N].last_column;
+#endif
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (0)
+
+# define YYDSYMPRINT(Args)			\
+do {						\
+  if (yydebug)					\
+    yysymprint Args;				\
+} while (0)
+
+# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+do {								\
+  if (yydebug)							\
+    {								\
+      YYFPRINTF (stderr, "%s ", Title);				\
+      yysymprint (stderr, 					\
+                  Token, Value);	\
+      YYFPRINTF (stderr, "\n");					\
+    }								\
+} while (0)
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (cinluded).                                                   |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_stack_print (short *bottom, short *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    short *bottom;
+    short *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (/* Nothing. */; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_reduce_print (int yyrule)
+#else
+static void
+yy_reduce_print (yyrule)
+    int yyrule;
+#endif
+{
+  int yyi;
+  unsigned int yylineno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+             yyrule - 1, yylineno);
+  /* Print the symbols being reduced, and their result.  */
+  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (Rule);		\
+} while (0)
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YYDSYMPRINT(Args)
+# define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
+{
+  register const char *yys = yystr;
+
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
+{
+  register char *yyd = yydest;
+  register const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+#endif /* !YYERROR_VERBOSE */
+
+
+
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  if (yytype < YYNTOKENS)
+    {
+      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+# ifdef YYPRINT
+      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+    }
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  switch (yytype)
+    {
+      default:
+        break;
+    }
+  YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yydestruct (int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yytype, yyvaluep)
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  switch (yytype)
+    {
+
+      default:
+        break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM);
+# else
+int yyparse ();
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM)
+# else
+int yyparse (YYPARSE_PARAM)
+  void *YYPARSE_PARAM;
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+  register int yystate;
+  register int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  short	yyssa[YYINITDEPTH];
+  short *yyss = yyssa;
+  register short *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  register YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule.  */
+  int yylen;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed. so pushing a state here evens the stacks.
+     */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack. Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	short *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow ("parser stack overflow",
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyoverflowlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyoverflowlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	short *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyoverflowlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 8:
+
+    { zconfprint("unexpected 'endmenu' statement"); ;}
+    break;
+
+  case 9:
+
+    { zconfprint("unexpected 'endif' statement"); ;}
+    break;
+
+  case 10:
+
+    { zconfprint("unexpected 'endchoice' statement"); ;}
+    break;
+
+  case 11:
+
+    { zconfprint("syntax error"); yyerrok; ;}
+    break;
+
+  case 18:
+
+    {
+	struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
+	sym->flags |= SYMBOL_OPTIONAL;
+	menu_add_entry(sym);
+	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
+;}
+    break;
+
+  case 19:
+
+    {
+	menu_end_entry();
+	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 20:
+
+    {
+	struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
+	sym->flags |= SYMBOL_OPTIONAL;
+	menu_add_entry(sym);
+	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
+;}
+    break;
+
+  case 21:
+
+    {
+	if (current_entry->prompt)
+		current_entry->prompt->type = P_MENU;
+	else
+		zconfprint("warning: menuconfig statement without prompt");
+	menu_end_entry();
+	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 27:
+
+    {
+	menu_set_type(S_TRISTATE);
+	printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 28:
+
+    {
+	menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
+	menu_set_type(S_TRISTATE);
+	printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 29:
+
+    {
+	menu_set_type(S_BOOLEAN);
+	printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 30:
+
+    {
+	menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
+	menu_set_type(S_BOOLEAN);
+	printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 31:
+
+    {
+	menu_set_type(S_INT);
+	printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 32:
+
+    {
+	menu_set_type(S_HEX);
+	printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 33:
+
+    {
+	menu_set_type(S_STRING);
+	printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 34:
+
+    {
+	menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 35:
+
+    {
+	menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 36:
+
+    {
+	menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 37:
+
+    {
+	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 38:
+
+    {
+	struct symbol *sym = sym_lookup(NULL, 0);
+	sym->flags |= SYMBOL_CHOICE;
+	menu_add_entry(sym);
+	menu_add_expr(P_CHOICE, NULL, NULL);
+	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 39:
+
+    {
+	menu_end_entry();
+	menu_add_menu();
+;}
+    break;
+
+  case 40:
+
+    {
+	if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) {
+		menu_end_menu();
+		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
+	}
+;}
+    break;
+
+  case 42:
+
+    {
+	printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
+	zconfnerrs++;
+;}
+    break;
+
+  case 48:
+
+    {
+	menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 49:
+
+    {
+	menu_set_type(S_TRISTATE);
+	printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 50:
+
+    {
+	menu_set_type(S_BOOLEAN);
+	printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 51:
+
+    {
+	current_entry->sym->flags |= SYMBOL_OPTIONAL;
+	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 52:
+
+    {
+	menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 55:
+
+    {
+	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
+	menu_add_entry(NULL);
+	menu_add_dep(yyvsp[-1].expr);
+	menu_end_entry();
+	menu_add_menu();
+;}
+    break;
+
+  case 56:
+
+    {
+	if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) {
+		menu_end_menu();
+		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
+	}
+;}
+    break;
+
+  case 58:
+
+    {
+	printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
+	zconfnerrs++;
+;}
+    break;
+
+  case 63:
+
+    {
+	menu_add_entry(NULL);
+	menu_add_prop(P_MENU, yyvsp[-1].string, NULL, NULL);
+	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 64:
+
+    {
+	menu_end_entry();
+	menu_add_menu();
+;}
+    break;
+
+  case 65:
+
+    {
+	if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) {
+		menu_end_menu();
+		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
+	}
+;}
+    break;
+
+  case 67:
+
+    {
+	printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
+	zconfnerrs++;
+;}
+    break;
+
+  case 72:
+
+    { zconfprint("invalid menu option"); yyerrok; ;}
+    break;
+
+  case 73:
+
+    {
+	yyval.string = yyvsp[-1].string;
+	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
+;}
+    break;
+
+  case 74:
+
+    {
+	zconf_nextfile(yyvsp[0].string);
+;}
+    break;
+
+  case 75:
+
+    {
+	menu_add_entry(NULL);
+	menu_add_prop(P_COMMENT, yyvsp[-1].string, NULL, NULL);
+	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 76:
+
+    {
+	menu_end_entry();
+;}
+    break;
+
+  case 77:
+
+    {
+	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
+	zconf_starthelp();
+;}
+    break;
+
+  case 78:
+
+    {
+	current_entry->sym->help = yyvsp[0].string;
+;}
+    break;
+
+  case 82:
+
+    {
+	menu_add_dep(yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 83:
+
+    {
+	menu_add_dep(yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 84:
+
+    {
+	menu_add_dep(yyvsp[-1].expr);
+	printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
+;}
+    break;
+
+  case 86:
+
+    {
+	menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr);
+;}
+    break;
+
+  case 89:
+
+    { yyval.token = T_ENDMENU; ;}
+    break;
+
+  case 90:
+
+    { yyval.token = T_ENDCHOICE; ;}
+    break;
+
+  case 91:
+
+    { yyval.token = T_ENDIF; ;}
+    break;
+
+  case 94:
+
+    { yyval.expr = NULL; ;}
+    break;
+
+  case 95:
+
+    { yyval.expr = yyvsp[0].expr; ;}
+    break;
+
+  case 96:
+
+    { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;}
+    break;
+
+  case 97:
+
+    { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
+    break;
+
+  case 98:
+
+    { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
+    break;
+
+  case 99:
+
+    { yyval.expr = yyvsp[-1].expr; ;}
+    break;
+
+  case 100:
+
+    { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;}
+    break;
+
+  case 101:
+
+    { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;}
+    break;
+
+  case 102:
+
+    { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;}
+    break;
+
+  case 103:
+
+    { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
+    break;
+
+  case 104:
+
+    { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
+    break;
+
+
+    }
+
+/* Line 999 of yacc.c.  */
+
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+
+
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
+	{
+	  YYSIZE_T yysize = 0;
+	  int yytype = YYTRANSLATE (yychar);
+	  char *yymsg;
+	  int yyx, yycount;
+
+	  yycount = 0;
+	  /* Start YYX at -YYN if negative to avoid negative indexes in
+	     YYCHECK.  */
+	  for (yyx = yyn < 0 ? -yyn : 0;
+	       yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	      yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+	  yysize += yystrlen ("syntax error, unexpected ") + 1;
+	  yysize += yystrlen (yytname[yytype]);
+	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+	  if (yymsg != 0)
+	    {
+	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+	      yyp = yystpcpy (yyp, yytname[yytype]);
+
+	      if (yycount < 5)
+		{
+		  yycount = 0;
+		  for (yyx = yyn < 0 ? -yyn : 0;
+		       yyx < (int) (sizeof (yytname) / sizeof (char *));
+		       yyx++)
+		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+		      {
+			const char *yyq = ! yycount ? ", expecting " : " or ";
+			yyp = yystpcpy (yyp, yyq);
+			yyp = yystpcpy (yyp, yytname[yyx]);
+			yycount++;
+		      }
+		}
+	      yyerror (yymsg);
+	      YYSTACK_FREE (yymsg);
+	    }
+	  else
+	    yyerror ("syntax error; also virtual memory exhausted");
+	}
+      else
+#endif /* YYERROR_VERBOSE */
+	yyerror ("syntax error");
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      /* Return failure if at end of input.  */
+      if (yychar == YYEOF)
+        {
+	  /* Pop the error token.  */
+          YYPOPSTACK;
+	  /* Pop the rest of the stack.  */
+	  while (yyss < yyssp)
+	    {
+	      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+	      yydestruct (yystos[*yyssp], yyvsp);
+	      YYPOPSTACK;
+	    }
+	  YYABORT;
+        }
+
+      YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+      yydestruct (yytoken, &yylval);
+      yychar = YYEMPTY;
+
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*----------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action.  |
+`----------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+      yydestruct (yystos[yystate], yyvsp);
+      yyvsp--;
+      yystate = *--yyssp;
+
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  YYDPRINTF ((stderr, "Shifting error token, "));
+
+  *++yyvsp = yylval;
+
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*----------------------------------------------.
+| yyoverflowlab -- parser overflow comes here.  |
+`----------------------------------------------*/
+yyoverflowlab:
+  yyerror ("parser stack overflow");
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+}
+
+
+
+
+
+void conf_parse(const char *name)
+{
+	struct symbol *sym;
+	int i;
+
+	zconf_initscan(name);
+
+	sym_init();
+	menu_init();
+	modules_sym = sym_lookup("MODULES", 0);
+	rootmenu.prompt = menu_add_prop(P_MENU, "Buildroot Configuration", NULL, NULL);
+
+	//zconfdebug = 1;
+	zconfparse();
+	if (zconfnerrs)
+		exit(1);
+	menu_finalize(&rootmenu);
+	for_all_symbols(i, sym) {
+                if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
+                        printf("\n");
+		else
+			sym->flags |= SYMBOL_CHECK_DONE;
+        }
+
+	sym_change_count = 1;
+}
+
+const char *zconf_tokenname(int token)
+{
+	switch (token) {
+	case T_MENU:		return "menu";
+	case T_ENDMENU:		return "endmenu";
+	case T_CHOICE:		return "choice";
+	case T_ENDCHOICE:	return "endchoice";
+	case T_IF:		return "if";
+	case T_ENDIF:		return "endif";
+	}
+	return "<token>";
+}
+
+static bool zconf_endtoken(int token, int starttoken, int endtoken)
+{
+	if (token != endtoken) {
+		zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
+		zconfnerrs++;
+		return false;
+	}
+	if (current_menu->file != current_file) {
+		zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
+		zconfprint("location of the '%s'", zconf_tokenname(starttoken));
+		zconfnerrs++;
+		return false;
+	}
+	return true;
+}
+
+static void zconfprint(const char *err, ...)
+{
+	va_list ap;
+
+	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
+	va_start(ap, err);
+	vfprintf(stderr, err, ap);
+	va_end(ap);
+	fprintf(stderr, "\n");
+}
+
+static void zconferror(const char *err)
+{
+	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
+}
+
+void print_quoted_string(FILE *out, const char *str)
+{
+	const char *p;
+	int len;
+
+	putc('"', out);
+	while ((p = strchr(str, '"'))) {
+		len = p - str;
+		if (len)
+			fprintf(out, "%.*s", len, str);
+		fputs("\\\"", out);
+		str = p + 1;
+	}
+	fputs(str, out);
+	putc('"', out);
+}
+
+void print_symbol(FILE *out, struct menu *menu)
+{
+	struct symbol *sym = menu->sym;
+	struct property *prop;
+
+	if (sym_is_choice(sym))
+		fprintf(out, "choice\n");
+	else
+		fprintf(out, "config %s\n", sym->name);
+	switch (sym->type) {
+	case S_BOOLEAN:
+		fputs("  boolean\n", out);
+		break;
+	case S_TRISTATE:
+		fputs("  tristate\n", out);
+		break;
+	case S_STRING:
+		fputs("  string\n", out);
+		break;
+	case S_INT:
+		fputs("  integer\n", out);
+		break;
+	case S_HEX:
+		fputs("  hex\n", out);
+		break;
+	default:
+		fputs("  ???\n", out);
+		break;
+	}
+	for (prop = sym->prop; prop; prop = prop->next) {
+		if (prop->menu != menu)
+			continue;
+		switch (prop->type) {
+		case P_PROMPT:
+			fputs("  prompt ", out);
+			print_quoted_string(out, prop->text);
+			if (!expr_is_yes(prop->visible.expr)) {
+				fputs(" if ", out);
+				expr_fprint(prop->visible.expr, out);
+			}
+			fputc('\n', out);
+			break;
+		case P_DEFAULT:
+			fputs( "  default ", out);
+			expr_fprint(prop->expr, out);
+			if (!expr_is_yes(prop->visible.expr)) {
+				fputs(" if ", out);
+				expr_fprint(prop->visible.expr, out);
+			}
+			fputc('\n', out);
+			break;
+		case P_CHOICE:
+			fputs("  #choice value\n", out);
+			break;
+		default:
+			fprintf(out, "  unknown prop %d!\n", prop->type);
+			break;
+		}
+	}
+	if (sym->help) {
+		int len = strlen(sym->help);
+		while (sym->help[--len] == '\n')
+			sym->help[len] = 0;
+		fprintf(out, "  help\n%s\n", sym->help);
+	}
+	fputc('\n', out);
+}
+
+void zconfdump(FILE *out)
+{
+	struct property *prop;
+	struct symbol *sym;
+	struct menu *menu;
+
+	menu = rootmenu.list;
+	while (menu) {
+		if ((sym = menu->sym))
+			print_symbol(out, menu);
+		else if ((prop = menu->prompt)) {
+			switch (prop->type) {
+			case P_COMMENT:
+				fputs("\ncomment ", out);
+				print_quoted_string(out, prop->text);
+				fputs("\n", out);
+				break;
+			case P_MENU:
+				fputs("\nmenu ", out);
+				print_quoted_string(out, prop->text);
+				fputs("\n", out);
+				break;
+			default:
+				;
+			}
+			if (!expr_is_yes(prop->visible.expr)) {
+				fputs("  depends ", out);
+				expr_fprint(prop->visible.expr, out);
+				fputc('\n', out);
+			}
+			fputs("\n", out);
+		}
+
+		if (menu->list)
+			menu = menu->list;
+		else if (menu->next)
+			menu = menu->next;
+		else while ((menu = menu->parent)) {
+			if (menu->prompt && menu->prompt->type == P_MENU)
+				fputs("\nendmenu\n", out);
+			if (menu->next) {
+				menu = menu->next;
+				break;
+			}
+		}
+	}
+}
+
+#include "lex.zconf.c"
+#include "confdata.c"
+#include "expr.c"
+#include "symbol.c"
+#include "menu.c"
+
+
diff --git a/openwrt/package/config/zconf.tab.h_shipped b/openwrt/package/config/zconf.tab.h_shipped
new file mode 100644
index 0000000000..3b191ef599
--- /dev/null
+++ b/openwrt/package/config/zconf.tab.h_shipped
@@ -0,0 +1,125 @@
+/* A Bison parser, made from zconf.y, by GNU bison 1.75.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+#ifndef BISON_ZCONF_TAB_H
+# define BISON_ZCONF_TAB_H
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     T_MAINMENU = 258,
+     T_MENU = 259,
+     T_ENDMENU = 260,
+     T_SOURCE = 261,
+     T_CHOICE = 262,
+     T_ENDCHOICE = 263,
+     T_COMMENT = 264,
+     T_CONFIG = 265,
+     T_HELP = 266,
+     T_HELPTEXT = 267,
+     T_IF = 268,
+     T_ENDIF = 269,
+     T_DEPENDS = 270,
+     T_REQUIRES = 271,
+     T_OPTIONAL = 272,
+     T_PROMPT = 273,
+     T_DEFAULT = 274,
+     T_TRISTATE = 275,
+     T_BOOLEAN = 276,
+     T_INT = 277,
+     T_HEX = 278,
+     T_WORD = 279,
+     T_STRING = 280,
+     T_UNEQUAL = 281,
+     T_EOF = 282,
+     T_EOL = 283,
+     T_CLOSE_PAREN = 284,
+     T_OPEN_PAREN = 285,
+     T_ON = 286,
+     T_OR = 287,
+     T_AND = 288,
+     T_EQUAL = 289,
+     T_NOT = 290
+   };
+#endif
+#define T_MAINMENU 258
+#define T_MENU 259
+#define T_ENDMENU 260
+#define T_SOURCE 261
+#define T_CHOICE 262
+#define T_ENDCHOICE 263
+#define T_COMMENT 264
+#define T_CONFIG 265
+#define T_HELP 266
+#define T_HELPTEXT 267
+#define T_IF 268
+#define T_ENDIF 269
+#define T_DEPENDS 270
+#define T_REQUIRES 271
+#define T_OPTIONAL 272
+#define T_PROMPT 273
+#define T_DEFAULT 274
+#define T_TRISTATE 275
+#define T_BOOLEAN 276
+#define T_INT 277
+#define T_HEX 278
+#define T_WORD 279
+#define T_STRING 280
+#define T_UNEQUAL 281
+#define T_EOF 282
+#define T_EOL 283
+#define T_CLOSE_PAREN 284
+#define T_OPEN_PAREN 285
+#define T_ON 286
+#define T_OR 287
+#define T_AND 288
+#define T_EQUAL 289
+#define T_NOT 290
+
+
+
+
+#ifndef YYSTYPE
+#line 33 "zconf.y"
+typedef union {
+	int token;
+	char *string;
+	struct symbol *symbol;
+	struct expr *expr;
+	struct menu *menu;
+} yystype;
+/* Line 1281 of /usr/share/bison/yacc.c.  */
+#line 118 "zconf.tab.h"
+# define YYSTYPE yystype
+#endif
+
+extern YYSTYPE zconflval;
+
+
+#endif /* not BISON_ZCONF_TAB_H */
+
diff --git a/openwrt/package/config/zconf.y b/openwrt/package/config/zconf.y
new file mode 100644
index 0000000000..f354c89e6c
--- /dev/null
+++ b/openwrt/package/config/zconf.y
@@ -0,0 +1,687 @@
+%{
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ * Released under the terms of the GNU GPL v2.0.
+ */
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
+
+#define PRINTD		0x0001
+#define DEBUG_PARSE	0x0002
+
+int cdebug = PRINTD;
+
+extern int zconflex(void);
+static void zconfprint(const char *err, ...);
+static void zconferror(const char *err);
+static bool zconf_endtoken(int token, int starttoken, int endtoken);
+
+struct symbol *symbol_hash[257];
+
+#define YYERROR_VERBOSE
+%}
+%expect 40
+
+%union
+{
+	int token;
+	char *string;
+	struct symbol *symbol;
+	struct expr *expr;
+	struct menu *menu;
+}
+
+%token T_MAINMENU
+%token T_MENU
+%token T_ENDMENU
+%token T_SOURCE
+%token T_CHOICE
+%token T_ENDCHOICE
+%token T_COMMENT
+%token T_CONFIG
+%token T_MENUCONFIG
+%token T_HELP
+%token <string> T_HELPTEXT
+%token T_IF
+%token T_ENDIF
+%token T_DEPENDS
+%token T_REQUIRES
+%token T_OPTIONAL
+%token T_PROMPT
+%token T_DEFAULT
+%token T_TRISTATE
+%token T_DEF_TRISTATE
+%token T_BOOLEAN
+%token T_DEF_BOOLEAN
+%token T_STRING
+%token T_INT
+%token T_HEX
+%token <string> T_WORD
+%token <string> T_WORD_QUOTE
+%token T_UNEQUAL
+%token T_EOF
+%token T_EOL
+%token T_CLOSE_PAREN
+%token T_OPEN_PAREN
+%token T_ON
+%token T_SELECT
+%token T_RANGE
+
+%left T_OR
+%left T_AND
+%left T_EQUAL T_UNEQUAL
+%nonassoc T_NOT
+
+%type <string> prompt
+%type <string> source
+%type <symbol> symbol
+%type <expr> expr
+%type <expr> if_expr
+%type <token> end
+
+%{
+#define LKC_DIRECT_LINK
+#include "lkc.h"
+%}
+%%
+input:	  /* empty */
+	| input block
+;
+
+block:	  common_block
+	| choice_stmt
+	| menu_stmt
+	| T_MAINMENU prompt nl_or_eof
+	| T_ENDMENU		{ zconfprint("unexpected 'endmenu' statement"); }
+	| T_ENDIF		{ zconfprint("unexpected 'endif' statement"); }
+	| T_ENDCHOICE		{ zconfprint("unexpected 'endchoice' statement"); }
+	| error nl_or_eof	{ zconfprint("syntax error"); yyerrok; }
+;
+
+common_block:
+	  if_stmt
+	| comment_stmt
+	| config_stmt
+	| menuconfig_stmt
+	| source_stmt
+	| nl_or_eof
+;
+
+
+/* config/menuconfig entry */
+
+config_entry_start: T_CONFIG T_WORD T_EOL
+{
+	struct symbol *sym = sym_lookup($2, 0);
+	sym->flags |= SYMBOL_OPTIONAL;
+	menu_add_entry(sym);
+	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2);
+};
+
+config_stmt: config_entry_start config_option_list
+{
+	menu_end_entry();
+	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+};
+
+menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
+{
+	struct symbol *sym = sym_lookup($2, 0);
+	sym->flags |= SYMBOL_OPTIONAL;
+	menu_add_entry(sym);
+	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2);
+};
+
+menuconfig_stmt: menuconfig_entry_start config_option_list
+{
+	if (current_entry->prompt)
+		current_entry->prompt->type = P_MENU;
+	else
+		zconfprint("warning: menuconfig statement without prompt");
+	menu_end_entry();
+	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+};
+
+config_option_list:
+	  /* empty */
+	| config_option_list config_option
+	| config_option_list depends
+	| config_option_list help
+	| config_option_list T_EOL
+;
+
+config_option: T_TRISTATE prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_TRISTATE);
+	printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_DEF_TRISTATE expr if_expr T_EOL
+{
+	menu_add_expr(P_DEFAULT, $2, $3);
+	menu_set_type(S_TRISTATE);
+	printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_BOOLEAN prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_BOOLEAN);
+	printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_DEF_BOOLEAN expr if_expr T_EOL
+{
+	menu_add_expr(P_DEFAULT, $2, $3);
+	menu_set_type(S_BOOLEAN);
+	printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_INT prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_INT);
+	printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_HEX prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_HEX);
+	printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_STRING prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_STRING);
+	printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_PROMPT prompt if_expr T_EOL
+{
+	menu_add_prompt(P_PROMPT, $2, $3);
+	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_DEFAULT expr if_expr T_EOL
+{
+	menu_add_expr(P_DEFAULT, $2, $3);
+	printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_SELECT T_WORD if_expr T_EOL
+{
+	menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);
+	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_RANGE symbol symbol if_expr T_EOL
+{
+	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4);
+	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
+};
+
+/* choice entry */
+
+choice: T_CHOICE T_EOL
+{
+	struct symbol *sym = sym_lookup(NULL, 0);
+	sym->flags |= SYMBOL_CHOICE;
+	menu_add_entry(sym);
+	menu_add_expr(P_CHOICE, NULL, NULL);
+	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
+};
+
+choice_entry: choice choice_option_list
+{
+	menu_end_entry();
+	menu_add_menu();
+};
+
+choice_end: end
+{
+	if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) {
+		menu_end_menu();
+		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
+	}
+};
+
+choice_stmt:
+	  choice_entry choice_block choice_end
+	| choice_entry choice_block
+{
+	printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
+	zconfnerrs++;
+};
+
+choice_option_list:
+	  /* empty */
+	| choice_option_list choice_option
+	| choice_option_list depends
+	| choice_option_list help
+	| choice_option_list T_EOL
+;
+
+choice_option: T_PROMPT prompt if_expr T_EOL
+{
+	menu_add_prompt(P_PROMPT, $2, $3);
+	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
+};
+
+choice_option: T_TRISTATE prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_TRISTATE);
+	printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
+};
+
+choice_option: T_BOOLEAN prompt_stmt_opt T_EOL
+{
+	menu_set_type(S_BOOLEAN);
+	printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
+};
+
+choice_option: T_OPTIONAL T_EOL
+{
+	current_entry->sym->flags |= SYMBOL_OPTIONAL;
+	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
+};
+
+choice_option: T_DEFAULT T_WORD if_expr T_EOL
+{
+	menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
+	printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
+};
+
+choice_block:
+	  /* empty */
+	| choice_block common_block
+;
+
+/* if entry */
+
+if: T_IF expr T_EOL
+{
+	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
+	menu_add_entry(NULL);
+	menu_add_dep($2);
+	menu_end_entry();
+	menu_add_menu();
+};
+
+if_end: end
+{
+	if (zconf_endtoken($1, T_IF, T_ENDIF)) {
+		menu_end_menu();
+		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
+	}
+};
+
+if_stmt:
+	  if if_block if_end
+	| if if_block
+{
+	printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
+	zconfnerrs++;
+};
+
+if_block:
+	  /* empty */
+	| if_block common_block
+	| if_block menu_stmt
+	| if_block choice_stmt
+;
+
+/* menu entry */
+
+menu: T_MENU prompt T_EOL
+{
+	menu_add_entry(NULL);
+	menu_add_prop(P_MENU, $2, NULL, NULL);
+	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
+};
+
+menu_entry: menu depends_list
+{
+	menu_end_entry();
+	menu_add_menu();
+};
+
+menu_end: end
+{
+	if (zconf_endtoken($1, T_MENU, T_ENDMENU)) {
+		menu_end_menu();
+		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
+	}
+};
+
+menu_stmt:
+	  menu_entry menu_block menu_end
+	| menu_entry menu_block
+{
+	printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
+	zconfnerrs++;
+};
+
+menu_block:
+	  /* empty */
+	| menu_block common_block
+	| menu_block menu_stmt
+	| menu_block choice_stmt
+	| menu_block error T_EOL		{ zconfprint("invalid menu option"); yyerrok; }
+;
+
+source: T_SOURCE prompt T_EOL
+{
+	$$ = $2;
+	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
+};
+
+source_stmt: source
+{
+	zconf_nextfile($1);
+};
+
+/* comment entry */
+
+comment: T_COMMENT prompt T_EOL
+{
+	menu_add_entry(NULL);
+	menu_add_prop(P_COMMENT, $2, NULL, NULL);
+	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
+};
+
+comment_stmt: comment depends_list
+{
+	menu_end_entry();
+};
+
+/* help option */
+
+help_start: T_HELP T_EOL
+{
+	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
+	zconf_starthelp();
+};
+
+help: help_start T_HELPTEXT
+{
+	current_entry->sym->help = $2;
+};
+
+/* depends option */
+
+depends_list:	  /* empty */
+		| depends_list depends
+		| depends_list T_EOL
+;
+
+depends: T_DEPENDS T_ON expr T_EOL
+{
+	menu_add_dep($3);
+	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
+}
+	| T_DEPENDS expr T_EOL
+{
+	menu_add_dep($2);
+	printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
+}
+	| T_REQUIRES expr T_EOL
+{
+	menu_add_dep($2);
+	printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
+};
+
+/* prompt statement */
+
+prompt_stmt_opt:
+	  /* empty */
+	| prompt if_expr
+{
+	menu_add_prop(P_PROMPT, $1, NULL, $2);
+};
+
+prompt:	  T_WORD
+	| T_WORD_QUOTE
+;
+
+end:	  T_ENDMENU nl_or_eof	{ $$ = T_ENDMENU; }
+	| T_ENDCHOICE nl_or_eof	{ $$ = T_ENDCHOICE; }
+	| T_ENDIF nl_or_eof	{ $$ = T_ENDIF; }
+;
+
+nl_or_eof:
+	T_EOL | T_EOF;
+
+if_expr:  /* empty */			{ $$ = NULL; }
+	| T_IF expr			{ $$ = $2; }
+;
+
+expr:	  symbol				{ $$ = expr_alloc_symbol($1); }
+	| symbol T_EQUAL symbol			{ $$ = expr_alloc_comp(E_EQUAL, $1, $3); }
+	| symbol T_UNEQUAL symbol		{ $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); }
+	| T_OPEN_PAREN expr T_CLOSE_PAREN	{ $$ = $2; }
+	| T_NOT expr				{ $$ = expr_alloc_one(E_NOT, $2); }
+	| expr T_OR expr			{ $$ = expr_alloc_two(E_OR, $1, $3); }
+	| expr T_AND expr			{ $$ = expr_alloc_two(E_AND, $1, $3); }
+;
+
+symbol:	  T_WORD	{ $$ = sym_lookup($1, 0); free($1); }
+	| T_WORD_QUOTE	{ $$ = sym_lookup($1, 1); free($1); }
+;
+
+%%
+
+void conf_parse(const char *name)
+{
+	struct symbol *sym;
+	int i;
+
+	zconf_initscan(name);
+
+	sym_init();
+	menu_init();
+	modules_sym = sym_lookup("MODULES", 0);
+	rootmenu.prompt = menu_add_prop(P_MENU, "Buildroot Configuration", NULL, NULL);
+
+	//zconfdebug = 1;
+	zconfparse();
+	if (zconfnerrs)
+		exit(1);
+	menu_finalize(&rootmenu);
+	for_all_symbols(i, sym) {
+                if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
+                        printf("\n");
+		else
+			sym->flags |= SYMBOL_CHECK_DONE;
+        }
+
+	sym_change_count = 1;
+}
+
+const char *zconf_tokenname(int token)
+{
+	switch (token) {
+	case T_MENU:		return "menu";
+	case T_ENDMENU:		return "endmenu";
+	case T_CHOICE:		return "choice";
+	case T_ENDCHOICE:	return "endchoice";
+	case T_IF:		return "if";
+	case T_ENDIF:		return "endif";
+	}
+	return "<token>";
+}
+
+static bool zconf_endtoken(int token, int starttoken, int endtoken)
+{
+	if (token != endtoken) {
+		zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
+		zconfnerrs++;
+		return false;
+	}
+	if (current_menu->file != current_file) {
+		zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
+		zconfprint("location of the '%s'", zconf_tokenname(starttoken));
+		zconfnerrs++;
+		return false;
+	}
+	return true;
+}
+
+static void zconfprint(const char *err, ...)
+{
+	va_list ap;
+
+	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
+	va_start(ap, err);
+	vfprintf(stderr, err, ap);
+	va_end(ap);
+	fprintf(stderr, "\n");
+}
+
+static void zconferror(const char *err)
+{
+	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
+}
+
+void print_quoted_string(FILE *out, const char *str)
+{
+	const char *p;
+	int len;
+
+	putc('"', out);
+	while ((p = strchr(str, '"'))) {
+		len = p - str;
+		if (len)
+			fprintf(out, "%.*s", len, str);
+		fputs("\\\"", out);
+		str = p + 1;
+	}
+	fputs(str, out);
+	putc('"', out);
+}
+
+void print_symbol(FILE *out, struct menu *menu)
+{
+	struct symbol *sym = menu->sym;
+	struct property *prop;
+
+	if (sym_is_choice(sym))
+		fprintf(out, "choice\n");
+	else
+		fprintf(out, "config %s\n", sym->name);
+	switch (sym->type) {
+	case S_BOOLEAN:
+		fputs("  boolean\n", out);
+		break;
+	case S_TRISTATE:
+		fputs("  tristate\n", out);
+		break;
+	case S_STRING:
+		fputs("  string\n", out);
+		break;
+	case S_INT:
+		fputs("  integer\n", out);
+		break;
+	case S_HEX:
+		fputs("  hex\n", out);
+		break;
+	default:
+		fputs("  ???\n", out);
+		break;
+	}
+	for (prop = sym->prop; prop; prop = prop->next) {
+		if (prop->menu != menu)
+			continue;
+		switch (prop->type) {
+		case P_PROMPT:
+			fputs("  prompt ", out);
+			print_quoted_string(out, prop->text);
+			if (!expr_is_yes(prop->visible.expr)) {
+				fputs(" if ", out);
+				expr_fprint(prop->visible.expr, out);
+			}
+			fputc('\n', out);
+			break;
+		case P_DEFAULT:
+			fputs( "  default ", out);
+			expr_fprint(prop->expr, out);
+			if (!expr_is_yes(prop->visible.expr)) {
+				fputs(" if ", out);
+				expr_fprint(prop->visible.expr, out);
+			}
+			fputc('\n', out);
+			break;
+		case P_CHOICE:
+			fputs("  #choice value\n", out);
+			break;
+		default:
+			fprintf(out, "  unknown prop %d!\n", prop->type);
+			break;
+		}
+	}
+	if (sym->help) {
+		int len = strlen(sym->help);
+		while (sym->help[--len] == '\n')
+			sym->help[len] = 0;
+		fprintf(out, "  help\n%s\n", sym->help);
+	}
+	fputc('\n', out);
+}
+
+void zconfdump(FILE *out)
+{
+	struct property *prop;
+	struct symbol *sym;
+	struct menu *menu;
+
+	menu = rootmenu.list;
+	while (menu) {
+		if ((sym = menu->sym))
+			print_symbol(out, menu);
+		else if ((prop = menu->prompt)) {
+			switch (prop->type) {
+			case P_COMMENT:
+				fputs("\ncomment ", out);
+				print_quoted_string(out, prop->text);
+				fputs("\n", out);
+				break;
+			case P_MENU:
+				fputs("\nmenu ", out);
+				print_quoted_string(out, prop->text);
+				fputs("\n", out);
+				break;
+			default:
+				;
+			}
+			if (!expr_is_yes(prop->visible.expr)) {
+				fputs("  depends ", out);
+				expr_fprint(prop->visible.expr, out);
+				fputc('\n', out);
+			}
+			fputs("\n", out);
+		}
+
+		if (menu->list)
+			menu = menu->list;
+		else if (menu->next)
+			menu = menu->next;
+		else while ((menu = menu->parent)) {
+			if (menu->prompt && menu->prompt->type == P_MENU)
+				fputs("\nendmenu\n", out);
+			if (menu->next) {
+				menu = menu->next;
+				break;
+			}
+		}
+	}
+}
+
+#include "lex.zconf.c"
+#include "confdata.c"
+#include "expr.c"
+#include "symbol.c"
+#include "menu.c"
diff --git a/openwrt/package/dnsmasq/Config.in b/openwrt/package/dnsmasq/Config.in
new file mode 100644
index 0000000000..05e40f34eb
--- /dev/null
+++ b/openwrt/package/dnsmasq/Config.in
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_DNSMASQ
+	bool "dnsmasq"
+	default n
+	help
+	  A lightweight DNS and DHCP server.  It is intended to provide 
+	  coupled DNS and DHCP service to a LAN.
+
+	  http://www.thekelleys.org.uk/dnsmasq/
diff --git a/openwrt/package/dnsmasq/Makefile.in b/openwrt/package/dnsmasq/Makefile.in
new file mode 100644
index 0000000000..36548bd2b1
--- /dev/null
+++ b/openwrt/package/dnsmasq/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_DNSMASQ)),y)
+TARGETS+=dnsmasq
+endif
diff --git a/openwrt/package/dnsmasq/dnsmasq.mk b/openwrt/package/dnsmasq/dnsmasq.mk
new file mode 100644
index 0000000000..b1848c6aa8
--- /dev/null
+++ b/openwrt/package/dnsmasq/dnsmasq.mk
@@ -0,0 +1,50 @@
+#############################################################
+#
+# dnsmasq
+#
+#############################################################
+
+DNSMASQ_SITE=http://thekelleys.org.uk/dnsmasq
+ifeq ($(filter $(TARGETS),dnsmasq1),)
+DNSMASQ_SOURCE=dnsmasq-2.15.tar.gz
+DNSMASQ_DIR=$(BUILD_DIR)/dnsmasq-2.15
+DNSMASQ_VER=dnsmasq2
+else
+DNSMASQ_SOURCE=dnsmasq-1.18.tar.gz
+DNSMASQ_DIR=$(BUILD_DIR)/dnsmasq-1.18
+DNSMASQ_VER=dnsmasq1
+endif
+DNSMASQ_BINARY=dnsmasq
+DNSMASQ_TARGET_BINARY=usr/sbin/dnsmasq
+
+$(DL_DIR)/$(DNSMASQ_SOURCE):
+	$(WGET) -P $(DL_DIR) $(DNSMASQ_SITE)/$(DNSMASQ_SOURCE)
+
+$(DNSMASQ_DIR)/.source: $(DL_DIR)/$(DNSMASQ_SOURCE)
+	zcat $(DL_DIR)/$(DNSMASQ_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	toolchain/patch-kernel.sh $(DNSMASQ_DIR) package/dnsmasq/ \
+		$(DNSMASQ_VER)-\*.patch
+	touch $(DNSMASQ_DIR)/.source
+
+$(DNSMASQ_DIR)/src/$(DNSMASQ_BINARY): $(DNSMASQ_DIR)/.source
+	$(MAKE) CC=$(TARGET_CC) CFLAGS="$(TARGET_CFLAGS)" \
+		BINDIR=/usr/sbin MANDIR=/usr/man -C $(DNSMASQ_DIR)
+
+$(TARGET_DIR)/$(DNSMASQ_TARGET_BINARY): $(DNSMASQ_DIR)/src/$(DNSMASQ_BINARY)
+	$(MAKE) BINDIR=/usr/sbin MANDIR=/usr/man \
+		DESTDIR=$(TARGET_DIR) -C $(DNSMASQ_DIR) install
+	$(STRIP) $(TARGET_DIR)/$(DNSMASQ_TARGET_BINARY)
+	rm -rf $(TARGET_DIR)/usr/man
+
+dnsmasq: uclibc $(TARGET_DIR)/$(DNSMASQ_TARGET_BINARY)
+
+dnsmasq1: uclibc $(TARGET_DIR)/$(DNSMASQ_TARGET_BINARY)
+
+dnsmasq-source: $(DL_DIR)/$(DNSMASQ_SOURCE)
+
+dnsmasq-clean:
+	#$(MAKE) prefix=$(TARGET_DIR)/usr -C $(DNSMASQ_DIR) uninstall
+	-$(MAKE) -C $(DNSMASQ_DIR) clean
+
+dnsmasq-dirclean:
+	rm -rf $(DNSMASQ_DIR)
diff --git a/openwrt/package/dnsmasq/dnsmasq1-100-bugfix.patch b/openwrt/package/dnsmasq/dnsmasq1-100-bugfix.patch
new file mode 100644
index 0000000000..c676a1a398
--- /dev/null
+++ b/openwrt/package/dnsmasq/dnsmasq1-100-bugfix.patch
@@ -0,0 +1,25 @@
+--- dnsmasq-1.18/config.h.dist	2004-03-01 22:25:12.000000000 -0600
++++ dnsmasq-1.18/config.h	2004-03-01 22:26:50.000000000 -0600
+@@ -126,7 +126,9 @@
+ 
+ /* Must preceed __linux__ since uClinux defines __linux__ too. */
+ #if defined(__uClinux__) || defined(__UCLIBC__)
++#ifndef __UCLIBC_HAS_IPV6__
+ #undef HAVE_LINUX_IPV6_PROC
++#endif
+ #define HAVE_GETOPT_LONG
+ #undef HAVE_ARC4RANDOM
+ #define HAVE_RANDOM
+diff -x CVS -urN dnsmasq-1.18/option.c dnsmasq.old/option.c
+--- dnsmasq-1.18/option.c	2003-11-05 08:22:18.000000000 -0600
++++ dnsmasq.old/option.c	2004-01-05 23:40:11.000000000 -0600
+@@ -578,8 +578,8 @@
+ #ifdef HAVE_IPV6
+ 	    else if (tmp->source_addr.sa.sa_family == AF_INET6)
+ 	      tmp->source_addr.in6.sin6_port = htons(*query_port);
+-	  }
+ #endif  
++	  }
+     }
+   
+   if (*if_addrs)
diff --git a/openwrt/package/dnsmasq/dnsmasq2-100-config.patch b/openwrt/package/dnsmasq/dnsmasq2-100-config.patch
new file mode 100644
index 0000000000..270c22740e
--- /dev/null
+++ b/openwrt/package/dnsmasq/dnsmasq2-100-config.patch
@@ -0,0 +1,49 @@
+diff -ur dnsmasq-2.15.orig/src/config.h dnsmasq-2.15/src/config.h
+--- dnsmasq-2.15.orig/src/config.h	2004-10-08 11:41:34.757371880 -0400
++++ dnsmasq-2.15/src/config.h	2004-10-08 11:43:49.074952504 -0400
+@@ -78,6 +78,11 @@
+ /* We assume that systems which don't have IPv6
+    headers don't have ntop and pton either */
+ 
++#if defined(__UCLIBC__) && !defined(__UCLIBC_HAS_IPV6__)
++#  undef NO_IPV6
++#  define NO_IPV6
++#endif
++
+ #if defined(INET6_ADDRSTRLEN) && defined(IPV6_V6ONLY) && !defined(NO_IPV6)
+ #  define HAVE_IPV6
+ #  define ADDRSTRLEN INET6_ADDRSTRLEN
+@@ -194,7 +199,7 @@
+ /* platform dependent options. */
+ 
+ /* Must preceed __linux__ since uClinux defines __linux__ too. */
+-#if defined(__uClinux__) || defined(__UCLIBC__)
++#if defined(__uClinux__)
+ #undef HAVE_LINUX_IPV6_PROC
+ #define HAVE_GETOPT_LONG
+ #undef HAVE_ARC4RANDOM
+@@ -208,6 +213,24 @@
+ #  define NO_FORK
+ #endif
+ 
++#elif defined(__linux__) && defined(__UCLIBC__)
++#  define HAVE_LINUX_IPV6_PROC
++#  if defined(__UCLIBC_HAS_GNU_GETOPT__) || \
++   ((__UCLIBC_MAJOR__==0) && (__UCLIBC_MINOR__==9) && (__UCLIBC_SUBLEVEL__<21))
++#    define HAVE_GETOPT_LONG
++#  else
++#    undef HAVE_GETOPT_LONG
++#  endif
++#undef HAVE_ARC4RANDOM
++#define HAVE_RANDOM
++#define HAVE_DEV_URANDOM
++#define HAVE_DEV_RANDOM
++#undef HAVE_SOCKADDR_SA_LEN
++#undef HAVE_PSELECT
++#if !defined(__ARCH_HAS_MMU__)
++#  define NO_FORK
++#endif
++
+ /* libc5 - must precede __linux__ too */
+ /* Note to build a libc5 binary on a modern Debian system:
+    install the packages altgcc libc5 and libc5-altdev 
diff --git a/openwrt/package/dropbear_sshd/Config.in b/openwrt/package/dropbear_sshd/Config.in
new file mode 100644
index 0000000000..07c5218840
--- /dev/null
+++ b/openwrt/package/dropbear_sshd/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_DROPBEAR_SSHD
+	bool "dropbear_sshd"
+	default n
+	help
+	  A small SSH 2 server designed for small memory environments.
+
+	  http://matt.ucc.asn.au/dropbear/
diff --git a/openwrt/package/dropbear_sshd/Makefile.in b/openwrt/package/dropbear_sshd/Makefile.in
new file mode 100644
index 0000000000..87247fcee5
--- /dev/null
+++ b/openwrt/package/dropbear_sshd/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_DROPBEAR_SSHD)),y)
+TARGETS+=dropbear_sshd
+endif
diff --git a/openwrt/package/dropbear_sshd/dropbear-init.patch b/openwrt/package/dropbear_sshd/dropbear-init.patch
new file mode 100644
index 0000000000..d6bf1740a0
--- /dev/null
+++ b/openwrt/package/dropbear_sshd/dropbear-init.patch
@@ -0,0 +1,59 @@
+--- dropbear-0.42/S50dropbear
++++ dropbear-0.42/S50dropbear
+@@ -0,0 +1,56 @@
++#!/bin/sh
++#
++# Starts dropbear sshd.
++#
++
++# Make sure the dropbearkey progam exists
++[ -f /usr/bin/dropbearkey ] || exit 0
++
++# Check for the Dropbear RSA key
++if [ ! -f /etc/dropbear/dropbear_rsa_host_key ] ; then
++	echo Generating RSA Key...
++	mkdir -p /etc/dropbear
++	/usr/bin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
++fi
++
++# Check for the Dropbear DSS key
++if [ ! -f /etc/dropbear/dropbear_dss_host_key ] ; then
++	echo Generating DSS Key...
++	mkdir -p /etc/dropbear
++	/usr/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
++fi
++
++umask 077
++
++start() {
++ 	echo -n "Starting dropbear sshd: "
++	start-stop-daemon --start --quiet --pidfile /var/run/dropbear.pid --exec /usr/sbin/dropbear
++	echo "OK"
++}
++stop() {
++	echo -n "Stopping sshd: "
++	start-stop-daemon --stop --quiet --pidfile /var/run/dropbear.pid
++	echo "OK"
++}
++restart() {
++	stop
++	start
++}
++
++case "$1" in
++  start)
++  	start
++	;;
++  stop)
++  	stop
++	;;
++  restart|reload)
++  	restart
++	;;
++  *)
++	echo $"Usage: $0 {start|stop|restart}"
++	exit 1
++esac
++
++exit $?
++
diff --git a/openwrt/package/dropbear_sshd/dropbear_sshd.mk b/openwrt/package/dropbear_sshd/dropbear_sshd.mk
new file mode 100644
index 0000000000..26c9b17830
--- /dev/null
+++ b/openwrt/package/dropbear_sshd/dropbear_sshd.mk
@@ -0,0 +1,79 @@
+#############################################################
+#
+# dropbear_sshd
+#
+#############################################################
+DROPBEAR_SSHD_SOURCE:=dropbear-0.44.tar.bz2
+DROPBEAR_SSHD_SITE:=http://matt.ucc.asn.au/dropbear/releases/
+DROPBEAR_SSHD_DIR:=$(BUILD_DIR)/dropbear-0.44
+DROPBEAR_SSHD_CAT:=bzcat
+DROPBEAR_SSHD_BINARY:=dropbearmulti
+DROPBEAR_SSHD_TARGET_BINARY:=usr/sbin/dropbear
+
+
+$(DL_DIR)/$(DROPBEAR_SSHD_SOURCE):
+	 $(WGET) -P $(DL_DIR) $(DROPBEAR_SSHD_SITE)/$(DROPBEAR_SSHD_SOURCE)
+
+dropbear_sshd-source: $(DL_DIR)/$(DROPBEAR_SSHD_SOURCE)
+
+$(DROPBEAR_SSHD_DIR)/.unpacked: $(DL_DIR)/$(DROPBEAR_SSHD_SOURCE)
+	$(DROPBEAR_SSHD_CAT) $(DL_DIR)/$(DROPBEAR_SSHD_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	toolchain/patch-kernel.sh $(DROPBEAR_SSHD_DIR) package/dropbear_sshd/ dropbear-\*.patch
+	$(SED) 's,^/\* #define DROPBEAR_MULTI.*,#define DROPBEAR_MULTI,g' $(DROPBEAR_SSHD_DIR)/options.h
+	touch $(DROPBEAR_SSHD_DIR)/.unpacked
+
+$(DROPBEAR_SSHD_DIR)/.configured: $(DROPBEAR_SSHD_DIR)/.unpacked
+	(cd $(DROPBEAR_SSHD_DIR); rm -rf config.cache; \
+		autoconf; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--libexecdir=/usr/lib \
+		--sysconfdir=/etc \
+		--datadir=/usr/share \
+		--localstatedir=/var \
+		--mandir=/usr/man \
+		--infodir=/usr/info \
+		$(DISABLE_NLS) \
+		--with-shared \
+	);
+	touch  $(DROPBEAR_SSHD_DIR)/.configured
+
+$(DROPBEAR_SSHD_DIR)/$(DROPBEAR_SSHD_BINARY): $(DROPBEAR_SSHD_DIR)/.configured
+	$(MAKE) $(TARGET_CONFIGURE_OPTS) LD=$(TARGET_CC) \
+		PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" \
+		MULTI=1 SCPPROGRESS=1 -C $(DROPBEAR_SSHD_DIR)
+
+$(TARGET_DIR)/$(DROPBEAR_SSHD_TARGET_BINARY): $(DROPBEAR_SSHD_DIR)/$(DROPBEAR_SSHD_BINARY)
+	#$(MAKE) DESTDIR=$(TARGET_DIR) $(TARGET_CONFIGURE_OPTS) \
+	#	LD=$(TARGET_CC) -C $(DROPBEAR_SSHD_DIR) install
+	#rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
+	#	$(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
+	install -d -m 755 $(TARGET_DIR)/usr/sbin
+	install -d -m 755 $(TARGET_DIR)/usr/bin
+	install -m 755 $(DROPBEAR_SSHD_DIR)/$(DROPBEAR_SSHD_BINARY) \
+		$(TARGET_DIR)/$(DROPBEAR_SSHD_TARGET_BINARY)
+	ln -sf ../sbin/dropbear $(TARGET_DIR)/usr/bin/scp
+	ln -sf ../sbin/dropbear $(TARGET_DIR)/usr/bin/ssh
+	ln -sf ../sbin/dropbear $(TARGET_DIR)/usr/bin/dropbearkey
+	ln -sf ../sbin/dropbear $(TARGET_DIR)/usr/bin/dropbearconvert
+	cp $(DROPBEAR_SSHD_DIR)/S50dropbear $(TARGET_DIR)/etc/init.d/
+	chmod a+x $(TARGET_DIR)/etc/init.d/S50dropbear
+
+dropbear_sshd: uclibc zlib $(TARGET_DIR)/$(DROPBEAR_SSHD_TARGET_BINARY)
+
+dropbear_sshd-clean:
+	$(MAKE) DESTDIR=$(TARGET_DIR) $(TARGET_CONFIGURE_OPTS) \
+		LD=$(TARGET_CC) -C $(DROPBEAR_SSHD_DIR) uninstall
+	-$(MAKE) -C $(DROPBEAR_SSHD_DIR) clean
+
+dropbear_sshd-dirclean:
+	rm -rf $(DROPBEAR_SSHD_DIR)
+
diff --git a/openwrt/package/iptables/Config.in b/openwrt/package/iptables/Config.in
new file mode 100644
index 0000000000..f1e5ef631d
--- /dev/null
+++ b/openwrt/package/iptables/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_IPTABLES
+	bool "iptables"
+	default n
+	help
+	  Linux kernel (2.4+) firewall, NAT, and packet mangling tools.
+
+	  http://www.iptables.org/
diff --git a/openwrt/package/iptables/Makefile.in b/openwrt/package/iptables/Makefile.in
new file mode 100644
index 0000000000..5be894b9a6
--- /dev/null
+++ b/openwrt/package/iptables/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_IPTABLES)),y)
+TARGETS+=iptables
+endif
diff --git a/openwrt/package/iptables/iptables.mk b/openwrt/package/iptables/iptables.mk
new file mode 100644
index 0000000000..f053f1e33d
--- /dev/null
+++ b/openwrt/package/iptables/iptables.mk
@@ -0,0 +1,51 @@
+#############################################################
+#
+# iptables
+#
+#############################################################
+IPTABLES_VER:=1.2.11
+IPTABLES_SOURCE_URL:=http://www.netfilter.org/files
+IPTABLES_SOURCE:=iptables-$(IPTABLES_VER).tar.bz2
+IPTABLES_BUILD_DIR:=$(BUILD_DIR)/iptables-$(IPTABLES_VER)
+
+$(DL_DIR)/$(IPTABLES_SOURCE):
+	 $(WGET) -P $(DL_DIR) $(IPTABLES_SOURCE_URL)/$(IPTABLES_SOURCE) 
+
+$(IPTABLES_BUILD_DIR)/.unpacked: $(DL_DIR)/$(IPTABLES_SOURCE)
+	bzcat $(DL_DIR)/$(IPTABLES_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(IPTABLES_BUILD_DIR)/.unpacked
+
+$(IPTABLES_BUILD_DIR)/.configured: $(IPTABLES_BUILD_DIR)/.unpacked
+	# Allow patches.  Needed for openwrt for instance.
+	toolchain/patch-kernel.sh $(IPTABLES_BUILD_DIR) package/iptables/ iptables-\*.patch
+	#
+	$(SED) "s;\[ -f /usr/include/netinet/ip6.h \];grep -q '__UCLIBC_HAS_IPV6__ 1' \
+		$(BUILD_DIR)/uClibc/include/bits/uClibc_config.h;" $(IPTABLES_BUILD_DIR)/Makefile
+	touch  $(IPTABLES_BUILD_DIR)/.configured
+
+$(IPTABLES_BUILD_DIR)/iptables: $(IPTABLES_BUILD_DIR)/.configured
+	$(TARGET_CONFIGURE_OPTS) \
+	$(MAKE) -C $(IPTABLES_BUILD_DIR) \
+		KERNEL_DIR=$(LINUX_DIR) PREFIX=/usr \
+		CC=$(TARGET_CC) COPT_FLAGS="$(TARGET_CFLAGS)"
+
+$(TARGET_DIR)/usr/sbin/iptables: $(IPTABLES_BUILD_DIR)/iptables
+	$(TARGET_CONFIGURE_OPTS) \
+	$(MAKE) -C $(IPTABLES_BUILD_DIR) \
+		KERNEL_DIR=$(LINUX_DIR) PREFIX=/usr \
+		CC=$(TARGET_CC) COPT_FLAGS="$(TARGET_CFLAGS)" \
+		DESTDIR=$(TARGET_DIR) install
+	$(STRIP) $(TARGET_DIR)/usr/sbin/iptables*
+	$(STRIP) $(TARGET_DIR)/usr/lib/iptables/*.so
+	rm -rf $(TARGET_DIR)/usr/man
+
+iptables: kernel-headers $(TARGET_DIR)/usr/sbin/iptables
+
+iptables-source: $(DL_DIR)/$(IPTABLES_SOURCE)
+
+iptables-clean:
+	$(MAKE) DESTDIR=$(TARGET_DIR) CC=$(TARGET_CC) -C $(IPTABLES_BUILD_DIR) uninstall
+	-$(MAKE) -C $(IPTABLES_BUILD_DIR) clean
+
+iptables-dirclean:
+	rm -rf $(IPTABLES_BUILD_DIR)
diff --git a/openwrt/package/linux/Config.in b/openwrt/package/linux/Config.in
new file mode 100644
index 0000000000..4588e48efb
--- /dev/null
+++ b/openwrt/package/linux/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_LINUX
+	bool "linux"
+	default n
+	help
+	  The Linux kernel.
+
+	  http://www.kernel.org/
diff --git a/openwrt/package/linux/Makefile.in b/openwrt/package/linux/Makefile.in
new file mode 100644
index 0000000000..3b62d24c1d
--- /dev/null
+++ b/openwrt/package/linux/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_LINUX)),y)
+TARGETS+=linux
+endif
diff --git a/openwrt/package/linux/kernel-patches/001-linux-2.4.patch.bz2 b/openwrt/package/linux/kernel-patches/001-linux-2.4.patch.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..3e68dba7a3ead1614f99f4e8ca9d731acae24c44
GIT binary patch
literal 428187
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%0A|Lxf+Lk?sA<g3gRtpMnr!ceyjffCq(VR
zkJ&LNb<ecSQ6GPGCH;{XR|xg_&2630U$h4U_CV}iVAbG1&wvxSRaN85JbAa>QTzF8
zW`eZ_f5KzM1q#~ekCvH!kErN56I!ft-p*h1wF(28?FDm&QQZX2{)_CPOX@6m;@C91
zJL;|{2~h*;vvF$y#4<)43nm6;24)6qOp_K%AoXWA%T=VG5tqW3IcbC1$5ZvID6nQB
z7hdg4-H)jMb@)_SMJM<6aXk3HZ!|R({&0H1#0oq#E<yL0v%!%eOQA)b+g1Yy-Ll&;
zgs<odz9uuROz--AX5rmTCWKLdWF$B8VV#SIXIv7|e_BZ>ZgUKxsDn~aWT>H8FY5Dv
zd3{_D9P*Q+1KD^!g#CFQ1RPADFw^l2jXX>R{8}3L0QmnCQXe-+luo1yFRB~xxbT88
z0T@;QMM0CXB5pTp*SFI*wa%tN=uJHEu?fBkt`;(C=n3(8kMGX|bcaCcx!AzTnZsKO
z^C6+$-L$oMGgNwV(}RYB0e~SSi6Wb39guTnOXp;4mOU+E8u{$^@eIv;=RpcY-^#K`
z7tA{rr2ujumP<eHVZE1bj<s|C-5=)qZXfu`qE?`r1dZX82NA<+zs_qq1^xR~XYn>D
zDu;*(ul!(h@hI~+n}+VJk`h8Nj3d74exi;c4tj(N0zg1$BnLzo%1Hyb>ur}M+pZn9
zQk^pHmTvA@u9+^gbG0?nBc;n<4m$-A>W9$BzWDx{WLfg7LB`9Duj6msPA=fkeS)|1
zxXe_H6#X}?ijTQ=_Dibn@mS)%tiuqf`jeY@$;f!6%o`6s&<1NH`$8ZW0vqyU2ZxQ<
zB35OvNQ34OzpC|At>gsA6hx3s5U8tR*Vc|6)VS@yaqkm{s)B>*?7j8Ze^G=GQ5dL<
zXp&_TOrikw=dY*b?ecF|tEi0|;!s8CdZP{lKiARr>O=HV8_2=rR|=FjN{im<lEl@Y
z3m)uFZweN~y{xeDi{b>DUE-=OO!Dt^>0>!k5+uo8I+W_l7GxY*sDTC|lgvcnNRd?S
zhcQx<i6YR>uJ(-O%q&xlY`$WlodvOpl$``C+M$FjqH^@_SWjxut!v+&=MM*;FpYA)
zPZHT%Pc-RPtVUp?8F*Bs;I*M*aTZsXPSY8j+1gfaO{)(ujM>Lnhr&?rXM4Mf6FME=
zFFBN+?$eZ$l@AdvRF{VgJZ4)cV=EbOlwCC^apXg$tW;T9^Eao%l`dJ`TEnQ$aTc|q
z3Xt^jv6rkpW#mMsBBC9~Q0|OG5oIb&N}=<JDOufCC8WxGC#yLZcP2|n4)1qP`#gDb
zzF!RUbCBE1oSn4gm0NCRRo%e`6B${Y3j~gfS?M&;?DX=XQ<;VDSF3qK`E{}*<eogb
z#~ZI*-Z=($NmDq1#dpHMss|{Xxm5Ltauyr}@~<NbE2ihZE*dKMzcaMYQOtAf$-iH0
z=L!ni-tq2`#X^GHi$~rZrZ0Z$Et9Hb8-aZf9!BJm2f$Y3Ffq*bpdzT~gnfmAkaY{R
zarY<lPPFv0PnDEKQ1AKww|;wmt$qJ#5&ZuvfX2j8Vk%@69x6LS8P-4$Qu+E-23@28
z!44X7Ki&yQwGf~*ZkfFPXD{sG0|~o<*U0kcZN;^1`3ik5$qMwCbdQH5G5fB8e5%W%
zmcZ6_1Ri<FSPyR`b@Uogsw#>oqN1pxiYb<Rc$0A~IwL$hm{hwyt$x#a!zR{!9*&2d
z{ukIDe?#)%qx}EIzj5LMuc!rIY5ye;{lFD#PwP*wD2e@SRT&WiMLQ26n8_HzLzo5-
z6?Kbo7Q!MPlR(jjTKIP!@>qLoyV?1E`uH5UO%f3#MnFHsl@;Z=ic=b-*o$A~?xHq-
zYwY%K_VoKxt#+qR$npp?ej0$Q;q1biYN|;jkyVa=HQIvX{7?4`!4iMw1^x%PJ+*vK
z$Ij&BYyFSFr7`*Yl6I;eNw`3aB>DaU`DTkx?f=%i+G*y%HMic^(Y`tk`#m*Md2?Fa
zi~Zx1oTK34Qt5|Hc^qb3@j0uh<qsVfxp<AG@OVw13(?~R8Oo<yC<RGhK0jgme25y(
z7}5D$pd|l4=hp4On&&<zC;qesKlLi|*?sTW|J3ySG0WkdCNskX|Dag{<XAunZrcYL
z54&i0n!VI>PP*dm>8qMbGeXC>!TcPg<06pUyh(XsMqXMbBz1vF76So(m@OY#P=Fj_
zzwwXwL`MQhcEX3asz?xsl49lmyT8<bL?81A{zx5vzxDqyK(I7X(Lc3nzt5lsf=z%-
zD}T*L1&AJS<Jb!!BqWR71*o+vn9{6SwI<oVp4(R~M6mI0QE4K(x+yf)rmq)flCK+b
zH7o%wugx{9)RS(O^xulU-EC&btro1J03Y%6XZ;_!_Mf-t{~-JMe$hE0?2B;sBosQ4
zgaU}4+8wzqmbYtA0{}$)V41i5WfoWjF4ELO%>OBiLl4scHZ3Va9G}=0c+{Mq;4J_~
zA^^?Ng<U*>1KX#OiU6_)3k1;b0l+~BBzv-zcG~{*x|iT;_Ggvb3R!PyCd5Eu>ubfT
z<fVDYLK0FTtWbXM?9lKGBa=#fMhZs48*k_L*Pk?kW|B9m)f!UMQ4{=$2!p&r;Q)aJ
zk9z<Mif|z75i&(0Kw5xqRVEmPV5I@!1!#&outyuxqj4PqE6Of}MNBXdAVhT~kWg}v
z0EUS|p{3%B)<P}B1l547fU$|AZ6G6p03b-BAs`NfQK%u9CBzH_Rbdnpu!3NVnK3|7
z1dUJ{7fK1F1aiPkISLSQ1OafsM2rL|AP?K1LVyscDvXftp~cli04gGh;Sdr3Yry1K
zs^~-lDH1B75^3fjU4)-)!o&{?DfPs9og@?1{YEi4`RKR)r)TpfT!LZObzpOZU|`L{
zd|5j$4=dIPbB}GT&SJo#9$o<Yn6^d!FaWYQJu@z1OkPnxhp)@~aWm7IZMViQa9I<n
zjKRoDH@|v*gZRLRJB>$P+SDaec$7U?!;aGXA&>It*6k`~So%am(QmR9sUvceRd9=C
zxH##8A&z^<{{LB7Wa&A?F+>9QQN||sp>Oi88m7|heuRgI=i6S-vz-=_m=lP4KK$b-
zoFNmKYFl_0AYk-<9q4Fj3N)JEq*G8((>g%^5GI~{)A3g9CeouIMJt`ZyX5+_SGot=
zw4%jI5y_l^^Dz=(6Y8@h6?k$|ijCr^i6LPNfY}4`+vGj}116uU2LK}m98^kxWfe>x
zj5{&@0ft9?@%_bm`12Dp+U)7EWSmc&<9}wE*rEot77+?mkgK0(%{8@Zy|(Bb!~I+8
zIqW6O!W{jbEI+}3f!M+_f~kcc8Db$1uZtx~ENRxbbI;P>W$LR7`lom%ArN{&!-vhF
zd1Twpmqu#K6-$(n`jj2@?ddm7J33Lm96?XK?yNsQ2jlYxQ@QyM3wAb%xHa-gni*kL
zkGJmoxQF$*I0A0$5TueJY(e>nwzY;9XjiYsx~O;*BMc(RT$ie0NRZbQGkYKqi9IXW
zzig#)eO(T?Oo#vENr9%UYw{|om?blO`N+7pzOX{DQi`b)8FRZ>vnJaZ5O65swF^N6
zxf6wsaHy!LAr9?%O){{atn3V)C=woS&KJbM%5eScpVUyO5Qr%nN|qTQ)Hx7P!Gya`
zT>8v;w$)}<SFKT0Mnw>X0f_ez4`Pv2gAheNo2mCekrf2u3JKkMYX5{R3TSXW4yh{n
zHcFW8hEFlHUXUON>=6@14tJlN<9M(eW)zljr>vDJS+W?zUJp4V0vU=I1q11UYl^}h
zB;=|ALI9k-BKk%23+fhvJi*Kug((AR&C~01w1%j4GdafEd?%Il;Mf1fB$BsX7}QD?
z!F2r*``{b&J%ps0SfYcO@k@7%fOGp8VN)RlP(-S9{@q@`*0oE*wGdFb+ntW`2KW4V
zyZsO8Rro-x5#rE))1fhSzPR>Og-5l;RM|ihk$qBw$PqmekMS&*s*jH*Y&}l@eqjFq
z{ZN1RAC<}~D6wIFCCS@$KPZMmhxSSsDil>ge8HsA{>#Ae^p4m~VHiCRMGiIwnoxc}
zc1G|yTNILjQZ55mf$~xag`)5xnkV`n#O4p7LI>}!_ZCz&di1jgsPbmh8ZhZ)TkP-t
z9$%Q#Mlq4h@VC?L3i#dO`Mt*_^-loaVriOBTTz~5eS|OW^%9J8z;q7BNTPYXxo~6a
z$;zM9oiZHQD4xaKCZ<R&>WOpfo&5GZpktK=W8m(WT>>ctdePxM;mRDozK>4u;j^}-
zJjl*W&4XP2qS%H!eqCtRjxDH5kGK@Rr>D(Gs5z9mYNf4qYN&P0vXrQ<ly(VJ8E-7g
zQZhJmN}7ehQyic;wx-!QJX7q4TnbL7Lrq>4Z%amaZP}yw72uRTs@rj0;>FpJoJJ;o
zYl{AUU!46G&v>k@|2@44Ch(#k;sb>|Ecxw#ph=kUtQ|JDV)MgQY#Bxbi_No}D39N7
z;M|B!TNYNNcq*!;3c`mapX>bmt~|f({5`Mq61t7Ymh?Xu4$}0!n6yFLs}w2vwiH*_
z?3lVq{`ULNA{Xs{Yx*u8l!|V-oXS42^5QIonzeP$pR}mLu!$(ahrX@Lk7`2PGxLv$
zYx++!&)RQ%oFkdd$Dw<Y3&{BX<~RHM%J|9ZI)3@@t?5tM&aJ;9`^~BqmQ|PcBkNl3
zZ=4Xad*gjxZm$c`V(#;ccIEB-HFD%{dM;z$iP%L1LdSUvyoLPQ%Mu87T^*e;_`P~&
zj!koHf2Q0d`B__br}M6!*2W*@tShX2ll0~5=1Jwv$Wb4+ZKCqH<wTU*d#ZRdC`PhQ
zg>UPUHGAW0$?~YOh#c{qut`?1D709{!C*NearmdhU-IGox;XP)Rpq=#G27^;(9~zQ
zpLGkrirLW%POY7v;Q7?IYu~!<YL>!_NATn(#Bw}RXt_D0S^?9e`l?~aJz>G(uF#qz
zB19CKRR|17eBVhSpvc3s9)upn-p`G6%H@@cUj!(NA>f_9QiPNc_Bf>r$BbU6x1Q%1
z!~#0M?V=GfR6y`8p!Awr6}Hzh;3;_>E^QvBtm?VS^j9oQnY{4AhN}uGm|ZJ1Tok5v
z`sy&=JTq`jN=wBaCNI)RRH~}Ey%?#NhPTxkh7_=S@I);&8fI>^BNYcvS|Z*?NjU2F
z%9Y7gZ7+kf%qv4k1#ZNr2cnkXZ$y{SPvQvlQN3#*Mm~6B?D?Sl4vvs#-IA$bD=^La
zUy_mvwA6niRRn4o3JR}V*tcHGoIl4G%bZ_r4uvoXQfHP0`V)}1_)_===dM;#;Z@=~
zrqL|nYzPyokZsornRLfO*){kMa>gx)4he>n&n4c+-4$@TCy3df3TZ4~^7Z!9ebMQK
z&k@#x4#Xa8tmm$fxP2W5u0H?3c74vDCa$$tnjW?)6w=Li=nfodBLKqO(!#POFiq^`
zsp5OiBowNpAgi%C>ZHO7b2d6WtZYf;GPf@ZTDPMzt!Wx}(U-h^J0l*)?lq+-UKwpq
zfZEAntuYqEWKyHcomo5W*KZN;>1`%_Ov_|=iM1j=osi;l3msgJvGj4MqLD{gYwAhg
zIV43CSc-y+E3YE*MWyLO#sael&8(8Fi#U%|x|q<ayAx1qHJ8B(mSw5KT0t$$xx|HM
zml(AwE8;G#`GgB$Nl>EgY_DXJnW?RI3ZyC`ZBpS-*csl2&>jhzXwgdK{n(Q%xLKEp
zO;r~?uw;p<PJO1b;Z;jaQ&JfUAH>YzeL3Ry@#~pV_$k!U<~w#*5^oo3jv|Y)nMj?{
zSDFqHRDp3%wv2VtzD#SWQ53DcmDRllpmVH#_e8A$^@87G-)|DQ`OA?AUHA5IwIPg=
z5SqLN1qC^U;zqqAix)nUW29p<@E7VU^;pjG<s#@E4|P%X_&v&fC_(hOPe$WX#t2Dy
z=3$6NncdJcttOVputh6DED2%*hUUeJFkx^!29tzaay2m50{u9AjKd#RT(0)t8CLd~
zsmkmw1X&Q+xnSaPTLN_6WzaEn9M5mG?SZN$I2$%Iuv8#trlGqr#7KnP19DqtsACcC
zEPEQ*t~9Eu+EhH&1-q&um9naZYF>61To5kWSUap&_y88o<>qd(65g_;$%7OmQ)!5%
zYKo=uw2ngRhG7b3HB-E~F(Gnf^krYl(UWTS763A=L;k*MR`KaXW=sK?n1k&PB!D_t
z6oQgKAJ3?VKAwpHbgZC&2TJF!(kP$@OGvvPto@%RYQKdus1q;s;Z>ekMb|f`sC9}(
zQQUGJ>buiVl7ezWK9z}3_wawGfADlK=l=KfszFJ7em9D8MOHu87%u4wU`<8lo?ViZ
zUY+X>>I@3$Vb%W|VzEz^l*A<uoW4~?Vil;BQqY7uvyXzxaEm*bSeLRfM?Cp?WKON}
zr5of^$%c<yv&oXXUMA`Bdd13>NhelULQb9)pp4?IlSxC_OaUmAJ+eb$uAU+t(-*_w
zbnS#%?prP<$q>pM#q&6NhF7T09)(vfOHycchlrP?!lxNcS<_OccXY7>;}2DMQ0WvQ
z%nEEn%#(M51(f%jV-_%oPOOWp;?PzdO<JlVW@S7$Ax%Y+R(fRw#t{N*p_9GLIX5VQ
zCe7Tz4g|a54AhyeXQZt79wD;vj8r1Y)TU!8AtzWs>FoK3vblMgu$iYN?<MZ>hY6Qs
zIjhN(5iU})Rd{BjDa_%@EKStX0x*fR!pgESdq6^A(H3$k!6wdLQH#S=+baYZyWbO=
zHf356C5e2_Gn<S+ljx#D-vN5Vtw6m%_yDK)p{wu!5I$cI%Q9c~{>2}_PwFD1l@1)o
zuc!0@k7PtX0DJ(tfmS|8Ga9}nYt}z4Y!p_Bc?D<xW-a_M{$D?4Dg~1jP)Zd{SX_Zj
zD2P!6rm8Vs_w+9(P>-oW#mLs8iOc{gQhLlxr|Q^--Brkh*$$H+iGQn&Df=GIiE@lb
zb7I+A6pIucXge%M5-Jc>A|=R-%2^f&8w2k#hEXvU3YLFe>1e1>dAy3VGdyr;uGKWR
zz=j8v1E_cP?diL%@-3m}D71HPX1@*@95Qj)uI%?-bDeEpoaLAbxetsZdwR3r1@&_8
zw~qr(R|<I4jOA{m<^kd00U!jGMNw2$6;F?=+xUa{?Y=F1euuZy*S5-_Wb`N~*;ylt
z0R$4TTKm46EI+JEPv%@b<%A(*Axp{sSukqd;5&cAuD!qN>HpU4J+V}mPOk#$SYowR
z3U#swX)(SZXH#~<jaDmer49%L76qk*NX9zd7Xp$rEsK{z#R^f=J-5P-Jjx3O!B7N*
z0XB-SxIKq|J&ccmjTjtze2vE9#YRXx2jB|#hJQuE#19V&HhzN;w*tN~ASkLi{=IzP
z@%a2d3OgN0oBOxei2o{vfS_Wjzx3CM;CMPx0+D|`;G7&DTP)34<s*hE;4q0wmnt8z
zNkNy+6~?TbCH_Zc1B?~k0SN+me10d59k`>^d~pTu0q``_xgY8LJ3ECc3KF?A)3@lG
z*2XL7W@g}uIaJIpA5<Hw$m%Fs2`@iXKP*E_krC>K<f;oIVWd4LF>wkYp*>RiP&h=L
z^EQ}lpr$U5{yGwxOt0=gpZ)()NB8*Fhpu^Iazzhu$AWeXY2mx>JieZt-^;?|e)Dnp
z(j_RUsy>i1IstpeZn6Q2?y?9uPg5OgjD%1hy+?&9O9AlOjo!{Tzx0lq3Vps*1k(!q
z3HD*^``H;MLu7_>Ap2l`h<PfEewMo~zbXA+CsOWa3^Em{76U`jC5PGu>+%N<*dU^(
zVu~+1Go6dWo&BGSbSV4_I={gOq8chHh>NZmrN<qu5on~^L-U(+h<xNWx*g!}S6)9C
z&-@oCMgYPL7!ZS>dL<eO6Ou!TjRg>4R34+<y4pLjKd}zfi!G{v-OeKL)F_<}PS0xu
zu9>@YaCu9tWX$Xj>Gp^CTvtcFgf>^dktHw)_b0HDU;u&q`i_U$ZxGb+K&z_0;4UJD
z02ZSs$rTdSA2vksJlg)!ZwIfh4y3y9I5c}?2q$R=fnYTe)rM?u+W`T{Sm7ul_i6`&
zsF!qrK`s;m+`fsE#`DMJua(6=!xamG5xLqMUbn)D+J{Fvle1Ux0ScJnK-emJ&6GJP
zOVGI=+^qcLR5iR|dWZS@x;+>rA@?dblXILhgK)IqIAt>Y!<#puHC}d>UsX6WLr&dv
z`$!ewRYBPbV)jLzsM2OHUbl;CY+s%-CyB1yv6#CTS{Zc4$5WslUB8VLp$G7Oh*i#Z
zYwpv5`Myxf8+7@URM6l;5Qa=ck)<Jl|2YB>fezys71LBLozj@}6a7EqCc$HaC6L{g
zGOVJFvG}|U?}4a1C+5FYIxhYC`K;L$l32Yoe*f#s^_6j$p}M81e~9XFOs7jTGd0B=
zJP+wE5zHhpc>lns4oE^6+GM;#&6@M1<1UZbC4FZ}YOGhMA)RIF+&TNIrnRhd2_YyX
zW6R9d&S&AkFl5VYPGxAOKuC=u5T>1-zxHb$X3jgLGFL-)4roI_{t=K#H(v27LZqI2
zub0EiQT?A*&7u@Wmox=Qa45Lkznl(WR;PG;nr#>6(~0$SN^kPgs=?GPDvMCffq>)I
zi1RZ*h{G8@0-6CGcq_$56-7oF7+Y8RB{{%<tI{6{`e`rw_WxbJ^5(W0o&Psl1H}+i
z(ZLSXF1Vys6zY=h&<i*Wm1u6Nm;(562VJ_IzWTK#!BwJF<?^*^f~tmDmw%RjUgO{R
zwjsbO9XWwS0vaVWaLhNbW4zEstQY~`zx968!F7C38+V^p;5$VKL;8KD#wN0k_3=Nz
zrT*(=eT}#rMG)A4l&Y&i!Rx`fc88JIFMGeU-twhA79sz%<)58rB+?U?rM?qG`P8T2
zoe9*)&R*3|<L!Js-NGdQ?&_1<O_V2_q&4$pMAa*+t~kOjz++p+Aj~V-0BwfBT$g!D
z!0M7@u}YfkZE;KBn#v4d{yY(*!XC(Iz5vpd%Di}x;#4QVL|f})xb8Tbqz_kTw#i&H
zFzR8r2Lo<$myz8-4*Pmp58fccg)|RqLZk15EE%E?+jfaW-F&bQl7KZTs-i{%Zd(i`
zkBY#hR&{13FWe;(E!Y;AI~7OqL3CIf{`$YJvLc+3DKS)WK&YUwkGQ$}w(;_-n?kZP
zg@^7ktBd#%Ne2Nb7(s$3(__jjB1oeMNQ8)TIcw$Jy~f@f4lv>oBK9RFH>m+tPy8>h
zvThkz6cP$lcY(Z9ws*^;&|&R^Eeyu1oh8V{`;W)j;%~=2Uhv;;ui|=MOPb6AK5tAh
zyK{Eu^)b*A_%8g5j;`^+P@w@E>;k%BSu>l&IkM{S`Zl*3G~97H+v8iTcx5a1b88<=
zwSM1e+^F?}hm~o*T(C{3eW&P6#jrLv36&LjT2!{$(1ptUF{xEVglWoy!z5gy5hAcP
z<A`E#I&S(I{(tBb{zX{kK{GkVjs*~a$taLfs9EVl*BlBK0ak-$KQH0o`7nM!QXzZ$
zi0gllK%{zDDKU603V=yOBL<P!9HHt6ip-H#22^BK!soh%Oa~7KYs>~KQdlvQjoVz4
z^21Ir5e2e{IH89D-gM#J*%aQAn~!p*kWk=Xy`}vSg(xUxWF6@kpad^tJQw?)+IYsX
zID#iiA8){h<uK%=kq_AVJ5el__@H@<=y9y$jbtdHMC()zdN_4Q+2`l7q(5$KkqZ={
z895cb>X_rfMst%aC8pX~v>-(B`2}eYjP%bvJ!zA^<K$ci+tigd?+D^JHWnL36k$!n
z4<{tn2x~(oTWAwm&;iRcY)^RKwa9b&#=rzbO8R&&);|m*t>u_%JJ?UVE_xhyPnZF_
z6L*dluY9Q?B!W~-A|!QOkVto2Sp3hZ;#s=*{~8Ckw<VHD$*KpBfuFw@<I|3Zaj}R(
zFD#NlBnVL{6+{(5OH~~lOGR6IhY5_X9EGmyr!)R7kqC$|hdC-fUtAuzqEN+(f?aiE
zfmAg5$hy+RJ6~Tb0=tUnQX&IV6H^hH3l3o!`iGs*Dqhi2jy(oee1&59C&2_uT9d<w
zg@>{ksmQ)nXgb~@qEd*LKH2)=_!&K!C5_|rYY|_}GzL^MKc`a7B)BY6+ij`$uF|br
zzodCN!^tS?LfZmWQiU{9)l%0*-{F#uzR!k+bx#@OIQ|$bECo<26U=KAP|B=o$j#{S
zNV{e408lAR!VfSW^rkR9F?9#;Bs^h;6Wi)4B&Y5HOG}INi2f4$66U~KGN4sI3X?<`
zpC_&y6`8-PSwk^wU^Hn)1u98oWCB1S5+e$g&fN6%pGEP?8Xqh%E`2bd?Aj2b1qy*t
zTTL9XR5J?VmxbQ>^s2Af(u7WU$zY!8jVKb~dC6dyhA^4V0W*vBk3gb=iYQszh43I0
zTy<?X(ur_D6*K|K0)y0B(;A3#IoIH%xh$GR;Ct}k0BLsu=G91%4A{&S43v}KRGjc0
z45|JxKg?2{O^D{H3{NFz8(Ds~M$?(bSlEr&HJ`8$^IlJxwp|h!b{6i8E8}TP)D#_{
z8_v#8m|c5bsw%3A^WB?0p2Ifg(5g9b@bw(KXZGjMBK%--j=!|`sj{C#Ndg^97A!&#
zhtJl1BKC9QE9Ld~c4vk4`kaR9NGgD!z}#AHX|WD%Pk8wyUZ=Ke9x|tw$;dk<05Kp*
zG~~O!+%$B^EdlBSh|e)F%unz&;|U1uj~*rOTc&+i+y^lf&|*4}1t?J?@{TzlZDr9U
zC@PDnc;J##{_a|N9Yw-}p2EF@hL8n>|6@3EaKuJML?IAqz2DYrW*hk_mCDNpbUz++
zIH~)@fC2@mASwa=JU)Y*cog-WwsGFf%*@W_?;nTb`Sf!pNyr%y5i1ZveqVs&MC5;3
zxmGC*OXyXSSoT<*q%x~w>NY;OSlZZMA@F8GZ~An|!R~aUWA>A+w8WUAm8FO;8wMm0
zVF}7#r{TCo>Uz|?UFLe%i|Tlgh~M|RGi+ZK-CC%}L@^7P9s@P9Y+pcQ+z@7_iIUOz
zk%R0%$=)$1PS1BZT(o8E%!)O5a>%DUaHyisWc^sS;sq35>@er3wJ7v~Drv7UJTuY)
zYjv@b9EjKMtY`~%7T^&SAc1(Jlm%W&18UNaiJ}w!frE$-G&Q_;(X9%u3aG?(>#|5;
z0JWENLf54T1%A~LMFw4p45w_UEQC2#YyJKq<RX^<VE}|R-_y4}T=%f1>>7gk?)B+f
ztu$%}YT{minTiRs^L}A3zSWDC?EmK1zgL;k2t4@HR=kctQ0dT7R49Ah2p^fd-42ZZ
znog@yok)pkwa=pnUjb0qD?@i`tXilmnk8$_fy&lVLNDCrDtY`OeHh;^kH3{0<BQz)
zh4X`)tEK`dOBrN<uT%`zp-ReG9;IW3CZiViGt*SZPTwMTC4-$arnx~`rivCMPTj`n
z5~(d$E3uPOB@D|JBKIkNLzcy$fPc^h{{{uH)xG(!vd+E<FZb#j5(YI;Yu)m}KXme4
zSDji$`_MkZOrNjuEUpGb59vvDf`>PeZ~K3N=ACPLbzJ}CLZ@nRkH-gL)BPfAqH>al
z4_t$QvVx910QnHab6dd>XA2S}HJ3ru&;48dfUo(x0;>-**r|VZJh@W?r>jgcE#Ur&
z!Z#(+MlvXQL0|B#l&%y|(lzGBXwRacQbb4C=lz~nM&e}OMl{2PMo29vhiCw)<U5D8
zR6I7ZmeZJvwOZp00$S~5P^^2g7H&9<*<B}8PV{^#IkdDzQfJXh3+|)K_Szpl<_?c-
zupicvii?sFVe)&NqKbf_xkER_@2UR8NT|C6D?X-|MO-!RQUpQYzAr?BH3UaHG5EZ|
zi6#em&9z+$m7*Aw^%mM%TUE48^^$M~xC9mc(t^91->a&4dJCQCTgnb+T&bN4l5l<^
zsi=#H2-{k~^@<889EAc92ks!k3KS3<yYmp~)GI;;yXJd`uy#9p#)7J9L1oe=)$C_Y
z>TAA|CeJ*`k{I&XE9P62TvLGK2aNxXMZ?y(IWoe^FldBRHUFFAEYu}sh^QuCOA+Zl
zXRqn=YOPbY#Gw1C%+yY7-r@m&GW@moP>s)@J(q0Qhs@kDbuDs<DJL@Nn2vLvIA)bg
z0*9zWkm8}0rl^=H;$|Qfh#t};H}4hlQSwwl@^pZ6cJ@(;6$?0Qb!via@;~|4j7%Y~
z4=_RCxDc)MLnRzg9xg%;a=#WPZ9h?riX~T>^9UWz3ZS!oc)q>3)7-Wqf4Bklpq`GQ
z{o;mK8(a$KO?d%X43|^89f#x8c8+>PW;pM4+Ku}(CoZg0Gk9D_S6>sI_7XN7k9nH1
zs8~&2sGzU@>Z+=$s;a8H<67efV!rKEonc+lj}PU~tUfY4L_^D2RBj4{jAA10b_C(E
zL^rPPZY0D`BPw$otk&dB)xY@`;{N^gPZOp>@7jIdo9Fm2W_SDA`Tp7i{-mAbZ*D=m
zhig1-YTLGVZM%Ki?wY&WwQbwB+g;nXZQHg^-#6#{1?SHCFdx<=E4eet%FO((3u!9M
zim`5_MrSO{mSN`1L<f=|+hRyDKKviRc{4CB2+bf>?IY1Xs`G?Guh(eW-*V>TzEj2}
z<&8eXjwHYU!N&m&Dj(eMR}j<yb+j*aAW9>6@D*>Y6dkh+Bt^?Ncvpa|S~|rHwOoxZ
z<zJLt5WZ$Ny66}xvH@ui??B94Od-$Q@L|`$3+CZ2zM+r{TcFMfHIwZQ)5hCv7tt78
z+R@23A~<6Ti?a3cyYvQ&Nb2Bht|YGA0A3N=VOcK>e*;TlnB-A(Z<kK#jB@J1u`t?a
zKazd4DCTK-NYt?-itXevKL9VS?vH|DiDsC40bnO6z2@`?*5VZRrP?XRpg&e+=<XeO
zk&fV`=n$KL?Y+5iwT)F2t}a|U2vn@HT(6WgR`ptd)6J6Mhj12;4$u^F&-rIte0{#G
z6{YKQH8h#X>RU5WlP7xm&0_@fgP}1(o%)vDXhKHayc9ryZPvx$MZuR|Ztc{Zsk04v
zRsieu@a&g@F82<1v9hTz_*dA52G@aG5^G8n4e@(Guj;`gNJWK(7<u0n5JPw!@b|jJ
zt4nNdXTzF0JWWyMtX=WSS3yI*<$7{uGg2aFv4Z(-7k{vi^4AOORR<0a+z=WSRjo=e
zWsC^)!p)a|p=#Q{VUOPMfv%OH(z2)|1j0%+{mK4FWE2xb0tw1lLu}Y<y7KSa;)K@+
z*Efx-NIcMKA+c+`F&aski~iSlfg0{U-wAVw*=AzfP4w=~#UJAqAXCrbhY!*~zF{zG
zLRFndX6M~{->33K<33BLCWeFt*eeus{x?6?t{`Nu1O)27IE7HcYK#j?L1%b(WYQoB
z3j~H*DK21O{E0#E#X*3fqJ@##z4uiS6eS)ZpigvL9kE|KQIUF2<FPreJYj(N{KMK1
z`z>5OTrRPXj;$sRj$KaA=k&Z9aJ9}|Me_Q0cy!erSN*)8rj}<2E@Fkx+C)@zji#KU
zx8DjOV9Yrk-6oszM;VY?^<Cc`7GJNJWQ-GcJJ^IF`s>Etz0|IN8>@9d49!FbdC!E_
z>94MUFw%?PC#W<Wrfk)pqA8b0{!A(@db(EU(y>DHsdssQ20sH#Lg};~&*T>pDYvBS
z&=0{;W(p73KHPLH!iNu_MpYjm)J;7sJ|&LMPy*5Hp<p0+%z|2@S*2P-omtEgca3LT
z!Z+Lc^n3Z4t1l*`$7y;y$^x@P=L?6iOUQpz003~0kB91=oPWKtFE3sDgb&J)hLBYi
zQ!TdE9t2m5^#nhj@R3mW#V<o_Llj0bFu2<bAVY;ZWF$?w>$-cNln0~;WGoI?+T=H#
zp(A-snyYO5xb31u99l!l6I4xjfKXbMBxi1UfT#P^DSgxUjeU(wwH5T`{Z;hBZ}laW
z+F09*0cK}74ZSms<QK+A<1>3P$&E%D@=iosc}2U#uD8$&B8~|elGnlTMP)7PGlfHk
zmVl;?Y!&7j#@o2H?^RS(e}&LFa+YG#9p3d%79pay;gG|ZgW1(y)0YkRj~$^p8O%U=
zjO4FnNIrdWC)tPDP@%W#<c*bpkw}+tc1Wm44^~U;f#!jGs-1XT=otG2p+WM1Cane;
zG;*-8b~)4d^ke&mZfx~T9yiHO<#F}HL#AD%BF`2ir}AS2&E)Lw2qm01h32D1jFkk{
z%X-5MMAAh0LsQDd^LxirKEiA@K&{pNL3O4w1Psc^29^?i>KF2K*UkuaF@3cqK(4hn
zjf0Vz=&BrsM8CXaFP12Y(%!Ed8sk2I2Ey(kEtQ2Hi<BEmK!C`lrJw0!2+&qcqXJJ7
zL*O5v4klrki2P?lXC;aml0wVlVnnUc*xhaW3Kfd;Gnb$R#ppLXRSk-uYFqkWgwJL6
zlP{V^v_zU<hS*v+zXM}?^g*;cRc?fj7VxRo6)u|Ar(ZkeehTY7Sv8==R7i)D1Qc$c
zgaVZtD2=pm_%bv>LkMAL>J@ZM$G{I+3KdLdCpvXysmV3<+Ck4rF)Q@;qkTt>Yg*7S
z0COnKRPfha=|*Ji%U{Kp^mqtjvUKNn#1!x7tgp^suL_BZ7KbrJzGcduB;*=lC$i=l
z{%JD8A&UGY$|v0!m7#6p8UFJMTf)`}O}&Ekja&U=tlHQ@_U6P!<Q_qHJvpMO!AsoV
z9#cQ<Q;JAjmDNVs^B5P8A)t@tMkxG{jfN_`-hwVYB*0^sJ^wT&HlRI9E|;+?Tv`iV
zld&WV4WgFq9YzdD)7NAL3juEd%7F4iQe;qg`D23CazABgqf3d1Nvg&uOAqBK{Z3#F
z^v=&boJ+<<<2%dj)nQ@9mUz{V?N!dQUo*^;z+RL<(D_YYoaeE;ZPY!MKr~YCHFU0X
zw~2Ep<14+<QEoPv{f5!pL{|uPx>!(3ZA`7Cq(t)TF%x0=uh>D!qVpdNiD=jFD;|!9
zBh7B2BfDi6UfBX^eutY6o}iB8l7FSbCKVYF7i$8Jhz|^G-j17?PcvfB@2sm<^D&-O
z-dN(Zl4vv%1Y<e&y<~`bm@B)nqR+pksUJiih>8GWijuUQv&CqlWWPLk#(orI72l&D
z1%i@WJyTe1rxqp4OcbcVA~U<%IoDY{Rk0hJn4D3Ax4;zuO>xl-nnfcW;*vQH5&o<|
z)>E`_--MN`ig?th?+2U+tJPAQxy$Q!FTKuhACsJa21jGJX&+3-ASrZ8922FMna}C&
z{RcSOi!SC4J8Ygq*2c%5)|o&h8SmZ^<sB30cUd}nJkqj1%B70jXOq@gt0)DwGfQ0z
z_`6gpxTA89Y<jAjUbgmUMHSXBXvw`><dvNoy-0tA%<PVRzft@dM8Y!|AIbo^ecKe!
zc*z3*J<J$I75&|h`G|tooW4@<1x0C-U{zQ2Rq+H;(CkE1>NQ*`1+=CaqOcpnu5QoS
z($2A-#m3(q;V}^&mZJQB2aP!sDwy(;(1JZobd4*zSKb|aXKY+PYOVDq1prX|7Zg%y
z6rjZMVtx>Km2WX7cq9k7Rt)!7pDS1x$72yF4<_HxNWqm;^Ka{%S7m@cD<Fa?@h(oh
zHUBK%(FzoKp-ru1i;Fx5%!8-=`fIK=pExLJe7NhpgQ9R9$j+;_oeRr+N^Th%Rl0I=
z(gj+4j1E74k**ptGS*#ltm-9WE5lnjOV=CJm_*{kg=<<q6|xv|vNYppSmnzZK2C3Z
zlr^3X+yd@Lw#*-SAj(c``R@2D(}0YxC&EafPDLu35?UrDC5Ht7#aNP+n)*6pqq2Xu
zl9)CebGx8XJbicbw*Vh2z*8+n1v)_IA51>B@a5}{vM{s~_!2zx{U){;SIav1tQvo+
zD0KCCf_`0RpoI)ahdd2(?FkkDEc)%^1u<N_ZE*@OpfmO%&dP9s{0o~ROit9l(;vi3
z-;nO<Hvi{#Cqk&tUuOTNJQgB+01MzI@T<RvADeCC@cb@iGuP2~4~n8DRwf{644@Ta
zsppK$JLVo8Pi5+x9MBoExE7m2m2eyoW4&?l_AwzA7pVRoCM~jy#2gZN;wmfEj|DKI
z3vsdRUc&84m*+314n@yP&NIju#h3ONGMFs}%FCeHkVWMg6PXxqGZrPKfo}g*nnKG0
zL_M+|m6={4%ngGNrttzY-<hPW-8B$MXjsJDw*w9J4C@TBLG>oRue|ig+1K-g`O%l9
z#~6-Qp1v~$%DuL2HTj0BAiaU1mW0_vMC#Ko07SW0V3gOP&{`-b%U`Vfq?dD10&<6T
zP%;xc_L|>IRnoH)LI^KnQ!qARB%_64X~-T(k}!@DdsHdSq0drwblNF!V<hTZ<NS9a
zItxqnIZNy3$B*`oR6;gbXo@s=9>WIq>*u?LXKXQ=sjQn~3e18CHHfkh00ukWX}IjQ
zo14>V9i1118L<%`Z$umJhKU?dHmAI;^Nq~3;@w}{;<BR)rr`BRn}|y8*O`0D*>-Rl
z(XWX+D$2F2dr4!2ZHXhiiKU!IZO)EPrt%>qa^}|5WewrPdHwr4$HTK}+?^~`#j80L
zX=?E1b6F@|RISr`XlCBs9HEC;6E(K81UDv-9#Fe~ytf!6W%SRbnQ>-!ku*Ie;t403
z2+i(Vb5hn%JZMMvBuzV`DFyc!l`c5ZP#_wg8j1ugEh$inU4nD$_5?B!L<Dad+A{t`
zI*gYp#8?**_SEv`D}$AmhnF9S7q`87b@FUW_n9K@=u=J$`kGNaB%Tp`Z`oqO!ClJ~
z(vZW|cx-Bclb}KZjTWf2AEYEc@upYrK93*X{E=1I13E$#1<Eo`*djhE?-Q<-`j5^U
zTj$ge(~&>4Z^tSrB-9|Lv9i<QH_3o`|5P`C%0wl$17yfg00`h@ioQ66z8DeX*%?e^
z!J|9E{=6??LayHvF&0JQ?5g`ymRdiy+t+aWa|oa~Mi)O?PV9ysJwV|zSo&pqdHU;d
zOp+_}Tf*cR)jm2$obKasY5U=N;j?Cd@!~<2#;bWsJCsl%SU!nvUQLUN=&S|^L^l!_
z`uyeldX^BnG|r?bn^@#^kb(RdMLP4k?Ak!<=s8ADnyM(ZNQ<!Jh$%;?&wn{CiB5AU
z@=h^Qhxj`NDsF)nj{izCX(u!grhZm3D4}A~OuJNAg2)Lh94s)DnVZp}O618A?c<W!
z&fsPBeop9j*WSY@p}U_VQ{iLegVLm60m3Qf25+ZLtHMy3S85x_G8%>RuV7Qn9_?c&
zP&N*#P%TJB525W08*XvS!<2}KrHQ`S!{!G8)B`;GC42;mcFdCH&H5sFOndTI9MIQj
z6E#9%6qW)aeQLy1MZavKQpMDOGQ>F~X(VLjj~6=qhT9}Id=%k>tY^(c<S5eWh1f_p
z_P|h>y=51?I@aho;Rw2pMi+#p1y(KzAYn6D<fY3$KS(A-n#BrnyFoLFl9AGBet&iM
zjNg;*Apf5Nee1pvh<XUP=i_xacm>ZX+rQxj0dc*ZvS=JT{x$Zn=m6Z$<^{SwJUoCr
z@clZSCgA(k0|N5o3Ic)%;=u(vtpEc0vhni;$KaX2`ZGa5cx`!Y!81V~j-x@RK%lws
zj=3B%kGXzc`0r>31O%$Fdf`x=eSfZXU$fHE=lC1;=HkJ0Fui|;LIU?&&!U~i*mVD|
zFfOVVVpVt9POMstP2@LGTlOF5Pd?8lXbZ6c8GvJs*?t#b7@<{-A6ZU;?=6)dNAC+Q
z^lhZ9j|G&Zz#FO=uw^Sl0^ujwSQzB{Yi6@3VK?7NzK(jBtq_20EfXYU@+`vg;)baj
z2Yu;Unm?m;qBD;6_?bTFb*@<0`buH+m~e{9`&FtR5tQ{2EbS)wa+ReS<a2kUvyN37
zt6C`}7Qv&ED?eLc1$9_rgqVM4B4qFy8MeW;I60`?@8!x}igrWfnXQbQCLr0-xbLg3
zyrirh>Io13$i-ohN2l5O<k8|~(2{0s<E9W4#uZmUTSAuy-z!`L$|Psk1f3nbsn5%*
zm{+8&>n+f_f(UfFCU(T`X(u}~(0Rx#4OzrosZOzkO;YxAfw)Tc?wSj!;zfoySI+aP
zVEKs*SITBKEz7|ns(!h=*vU?p8x`lsJ`2y-@_D;meVt!<&ESz73;b!0@AtMni%V%e
zR>y5^xw?JztjvveZS9}7I5u+nIyA3d_9(Vorpbb>PBPtUfwOdMDZg)Pmm|IDzW0f)
zcnbfBWl#nmA$f7+x-ZeU3BXiUT=0`GO0m2s%;2{Bk;#bvp|wE+Np&wXd$ZESvqGR_
zVI{<+&Fu#;W+h-pF(WpbWm<GMVewyxr*Y5Ms0pfEVBx0|mY37fdn9>ER(q?)%DJp6
zWE03=dqk+BivF`J?V7h(;fnrLL_cKg;!Rg@Ig`6q!eCZ*Btt<UxH^}AN!loRF_(t%
zRn(Cm4UGqIc@v(4mt_Aznp@CJzap{%-?cDBe*VFUF`w}J16UZoM9HGEQ=4C7AMp1*
zuGJVr>Y_sB;GPeNLqF(^9#$s_t0qWpb3*1_KtIgBg>LUpJCR)PC=yZA3As;-kGfHZ
z5AQ8wU9|fSBch<^@@-@8RGzH-in*N=91EJP8z>ZCRpsOgRgQY)PVF9>1UdIg4qkQp
z=N6u9UUe~ETN4R=@z<AqV9W<;qs7-^5ihsz$-IJeN|dckw(sj|Z}3PA(mP(Lt&!>D
zL;30kPxISyR@5|b-V4Y$CtBVyz@QYN|4GE<F!lgNAwKDd*;2a$%C{i2Lq#zM2k0TG
z@x+R{kD&}BlZl)~E~)k3_h>o4Mv3}E-Ku+%i4Du805X%Cy6g;9&=dAAi1Q!nnSd&2
z3(d1R)P=7}kiPUkorabsm;6=;eN!CjnzX+gyGnk;d$$=LPt#~<ArYK>Vs`FwA!7)k
zSWA)*47I4Xpt+Bu7w({Woc1qmk-Wwt@${m;M(2+y|ATuoCubHCpvisi9bb(}$3rZ(
zMpl*JOr=v|guwT{><^3X2~=IFEfzs?-W~47<Pi=YI#JgVrVmi`VO8LcdB&hJl>W|m
zW<OEWY!&M4PnO<qQ~2`#9wu8Gk_*&3iSmlMPoky#RDhC#8*1Rs{5Wy;-PwH!pej)B
z>&^0NI6CzaOZsBful0#;KeBOYaok95k)7J3p$RWBMBym9WB)8t>PuaP=+!@P@<1i<
z*;I_ZN#eS4--@zG@GD-m84mFMy8S#10ev8mN~qs2K792<sAkU|EXK7r!5wcB7*gu5
zmi*F%7cZtgH<WDf?7x4r&n0m#n<ywfh;(etCUCNgY*W}5k6%u}YB{rQR3TDQmw;~F
zPkLNEz&@9|0_=E!<!!Z;@+RGNifsw{RucgX%qhMdGOMxgvkSSnh{|9?N1`FnP<7mv
z_jn9kA5PJj6LnPuFO<hj1nmo-amL0_mXXN3Uu^71aB#DPvFOu?)2kcPElHY>Ssl6B
zD8geI9c@&_bF2o46u4@Ig+PTdn(l|I-=Ee$+DyvWZ-$$ec0C=j0`}$T&XEdD8xur(
zuh20%bGhWFU4;QL?3<vwf};|D(9eTdE&N6jAPajj=)8o=dQ%O$f;I2L1jQP_G3d@8
z;ql^>n9k6d88lZ1;Y;`)2uFgq1?^aJU&X8ZWQ@huQYPV=@a)*1HKb6ICgH`t$RZ72
z%H!(@y%ghXhMBwVgkEcGSq&O&e83O@6DL*4?q>R}se1mp>GuQ{i%rY;2xi*q>A8Q)
zHkH&~c&21P_cQ@Pz3#jM9s!u?VMzc$C)%Njq&ad2YY_g_nb?d!)B~@C6h;PDzdD?1
zOh#E&MdF1tRv|`+LlQ^IIe(n!u#|X_72K_o-dh%g`pdaG3IX+BU0%fv9$Y<p+(vE8
z(?}=^{xR&+6`}!NgQ4(Qh$KQ6uY(GKA_0Z5a)m0jqGfvA3--Ox0Pis2z|0^8S_l=P
zyoo!feY8Jrzk(MOSJjQGYtk7HSXZ;=mKHYMLS(iM1InFlV7dB4_=W#yGpBmm9cH-~
z$v~PJjF;j(_+I;C3saj>`ml>-5EDI>D!R<OzEaO=nrLd&F4j1Y2Rq<eoSy7AL~TWp
zb$KZe=Eif;L_7SN0E&V^Zno^@w&-}b5o>z5$oyF_45?gdHK+_xw8y4FY^dPN#~Bp0
zRVv&HL<d#vd0MaBBW&20K})<bm=;4*^MR|6wlea*`lKn&Tdf0cr{VzIY~=rYW2Ns(
zq7}tQ5t)VSn>xHD2?-<Td~3^z`}1Msq$`P)DKPu-?s9itVgDJ1yh-FvQ&6uYT)j~e
zB{^P;La?jHdf3L3=P-dj5sRCbYxyUh6f*-SJU*CYKG+t=5`tz`1P!tVnu0)`iz1TL
zT)#m<R2i8a1KFAOkuN%O9Pgt$z-uv0$6tgXw7p(&?R#yoL8e{}7qB|rJ~9Z1PZF&%
zgoG@ky~umY=71OWv`R8-wt9oKr0!)R56KfjKA1zEX?^+JT@X;@7kW%oR8#^G31h+t
zw&WK0D!Se%?d-VnQl1P(Atr@lgtwyRYa2kkR$avYMvOVW-MyLL+rEE%y9g^AuYTTE
z%xemSCP)iiOxvT#{^n{J%ijtYbsm#53dfs<<WoHqqdlu?y~$!Ee8(qEtWk!#KdU$p
z$EkXLSP^jwN6|EgC+Hg2vnxI64?_z_{nyU=U>J>Zx%t%$0eu@*)Ad3m`~~n=?HQp(
z;QQJB8C6M|MNej-at3`4j4JvYQY2h17ruY^x2xHLTU4#i99{4nW6E||)=-OzZ&Nr0
z)|ZiyIf-CoY$p)5nyRDZ#;*O8do80i0uINjTFZg|rqIK6f%{*0D-zK)ZA(XzEVTkU
z-gnU;PHlmm2_(+C-h$W0XC<9A5}cg)?sOMv5N!-*2j1)~ftcGfKsW&n9sP%8ddN{T
zu#{}xo~3i96D{rCwvro?vG3=4*?g13PaV^_??634Qw^{^ZV5iKS5Zetf%t=fD@@}e
z|5?j33(Hi&Y$_k&Z<Vj>mG7*ak{QHSDB*{`svm<iLJ!U?!)*abz+kV{EhdCQ?>6(Y
z{76zc@x2b!1mNM_&A%;0pH@)fB#_mbs}flbiSpLKa_t?R_@4KRKPeo8oG9F*KH#9e
z{II0BjhK(Y3Q;JST{9KdqmBHh!Vv*V0M`8rFmFOzPw%2%4!@k(FqDk?CpgY#7^v-^
zH%g6=OjuRLA@SyJ5YV>whyu+7wZARnh>m-&u-nu*b{}Xw`mj<H0|J#o3Bj3tT^ngm
zB+(^8=3EnTU$}}e<Pp4mG_+C9v3cIVmds%F^UxM_gEHtZFk*)HP4!PqnTTNokob>s
z9ZWL5HV0XDsIn+uiA84+2oi;RB&&u29;+AZPE(x+M7iB6yMA;1;RoGWB3C0SH*|fO
z?Z2fvzqhlm>V-;|1Nu7-ycYi*{oo>zcUP(apy9^z2O|VC65t4^0db0_h&~qRN{<+h
zxQcQj8-E)u#sqmmh*!FC){xp>+Vf9PJl&dsG(SdmL<uW`EAP+7ETlYbcuuiODu}Fe
z{)-+BC8$dv1QO$0>lS8tDdS#c;uTu+)b16~06G$V&*jsGD`%;Y&IyScLcg*<t6mNt
znl$qm0P2CAn2F~E`teFy`>Se^3j-e^-V)Zil|tB9vX>i8#p{_?veJl#YImBN#-U6@
zGpNs*25to|%$v9c7TSOi&a6QdAm(%Jvnh9{A!p|g)6OECTL*<@moTEh$ddyG1%O#%
zqtXyuzFL|BAR4rI9q|(96i81cT7R(&s*4oMua7S3!r(!Q+%mpZ<SoP76b^Mk+3ZfT
z!SxBVlZt5~ehZtDh&mvfaTBYW?{oG6X3aq5=t9G3pcRbnLL6Fm#n{w8DIVMrTkYL|
zvX<CmV|(A&>*`_$USbgFC_xfsoIIHZLl46Jrz~y0{owO`f7sW}^$%L(l}h7tFYgo~
zO8w5?)>Qv(HoQsgH(`TnB!fa=@pTA*2bgKwkeN|H9HT&xqWGOXVGGv3iNBv9!%f8y
z^V;?K25YisPoIjB2QwfuE(_o&?(~&c)+dyDxVQcsoh)x}p&@y`CEi?f((SB<n5i3U
z$2_89eGZC(k4T(Gik_L8FR!=%dCmaUGcV^_GVk)PP3PTD$==Sd-tq1VQ0J(Qa~rwv
z_x?OKiNLvICe>staBbhx^!?Pg^)+C{A)LVX)O<Y_ca;fnt1z6udZDnD*+=EM<Bex}
z8m(A%A<ekkhMk(XU>LyNxVW#XVlkTx?>TUvJy%d;b4ou~rynOMKHxQizh*Yal^m*Z
zS~iXUdp=_puU@gzI1RW>t3R&t){DLjbg>GAHhKO_!8Cj8azv+Tm`&u?J`+#FXS_M?
z7A5<SM=M9s>Ypm|HTkE8oQLgkw+>-<@%3gyj|M79#J!i}rs2$|OQe>Ff2;G>dGFS1
zGiLKlS9ewD@Kb8%>|=+Uf<CLP5c;~`Vg9_?djC6}wIyYH)A-hfJ3KUG{PVGp9;^6e
zJHl<<@1udRDRhj@(Vfzu>9#k1S&j7pJPNt)rI7+d*)cR^=R~SdIEvt|x4G**Ha+}A
z0kBw``N7X2nml*rfK4&ZMnKWjmZaANX5PDvMlYpWUj;t2N3}@>;T*8-IJECc#i&_7
zI~%Xz)`(Sq#(p$4+2ELsw@|@Cns|$)(Lz1RDm(NX%TiC=Ddw%a(8j<Dl8p`JU}F22
zp}|LwsY*fpB*RGb8ZJ>}Y@i0PWtKEFPv$B&RQtXoNRpzx3J$d_50S^Dun}+4;)xs-
zv&?@xU7%sfxdQ0$5cTF=s_5h}`&H#L`fbW*R1iFt@C<Tqq=5hU0wr+^%YRx$aZvpl
zD_D$=K%Z;30tDk|_=~F<J0DJ@wiDda!gnAe7clHOS>(+I`x^5=Pu><d%vP$UYZV;P
zXzN_G&c*#0iLVKWRTpv(F+S3*@t=fx<-IAFbbvVWGA@lX-lXExzWOvoGOcmFuuqK1
zPj=-p7%LPG4c~szC`}McTTR#QF*NZPo;zYFdDbXJ{)&hG(*N7)fsREr@!{s_g$}Qu
zk76b)_lo0e1<`#Ivl~w1gH4ok3c)=OhS%f)<J##1?TA5_S$Px_f$peX_CAX56FADj
zz#n5IXCRXV^DSL~O9p-3A1K_XI+kZ&=75jhMJb+S7^(*=&Q%g8gi+?mUHg`wqBm}~
zs|WX@RRWyx7U2V8G-t1kOadtih{DU)ac`7RSxfo3FQ&btJDf%0RK{jq@Nx=NYER|p
zbnp_fRPU%av;FX@jvqizMPZ)E!Z1v<^eE}zbzZ(A6N!^h4)}2V;(3G0Wk3U@nd7^)
z2VK%G97OVj7Bj}7{{3)_k!*!DmoaK7PhCH-V{~noA7QpO)>{I7m;&Sd{6>UN8{<A7
z?doU2A``zRYfhqRC|R!rqN<Re`|$3mQwyict=H5-6<_)nj2(}Z$bSRa^AeaIII$_9
zak%D5S*Uo#7n~xTp&J0NrdNZ#`m|I>rY@|w;}ZbkRC%Me?`7!ZHDjjMw&*nNw<DIV
z$>8=9-D&{6mWgI{(j(l3dcO%dqNV=HD$39<VdQ9pC)i_FO|sbg^i${c-F8Gh-uNZb
zlk_Yxgrij*h{RuL-esj}iUA$N^6-X+;tbk{u2nA$EXF=&_q9-wi~`V;oDxl^Z4@)z
ze+imQ8fp^&+D`x36G87J$AMO-z3~WHHYj-FFH1yA5jT+-RD$o~){nDQHoHde_D!nj
zFqvOT6bOp-b`SUnNGmEfv6+Z$SU1<s!K=E}Zo3{?z7(~4FnpAS@QE{Mcf=NhH$>E8
zo9%~PDGQ7CTZwuR+fq}`){cMEBMb+C>dF<65IEHo6XV5KvU93;>Oyg_j)f_>`u&H{
zi*H><-Ld!^{$cYicNtkrtVviJ5MqpqHD2^E`a<i`{!{{6A(mYBG6Ur`==NM6OqV4f
z>8Lu|#6*Kg{C>+v%GP6@LTGDMSU!8C&$WwVe|=JGG}s94h|cY@PDf)aYatr&)vqn9
zWGzV8EcBQO`^m2MmX$?XVUxxT=OXhp>YZZNEsKL2tMaW2fE1(TVSY)F*%qHRX$<_n
zJ<cwvt=rROWm9e#DMi4)nhUTqneHcYjfUg|^S1c_y^$=tL_d71j5l+g@0`+x{Gx@4
zwM<Cyc`ZH0TixRg8tvLYz74FT48YTZDU$98MCEu=*^ekWWxA9P$%%1#XEm>{W|?=Y
z;UzP8D46i+%M#HGgoaZ{a-jg2ZC})~kEbx2$h&u`Y(vtKb1fPIN7>0Vu{%JHCBxI9
zBej!+?e2@i-?jpW%-yLfVI*6o3QGn74;r!|NqLSg0v~pUUtfMdEBy~H+FxF?op`r$
zeV!X;9+@EcOD?MiUHhR=2ARq1whF0^SCY$vWOC}T3kGWb{R2&|SJ*d|FGLYKIPLXU
z61)ND)jG#+M8D&^&{90B1lM}bn-iW@#}#CGujx6AWz?|w7&Spjk$)IrBqN29M3Q8_
zeY8a1#?qloq0?7+3ZAH;-nnKx%IR}S0}OQGDFihRsAOYO<a})%_mvNFXXeR?vu3L#
zZ>DtS8A?&c<uaRYm7VYI7Sdaj73s7%{{J+s&n=duiKO8HEUJOeyfB3bqXNwSd8C=h
zmwuL}98Ch;!#-<9te4%*q#mg)y#Z!1<j)??9hP%XlT{k|wMrWQR5_Q|i&vWIEZf@s
zOVtQA&0)t=;m{2VacC)_P+F7-elhJ91#lCt%py=8H9P7Kl0tdn$crK~?p_e7ngz+n
zhNq>-9Dfm{3ap6p*VlXty*tw6jL^{uB!fv7A&0gFOKl?#nMd`$na)u@b`G9(AJ>l1
zx^vhlRPfUYnp#8GPdl_6p|ui}e4)921Lf5~+)iloa&mb;#XwKML)rrNzW5d+Cb`>&
zrnkXC%<540oH7b(kOa{_<eWdf&GTsBM547ew6S9FF<CUrX{dgXBw5Bm^n2Eq=<KuR
z-|9Ia@E740aW?|%n2VAxIW06``)s2?afE#G--G^x-Mgk)Xrd<iM%Q>g3P$h6uCF2o
zoPM`g*k5kDZJzLKx@k3R90pbs2-|&jbh+P5v%hh|KR}9`0X+yD%63)UpqF$DY)sB2
z@@K3s%04`WJ3vFwVmqsWrUG){<Aoss;i0?&%B^r$nROE&9D`iCn(W@wXXNIFH=6BJ
zVMhqKRvWOI0P4Kzvw>a|1oD*{gnH$Or2VxQ$ywMpuo_=dU~{{=tVYS`e%(9YgdlDj
zIVDCk<4E+brx)4O{_cit9&!t`eR*l(QZxxOvFSR=%R(C>ta7I~ge;3oEJ_XDMHa7W
z&JsAlo&Wf%KFAMOo%M3?mn$Qt6&*jX3J7`5krH|kIPxL#74#4I-b11y$^%m^^3kDL
zR#8*2xKnFhSa*^G+E;b7(;Y1<$K}tlexSDxS}Z4+zG#=>B(P5|Ecj<Y(M^uWYclIz
z<;$*?No7p6qKGFVyQw|2X<-B%l;x^5??6~dRazGTJIYo@i^EX<9Y23vr_{^{s^PP^
zG%1GDl%WBuFAKpiEFc9UwhzazPJ#tRLq{qz*hN#itvTha$MO@5a|zzZbW^?0HY6<S
zGQAK@(dW^C2(aId`jRl$x&V>ol8RGzBH4G`H<#|^ZD<Du!K&)n^%j01(&d8}+=tIy
zNN#}ua)dVtXaYa}MEm^DU+Ws5puTP|gwZ(&rUl(TD}fR8Xle?pfOZD2*N~zS`0nx(
z`rmQu2DhK8v6NTp&%_n=Ucn{L0xlT$GM=ARJWfLsX~nfLs)OSdY_(;8AR#|eK2`jX
z@ry?9h*wVzr1!5V#N6v4O(5=udy*I-5b(-tHGb%5GPsrE@_9p>*}bQB+wv2Ju}ob2
zf+xP!0(ez5gMQ&>*RiL=i-56RHj#KqLji)M$<{EFeQddS+MWHPzWeLT^8zynHfev^
zj2+>m&xE|(R33*Mzg0!s%91R9nmcqSoVg3U@Kx7-h0SD)#Sb!Hj2{!KIqH|q<-|9y
zjz0zrE57Az)lx}(FmysHAJg=ug!0KOnL}i}wu39_AcnbcU|$A8Zsgz#`Q38juMzGT
zTn0_T$d5j5Vse#AmC8zXWi>$Si%vJ>y5bv(2fD@jY)Fqa=(`tYMn^|`&zHJ9c`;tj
zzf9jL%7}c7hv$<dyqbtZKmvhEeEozSw$WIM`j4C0>t1?qI#qVOURn0z-KSjD=GaJN
z0u9BfB8Nz2>!gej#bzv_=&2?G`AK{9%8k+)Xrx&1VvujT(f<zOR~}{8rTmlUf>Nc8
z{m)Rs!Qc@Jez=K`?w9TuohdXA7qP|RmUFe4(xa@CwkJI_k#NF&Frx^R$oi>AG~9|o
z#{Q)WrEv1ZBua8hqU1^fE96X4<J;HSuX?5g-RlmN@GKkOp8ArtWC~k>(j-WTT8aX<
zA~h|NhHN6w>YsXV(gN?j+#yGZrmLYM-z?B!U?iYWL<BSZ^*?^L7jUcdzrQt^O&Y9l
z7ISkoD~ucdCildVF<k1PJJvd8JC}D@?J$qXk#8i>w$ry=oylppmAgQ@fX-L6RmH6x
z$vH@E&ijJMU-h>)JD*+6<w3t|67>s*3gxLK7A05G%#BX!U~E*mI9K4~s-q}IK!Qdf
zDVhYGW2I6X``(?I)i-OWXjMh)$g5LiS+<u~9jr+o6$#Eat}E4Yw-=u2#H*Vcm5r=v
z<oEnG1Hx|lAs}DJXl{(|$F>8Xw?{uX%ReWd$NcJI%Q&`sU6lrWEsz+z)_jD7besG}
z)8wU5c%lQcxy0)V$3U|nvA(O4W8cBBE&z&DL&*NMVXp6T3s5J7N#DWx_$_F*6W=LU
z!$<=#K2OR4>Bs;@$%q;zuwG-wMQJq|9Tj!8Bz4ur#UkJ$yOViiRS`>7S)(noFeqpd
zNg$d(B~eWg3^<Wuo-qWJpa_N_6)cQWl8ITJW?PZPnev*2jMaapsY$Dru{T>+EjFl@
zTj5B_EX`Y5x2vWus~wF~6tgG&ZggC?NKo6Pm1<00iw`gRm!U&5)D|Jf5uswW4|F<o
zUQV|``K@eWIp&-^N6r){P9{kXE==S!l#C4{!VG?+bLfU_wzQDG66L%$R;8jjm%NZc
z(U4ZDQ<=Utm!8C`mZmyZ3}h)wk}X$mn5z{-Q;naz>~&Kul1rXcmTIVzEFb|VDnqjp
zr>R6%CS|3eFe_XF7ST&lTc|F@$x3IKvy)3TG%eh<tzEKBa>S1|l+o*&SR7_3YbHrs
z%B9amV3mbNCPL*wJ|jK%q%Od{=F5?DGbtW$za~R>P$kb$QGZ7or_&^e0LtkzL)$X_
zbV}<^Q4&c4ewPC|#-)|VWLDMH=XHoi4)7%vAtU9?SV|#7Ui^jOOV`rGkTq2`C;v7A
z!`IO(!*n+%8b%uyiO8^+f3yeU5Nb$ZNLq(e{-enE5-&Z9yTKt4rLh|DAo}9eUtLW{
z32gO$a|@&`k^vwrggrSgd44%>k@dADd1po<Yq9x(D1;<Q;6dcSiDH$NliQt(uGY>}
zq|Hy8+Sa7h?>?Nnp(~f-aaA*LtV$~>q_+}UDyS>gil6VAO=QE0IPP-i$#u$p;+5`q
z&lE`Ic}E9+qwRhW35QoAY(%ksm?%)DWL?v4$R|GVr|`KxL+bS*)TchHrSaE`Xejp~
z4@ElPP-T$4-PzhQLvA~W1QZoS4+J?QbvF?IYLdBjTys5>f}{xZiRqb4^De%I`~&>_
z#4x0OKSwk3soFNe-op3cyj-`gR;m0m7?^2GGd-^pNQAkb(x)($O-L>5m4?3e5!+No
zkHfy}`S!GiC$p1G?7bl{6a9kaYyJsneeELJawckE(dU`5)>iAuy<~UqosWFkI}hH8
z`V4p|P1qD~3W%_qXhB&I#1kXdEEWzi9?R$K|A{fC;tj&i{4_Oi<o*?M1aoWb{k;X|
z4<S+-1pWkuhJ+-To12^W1oCixN6bkU@DBPV(ESYP<ryWe&-HN24ADT`UV8lIWc@z%
z5l{wIrlLHfbr?C^BKJ=!o6tI7j-459=<$Ml{%A=jIJgm5p(snNImU({nHPhCMI{;j
zJf1x!8;uvogGV5onVAMXK(e+zF|dhUy6NQ&u!cYiLK!yYtsGpDgh*}gef#UELM|#g
zN|p*ZJ0M7<aRXr>;$jet1c}Lc!mRC;Y-U_MEkjizVhac}bG_mbIZz4#hb!7A{?JMp
zQGeqg9^<X)VWW84d*%cmgfV0yV~>LP<5<l?IEQe{VN`XhrCsvLB1lHqM35Wf$xeD2
z@K38ST{yP--;v_e_=uz+YxPbY-DGCojmZ3=jeXkpKhxdMYa#=BZ}ama{(r=uEx2v}
zzF1*FmB?=*lhXj?x`+gS+@=LO;&vGtlugo@^^jQ-Sh=~}!8`jW)zDna$tBD5ftvA|
zSqDvWjlFIs@;IK_%$J4Vxq`2_D>PH1O9;f5IZ(kQ4<b7uOZSz$&gXGJG_*tli8xL7
zp<fGVii(4XR6hWxLV84D{Oq0FKq#cc9oxEucReEC?i+@%6xJulw(oC25B+!IFJjb8
zDCZ~yQ7|MTWB|w=Sq?5%7$(ug)AG5%{8`c%u_FB=Zs-0?hkCXY3DFdiF_WAEIRt0a
zg(3i&>CCfbX}s}s?L(XIM!Rbpu<a($0EZ@UCN4#$_bWHiL*k3`^?NxrhAW|NBAWrI
z@E$M@o?==km+Mi?6keYD<Am%B(i6`wtXUb0K-XRsNJ)xJLLt9Uw{$K=5wa}ZfzUO(
z56sRGAh5X>d>awbnFK@iV|$sU-F`z%-bI8ig?#lz>>wjYCj$trf(mMe|5Q}Y)%H$z
zRaeFRW-DE6Y|n!rZ0!P5Jct9aEX=<j5;E~zK>YlvMl-!=s)w`B-Dt}!>bLbYNi|Bf
z?d@56pUH&=zEXI#xhbz!t(?C{I4$dQi82X9fNLQyHnV6JVcwBOodEU771oU^8)pvw
z(_1TON@pM}Wlz}6SKl?UFlLOd!mkV6o6`*V?Vc9`NHx=eQY_#61muL(FRI~K#dlcy
z=Z{<xAF?-edvM0(-0O$$**B%RL@ny)nRi%<#BYY-b?U%16}Z<M-#|hrEW<v%L<RSJ
z>vL?cVY8j*94L`<MDPjsLaUII<H2N-!5N|ftcVT1Thd$g@tdccKNbLYZ-&Nq$TQUs
z-3fg}JiG`L+KQbMXsNJC!3SMlfu5%i{~{A8JvU894?sYmyf=Ju<{=ex&4j;KVd5ug
zBE%en<7y||eUo(U1(C=SGYJ255s(&7srsK%KOU>{tikY>PID%IKy&q?2WVAOg7U}f
zPDk^X<BO)w`&-fqQmdbkE6?sb>>Y`<Ngwfpi}yZTJ3(-5&wN_U<&FJu$Z)iT=RPJ1
zipX__m!G?=rNm*t2;N8S$Jr}xO@O3Su&{m~_{X|;5SSE7f@|-V=n4B`=YCLe49zce
zR5&3H;e&&rjy8>DZ0|3g#%>i<c0VJ-0FB@p8n~y=Zx@9|7RyHgeYqH;q&LCi`B8pZ
zO7-=Jqc6*){)=S8%lJbN+td9tvH&t-GQhK<@vy0azR1dJIsizK9PXP>Ag7cmU1u%4
zPBC$eoayl!++?^1`1`|m-0}0borpKV(XLl{u5F(ZELj=VbF`R#4CDE`6|Sol&ESS1
z6OrmVTQ;xc-}D2X`Hwyr^RTM-6V?1^4GLS069<KI$&vD1MqR?E^AkGXI=-|Nmu8-1
zv5pNcWoTyf-^tB!(yHq_k~gjzB}1Fm)SIKdc?(-kKyHj8cro|~!-NPyE4ekswXD5N
zB}g<eSk%w1;@UHocWoZ%Iu{$gJl(=%#uDtxZoEY)OFQoot`^0P9_r*jRs!E+Z$;a<
zD)x0$rRbKo_EL)e6<FeU6LQCNZc0abS+$J>jKh11ktE~j@4?*M0#WN-fnZ3)>xUQ+
z7|4D2QH5R1TXybHMzvgm$0dThG9SL8<r8e<PdvU~4J~0e(YCQ~h?F%OIL{6v9|f?=
z@G%CKTwQJg2TE~5DvvD>euIANI5~mRyZ~MSn8eEINV>kbbP@>;LH~mIm3!l3c{%7*
zPn*obe=JDqsGHW=CR5nMCLm#L(AN_sYABc_o_2Q-0)5ci?>>_%V1KoBI(2%F_FH&2
zT%a?eckb;r2rT;pPY_SJ23JByoSM_tpv&<O5O7beHFj1GAP^;6rJyLb(^!~~{R-=T
zb3CAP6vzbe?e=vWL2ksrxKk+5;{p0$as&*fb}51;lHzR!FNDrIGQVjlGx_#C#fI0X
zZ3Li9f8iaAxcWXq$aSztfYC&Z+o-LIxK%VxFGpeoY@bqV;fpM?U%lgrT_#Bx0yO2I
zYnoU`SopML{yvC@LhsXRe)dtOeu5zOfYuP^%-$~oe>5&XPXhoFy!Uku>527<FJ#4h
zj^gE)Y<b{%k|F9l<LXK(ixfLV7r(s)zzCGM%nDteU$eAZYP9wI^Gp8l;c<h<pOM8G
zy3iD@nmGV=6q8j|`$#ESnAkjT25)+jB(i1*8jO<b1L=wVJrs9gT!2dJ(aNauY-Jxf
zwG8z0Uh6l6&CSjwSQlZXXwyO3Zw0Tc@z&p(&wQNl*be5L4cH{c$<AUbuW+|Lb}-^K
z7yT70OA!2orjJaGFcru+2L2k+f<C3jAVHN0KoI{RIUN{b{Wv=i8-PjT@aI9c+i&aL
z#q>qe9gR|g{W6y8jm1gLIIgD_6WPAboq2-%gTg3M$t#Q-3ylq8ELe7LD}Y}rzc)yt
zVNc|OXgJ?vl-JkAIk&#sdrf^sY>kGUphD8%r<W(RsW<3VXyEMC;M7D4BlE*)jtuCo
z+7RH%MiJPECY0#kVyR$JHBK)jC5W3Y7jT(Z38G#<uqrPX@KM>kfN>+3^n+IW<Z!3>
zBZb5VePIAKz?O=KI14=vehGg0<kbkY*e~Oa^;i*=6a*>EH4u(N2gO!MC8U9PLJ%x0
z`zB5&5|(s08r*P=W<;|gMdnos#cL@^`1;k%ya0~AaQsWjgG#(miREAyg}nJA^~4^+
zV@z+PQ-$3iA>iU+mWZ@wx`eR$BJ$N~`f5y%{VaRbqSuY*CzmXOuP}z8B1w%R!c+hu
znVhJm6g4!8@VIzx+l&y5MT=<9>TaUB?~#^y{A(sPxN#PvlP}#)(L<E-#U5AF2aa>)
zeci?AZe+D4_T$~+9PJw3SSZ+NAcZ~fc+`2j+y0)rp5#ehQiBGXYqIz^&OPwaC9`)1
zIx!A4_QtMb$yyz(X}1qAQQ?jk3f#9aG<`^2jegDU^o>f?<hWI{O~YddQn@~E;7F7(
z(%G!$`B!~db*w^?E`UVbtNtwPBIUB!YErWjLJ^r1;kP)Ygy;tLlXqpbkb;0od3kk?
z)W4R>aaa%V8ob+`fnHT9W(UI|sSgs6Tozw~DZ(M+B3J=NGY*JaFo-|_JIBs3m@MLl
z;pO8~#Fp(;Gcp4h6iIRFKMUN!h`7snj{?cuaQ7F~JczB2EuFOpDH)eXcC@~thgg!4
zQm|o8AHW+S;NL@^993cq2hrlVeA4_95kbd6q3B>a1<Dh?qOVO_do=sV#Ns(Y0rjRT
zd1AmTsO`QOmF~O>v9hT{AYfQ#1Ya3wf@S(z#mt}MxBKuJ8w61oPG4Pt9_eL%v%q59
zgfVL(e9YwW`F&hg^6rwP42&Y~D!OS6yuPQ%xxf*OBrp6v$J_|Odavy7VDgDXP7ooj
z#ll+&_dG<(lf{F_;xg#2BJleTLR5ijssio>Q6;POVSxGe6czXdcs*Nn93Q%UCy8C3
zaPS$x2x9{h@?e-qg&wVr<5C`fUHY<1i#eyT3A|OOH^DD<J|PHi1%H$O(u;e1&+|#4
zuh#iQ;KJ3lbsLoU_fq4?WqNW|lI5RiVb=0k5zwfD*oi~EwYKnd?<A+Id?X+3^N9ie
z{N~{F<pY0mA+~lW<znit>FDmqM-yU2_(HlLc64lAdHIyNx4d!4@Vi{_RVu8k%7M!#
z4YL-NiEi($MA6DeC;TJSTcH5Tdl$EhF&_vPPOaJb6H8)n%%LAD=s2tz+uJYr^vKRK
z?AuIuGpk*d$y5%*|HtFKjw|qipPePNX7C2o{Hr##g5dM(0btrNFIOXBU{jpK5523$
zQFc{Q@_OC!DL((l^Y*xov^+(2!aOrr702GT3_M1BXtzphG*aqsp@(ND<d>UWU4$&6
z9F()jPhv4(`^t-tE@|MQ^YCP3M4~dTKo)fzA(Lc^UbUn1s@Ld}g##6TX!TLiA!oDZ
z;&eA9c%u0shqRJbRDK4^6mj+aTcGOb&wmOgu;k;O70CL3#Uv^^Q1&A+PDyj4eD`6v
z<80`$@#SG73Y3Gv!dhaE)r>}UaTEH=(o;9BhM)YP?{mvo9rO38;&;U-NhiD}JGr&7
zc=2q{TC;fe=h=->{LY?BIGsL!&IAAc8wcY9186ikt@u&RK|gG#8`UDizsgKhY>scl
z*a$5>6BBC~82}Kg1Wb^*30(gLd7|StfhU8b96s?LYCTeg>2*h1S}*t-rzaE(%Xj6#
z0xQblJYOtT8$X8Z)UuJ)Ez`0%D<p<{{bjQuG>sq@ed4Ej53}y?Hz)CDbf=rA9|^6L
zGG51p4s|AN_eUM`+sXd+W>&01Q;xi-J}&A?OGB3L>8YTGt?kZqDTW%Kc||_`g~pSO
znquNJspAGoYiM}M0ly_d(By9sy3s!VRe<0a0EM{vctgfQ;Lsa*pn+6#4-E>5hnO3?
z;*152;1AkgWBciaqER~|WOxKFs3<IxyW-W|@@puzxW!~_3@q06i~rJPBGls94s^#D
zytS*odAwqH@_bdtX~V_gDw4EhnKPewq7L5#PmGVCS`Dp#q&)Ayb}A*g9)(#?&GWqL
z#D37ViXfTp=z+aDeW|H?>d2;R-5{oR^<~?#(g>J%)!E33=E!ti&^RoW5>B22@I$P>
zsc3E@VD#8}?)<q?VW><)z*Vp65&E%xq0Z5hJk5!DyK}DV3Y_5?L$R)ypRw7)>%XfF
z()kRPoG4lC_RQ>X?IS!YB!=OKgAqpb_x(`_BZ2sW_YnEk1QNY~zL$4Y<nCUgGYaQd
zKx->%4jY7CT5vMbjd$r$>`&@cZ3gmXn`jke8fiJ`ec13=Ey@q$7t^^FRG%#v-ZSy{
z0>w}ZIrn%vj{lN>b0F~T+5G*L*7B~9zkf%~aGUn*bH4X+|GCZBk1%%5f9^fPIr}a%
z(`+!;Dvuy!$+rlx3Afp^TaTh?NdS}M^LvrTqiWH&q~(FKsVk7Mc(U%^>5Zz7`x^&$
z#@V3sWsdlX_-t{12LT{m#qjex<H48x=#za(w{HEwJyMcIEsJUhx<KV$>R;-2RzHR%
z@~*Px1@*0G<jtobyf3o;@AZZQPsgm(9`o(B^o>Ky?`jm<5*dj0v+XJ}+<N76UT(UN
zoV7QFzw+ca*RF@6_;7bABp}2+7E_pO6Hm@F!;E!ALdE<Pb~f=|7%PvjxMW@v<MSz>
zo!tSySa@}>wfKeKNaIom&o61)aD6{KJNMJE|Fmt&Ax1s-As+%cqv!HFfIai<zbpCA
z9}<%P9eCV-{h1+ga_n7x1eE+sTt1h#sA@aUepLVIID|r{_Q?>Vd&Sms*Fv@wh~EnZ
z-wX%3O#P!1Jw&7kFzK4M3GX+GN$qEST8SH?x!(bX?Xv)bM6kP4>gCgEDl_bh$KFmW
zYzTDx(2irO{I_b4I4By#Vi){b_LHaV50K*r$x)xt?v9Ep#Dw7&#=jMegA@coGObw(
z&E>pDSX<giIj5YtoW@3b42UMc41+*`7i@AuKV~E0jVDeWx=vEMDN=BVF}=3pU{TlN
zM4x%;5}R?E-ZR_Zp8v@D!0=3JwJjPesZPXvIC*$&zRhoxd*!Lv_;ur-QYP%xZ-qHg
z=x)kbV<E>Mv&-jr1~J!8_}=Sj`TB(zD$CwF?lWtNN0?r|He(xoYD#xu<Fhio*Nx4u
z2b$Jb=YrE-dz)}Y<<dWG(4_ghQa6jusk;#SswCr-)%3b7D%-!SBtJw%K`*_`9O$ex
zMXgv!mQ-J_3&nZNuG(l+Emx&ptFW}O_o`5{v*#aIT-{a4%}HqYN2LIrb|`Np+#77;
z6fV4c#AdEE>I2JVRiuLgE2i*fb`euaJaP6c<9Fm+nKApbi^E)^@;fEqZ?&n7sQEZ+
z<K}dfcBeDi+pYCqCK;Sfu|ing+C-1n3%?J(&oHqLa&>}8*k|h~wBmJFvDV9I3#GCs
zopL^XPM^SdMU->xtajH{#usE~$nw71)@}L;O@a1`h=lBIq;fH2?Pd4oeA>B&k?lxa
z06?Wzox|A#e)iZ-RU;nv1ebpT0r%GnkUNe+WyyfOm>ynEkNbmoeSLHb_&=PTQ;aTA
zx31gxdZlgKUTxd9ZQHhO+pBHcwr$(k{qLQVlXG(}_DtQ(i<vPhsZ>VQc*py&I8&ss
z-S1!d`e3*n)UE}$T&`|dI4IIe9x4p2`R^Tea9B%E++`}Sma5w9c1SxxGHm>FreWqR
zEnhrZIjly!*uA(aoGEzRcQOSa@3D{*_c$?<>k{+$I&uH99Yt<-i%BT9qmOJP(p~vp
z-VOf>`rF2^IgKo=*%uVzwpSff6S|zN1w0gHclHuHmU$O_bMPHc?Lfb<-o)R)(QVy=
zqhY!DTwPsMH1>#got@ty{Bl{9&v5;A*&aT!n@90z|JY`FNMdGqeV@GhaJxIb4tD)^
zv52-d4{O)7Jaj>lPMSLNT{D$@rIWB3(dJI$7eZ~ie)18dc<uMhOLq8|zqYTs&ECDu
zx2ZRWCaC{jtfZeZpQ9TKt9p20;KN-X$Be+rI2N(l!N8qeo*3w^aj<p1jx<qU6?)&-
z=4py(id1xRVRq<opnj(GI6A$$@f|nCNH|pTGHY&sILx(O2g~1XRM|p==E+*PT66KZ
zK44CTW=@!IqbUEDhzl$CIXYCILJov)z>32B$5Wo(|BfziTy-UVsMeoZo&g*8Th5=%
z?ON?yL)(%qRhe5md#@v<FVjuePbrrn?A;3NMf<r$rXMd>mG#`Hnt?|$GbPNIJEp0}
z?w>t~KPiq?*DrWaQ}3=SS0-L|BNIp$uQhZkytp=4?0CpBHXaToYY*;(uSO!@l{CmR
zj*apcZ%PyY=xE<_oQKIT@y_i}bCR4*mW~fH({D@J%~3B;Wkrsy*)rjMxUn}N%?FN7
zP7k6KcX~@uRUgPs46QZIE@$1F&M(^>vjk-YkB7X-?MKM=tXv0OQ@b&4cg(fj*Eq#K
zT|8QOXRBzkGVLL*vXyx(S39e1tFeeUQaW$eq*K`C*rnQek%dCa^DRt%esOZ!T9=f?
z`S$Isu!Z5G^t`2v)0w9!T|ImrRS%owXe=isH~=ArorYWXnylti#xSR*Ft@c0Hp!)V
zICrno(!{d~+8Fbh)SmPAucZ}bxgf$54$d~I&(za(sE}-{^;X*v-LoyC^Br8TsOkQC
z@k)yZdZQfU3*%qQ1+5WZ3hYrvXjOcD>c980g0x4>&T#QhuP8j>;yg3vbglz2kLHj6
zreD`*o;^ZMFOjDA{Ta?-2RYDOLC6j*cOO?SOtD4apW#7l?xE_?9qD0d&I9f@wr;2W
zVs0`%-q)#IijXnTsSI28R^}RcdgA0al2a*vZG<6)Q?(bda}l_Sqgq=XmW~2{RY5<x
zxLm3@BZA-Bwhx*QxvBckqEl9LT;z_eHm1kag}=7*ksA|_G%bWy4IBJ)_*59K8W%|U
zLL+mkHI*2rZlOqum~Lwm^B*GTtIE<boKZ+>52l3{ks;xk^&E9HoHt^f=ZiWe7Tu9{
z2i*0C4QJcB=6zVI3x};ppf=-=Yzt_b`OvDWW%t<IRExruIy}`LOP`pZWIUW@HY*a;
zuhtKqE`quBJw$JBHNobFbKfE*FLQ^zY=!53T}L=GT+2B3s|h#Nb_ydX*~U#6sFU>h
z0U0Ic$&Kc=!HEN$j05)7IVUGF)j4g`-~As<*9|sl=ZQ)jr+1~r!*?WgW5JR~OlP{(
zpOW@h1%AgSFbu+qrG{MebM-xyJULmlTuD)eqQMQ9x5ak_)n(5E3jNS!eg}UpdM0?B
zw^lZ2vsi2^F&(dOd~IScpGKvi-HUtJu%g&6?9-Yz#`^;b1C_^g%R9=4VQtZsCvbwf
zH9cE+b4%qqTI-gM?(M2tt}jeEYjQfD5S(g-q0~pSqBhfNEK%-G=NWc~8nipu@8cJy
zZ*Zq&bV)m`6t%1@rs&RpaxqXO+jB*mr)??pYo>ltO6`l@D6<}K0vCts{KuCKcH255
zOPrx)oT}s~#pBe@nVc*AIk_+&R4nQ`a2Qi~T+A<4&sIa)>Y8R&xF3Qj)g9GbajB7$
zC^%FA4wJ1hDE8E1Q;Q^b9Tir|T=&HjY!?2<mytDE)~nss1yzeBMg946<;Rj6)zpj{
z=1AK@o}64EuB^@bUt3JCJpkxHy!^=$&_>iI@&ej*qnQ5y`@vDL!gVE+D|2xvC;Moe
zy``fa-e)}5;bZfp$H!ICD)~jV!{r6=h_=?d!@|bYA%}6`hhwy}#n(uUP39a{3@%o%
zLSkr{&EN(I_CQIgNO}3}-KMj{#b1BsqmwK1PUV`=)R$RVs+e}Jc9l{=k0vKcwPWeX
zRX1~U{YII<jlT{{E6>%q7Hc5@XS${-02+RIzA~f}2W$3E^L2*dwdd7zglAN>D|<cq
zcm1~ZVXh2P$w0_Di~I`lqiFN@=-`2dlWJ^0h?o!239Xdva0K1;bJ}z7@#%`r4l8n@
zsgAco5n_0TCtx7W7O&9nB0>=>XX^<^r=yzFv_3F=k(9FwtJ!J>HoLwu8?M2WhSOqf
zoy>spFhfHp<Ex!F-Z8=?_V0s-d8jM*bt1#o>U(gsljNqpLyq!ArK+@&`iyR90=+h)
z!$E6Di;-1owgXIi^`qpp#b{-?Xu<c9Okzv0CcV0GvYh7|`_s1yt_0-vr+g|JXDl_x
zao0w-=fwpj6-)J3N<%__Xc`Ge7R$M0WqIleg>t&(=ta~1L-W^aO2+Hyyz@KTl+bWE
zQTNJ`k)6$6^Acz<_xDa!XfEeCR<?Wj;rBWm4c99&H4c=gCBB>Uy4FKW3Xbb**_kfW
zxtsB9T10Rbr_jza+*@KzAx*Pj9z~hckIWBo&2hWV6%Hp?#!;K_rH%Mp_i6ROXt=dm
zoZO0lQ{?G0Yl)lpn?kt%@h3SenLtHB{!Ic2hr9L(&MkRs%0N*r&uG>^p)d!Qx}%s=
zi|%P|_~-k_D=8@Bxr+uZ3JYD&4BU+z<%WsV;{shxM>ltNcUE0GK}($(EjSvi!W!v#
z2^DXEd-sq($!7N$-Sk!h;e4s#45ntQ7yYFOQz=E0Nn`pRw<vj?_Iq<rGQ$KOcZ)Z3
zG7sC;#MmR10BmQ$4Hlg!OTtB#?#1@@@^weG=3=$?-Cp&Jm-!veGS1tM7LiE%N49g<
z1uxI@ap456*6K8;Ox7QRjwgH1mz~;4%e~te_;kp=(jai{OtlQE*7=1ob@xJ*^Qf@#
z8Dat`otjath_YlBLEPXG^c-Ejd|^;7NP4GJWgOvkx&c!|ckQ{Aq4`fug(v&MG-9tP
z%JQ?8&F|BB&1R%FBNAM0@9`VS)EIyH%a8ZNN@T2-DGDzyAGeL3NI}KIByUeoAMW;r
z<Fa&7t`_T#0_(cR?qE;WCJ}9vi(CC|Tw?4NVn&Sc40!0U%c=L*7;?%dHY*5zC4*?^
zjia+^#+40K+^X*>(a?tZtIa1%?o`oo_pj<2UJ_8IDv66!HOLy=45jt!jfHch{Cp8r
zn|=-W*w&@L61l-k4he2<PZlti(@rbKgJr4+8778A`Cct+1m+9Io&bP<ztTPmj%fP{
zvPb3Mo7{~`XMNFtu^TsDB=0F#t9JaZb~RAiZNpB{X^YPp>DJ|r_Sg56){e>yKo-~W
z_GqQ`s<J&Mrd!giI;rjLr4;FA?+DhTp<ujI<2y$en>w4#x{zF#NVRm!C}+#FeC?o;
zSGzlXtByzDShn%S60)a*Z6`OLCCB>Z=3(L7ncF7V*LbUPU`~q5ctRDTk~h?r-{z{h
z247h*&!hoO_0cBsz0ldodUHCc^uaabCfYS%ZOJw`IBorcdr8MCI0bpo!?R&aG_|;E
z!bdB+_g+yZ`pj$mslPScrD^chifj$)DW(T@hb9}7KR>W@y$id8u76|gi<hp3h0A?C
zJX1?4RA%i_KR36eP+V2&Hk+622-CV*W=P%gSe0|?z<PFXVadChMn3Q0SpJ=5MzOS_
zI?Y;xrU5qPMewwr(w&6`^EOc(4z^l<g?XvbMQ>c?C*|7;$({$N#YwB<(l_|5OL*}0
z$TH){pqtgRk?oCDjosP$@1Y<idBF#<5~R6Z1kS0X#~AVV3`rnTFxK5ecEZ;@!DIv;
zKAvvyC~G`?Z61_<DmbCD-xC{R`1xb5IU44B)cf71&kyzq`?S{x(aH}w3}IamDk3Ur
zR29|PUsXxpf0qC1t>y_IzHvJh&{C{BnCZSL+XsW)Q*AC{R28zfq?QX&=PH<g1;JBg
z<;;{Rf2zvG#f$}p>l>_DN|FW`Rnq1S&E+Vlh3gPCzj><1f2A1P7pg3amAZ@7!U^M%
ziYy6@N%FPU;n(f!ELQ6Yz4{a|YR#w$>gmzc8YB$)=`>)A+vC;ZzomCUp`xVODsX)K
zA15=jus8#Uc_P9pe>ow+wiS7EVH#4i;X3C1YW0wELRrq{#rc*GtbD8HB!wx8XrbA1
z@uKy6RU<)Srg6F{IvtM(?M6)$7DH*8#LSY}WMdjHm$n9y!p}s9QHD%G-hZpeqw~)f
zu9FYbW%LQcg+`MN0%Pc%7Dp7RpI_B;pXm+}(ivvoHkX!I#yVG(#e5wtCi8;?)TpEZ
z*Bi}58rrOigcLNG+sPA%ER<FmQwqZMmg4zziP{Zl{gEkPKF%%{6sR>m5d{DIC=fmB
zBjJ6AjC_v!eUph{`yyiP1{h%c#KZtTeowf*`o^gypj$xp2@;B6GUV`LWX0sG0>H&k
z3Q>e{fqrik!f@aEYaqgy>H36)*8vH5G`!5Q@4MNz@ZNUHUPa(OZZP)X9(@Q$@PZ@?
zv~$GYuK^|?`bHp>KjV}r$jHxpiU)pdeU5=eNXQ0IF1_9g{Jd6jKjs28KVkbn@(sZd
zt=z0olQ*(gR}q1;P|m*L3^H+Ipq+;hqxjBYyM9`N5)x<{Mf&jP+l)Y}7@EXEqcV($
z=;0y|M8JHD9LoSkskcPM5?~nojK`&}jP)(%y5=#=vr6Uh$|)MpE;?!i%7R8~TWvNw
zxMZC@khltR0pTFTABBpr-~}v^<uPkRjrGQIjin+XwJ>^l$PYpozBn=R$a8ccfKZ%(
zpK=(qoC-MzGJX~za#ybEbhil*<@M)GJK2|!-{?mH%GE=@K_4o?XX-;ne%##$`-QII
zXK5?AhPIOd7aZ1C%d@YN!{mXw^3w_Z;Ku90hl}G1p4nc5`2y(}o!(f%Q9z`^>?0n5
zY<M3$E2TB?t-L1hN-_SG6DTi0xByU3h=`AfKT3p8t0W6|@NsX994{aY4Ixa7?C?*n
zY&OHacNh(U7%{q_U<i|jS6W+@e7Fz=3%xGKr7aqjS)G|QQNg-ev%X+~Ikm~9gC#mr
zntEmKU-^d07kNbnK2Aym9yaI;=^iE!GgLpNbLdTM1tA)I7=f7%oB~`Dn6v?9Yc2nx
zT3+GLF0cEK@6Bs&Q^Vc8>p^bi+NaeU<J{xR3l+D0DZ8?=Oog8XMY;NgYN?HG#CG*t
z`Sf^2L_x!!%1UqF?5mWt#2g!l!4J*8N*oA<-23fY(TiK6-LEfH>68lo7)^SYn*8tB
zu=~;lS%fiBDs?<ZO<I(KH!y16kpx$AU&z2YRC9dHAR%5${JpaeMyTw}hvu#C&-Q5#
z>2SQe5{)0jz2$>IO9#a$?ojbchtI3*B6-AA+y|b_r+YRpFY5ZS6WT9k4o{_ww+|`6
z$7O*)QkvS<ZQgD1_GcTL1Z8LwAxs9|!l)y9?iP0LVZ4mdo#-%h{Bu@t*#je=oAqOH
zOIvy0*6wlIJ-(TPGXU%3n->m_b^2XQ^Ekmn)d5gOm6|Tjn?0I?opX{T=-bm$o12TN
zcWbOP4)i@CWz1fp)&w%QLq_O&8E%m>oQf|lClPG%9do_<j@MRt<s%AL{vi~=&jz&8
zW>m*Km)%gHI%}6adgWWm{zr+6naPgubNAY1#c*N*30cmUx5<k)-P$X@>&hged-*D~
z1dPdm$%_nEQ1wz2!Y@Ap+Y`&#F_HM0YYqYFaz_Ys;K*HGS2Xx_v4H5w^Jn?>vGnr$
zxueDOo%y6^<SV1&+=T<-{#&|6TV^ZUV}yv^xpUtZPTU|jhAKHCINXc#{PpWJnOfWX
zYG+HcY<!Hz`y0-qOVwmi2xROZ>wyoN_~O&<j{UA?pAZxv&9BVgrlYcYm_-pQOy-g=
z7zO(LaM77<ptPs7Lpdk*yJx2t(&I~s<2I9CK}~!_qLgCFZ*3RvS0DG`5x*rYI07fj
z&SMeTq;^BUm1B0FH?tP&Eu;2fnXjB&781Y$K_USPATNkWF}gTR49L0#_+P>Cp#*|*
zt5*1))t<Yw2jmGc2YbgJcik;!XB6zHZDFb&w#gLBsz2H|Zx?oHhH@IpMt_Q22+rxW
zx;JwvXEaCR(k$Til=E<-mvW)61?`$lqTmixg57dWM#M^e|BiO`2{x%ykLY^esRRBU
zomJ;EiAPx@KcxLRVZRam{Ryf_6ef4a=Kf`VD7)xWW4;2?r1aIR*P%=$@{vAX!PqiT
zI-`ERsYjt7iRd<PU<<{|udg{b&^qp&ah;v?V@w>m_6uY$u7+Gk3*L^^TH9W}i^31w
z;)$*m8=RJ!&Zb$YN<h{HE6O%R<@u7>K9@{g{-=%eCn{K%>gH2*{Kj(6;Rm*6|2y*K
zFyWW)p5F#{>Ho&7{f8_yDlJT2+Y#?(@XeHBNbpSY)EN>Ih};=C7#N~gpO3$VJW2S^
z!xR$nDCR##>`8qm3Bn95XSqIsbIdZ6e1P0%pi8FTrUl!nKseKy30UkKOl;dQsqxma
ziD`UNQE%)ywQt!j7M7J=2dGwp>=nK9un_?u4rji0uAQ_Ls4cyP?&hyr2WF>)%VfhH
zJr%W$?LhTh^V19hg_$!D$F3V91>&>#to}$7KS8~5f<Qt@hJ&O=7<EvUxIHSb{u^HH
zSfXik905iR?${t`m=R4aIXs)M8Jik(ZmNbm2_O>6GD%~eZ~?_nmje<e7=+)lL=cLn
z-vk;F8%z#LP@IS%@p9D=Jgr{iC4vO*!+*n*GE0;R-k+we4^}_JXW~w+#nc5lZ3l#(
zz$hYR!IuZta<ZW)(GlE*9U>>h&QTSbc9AfYyihO0;W~SW9|~**7z$w*F)WSTDHB!6
zP328mF*_Qme(^;@El=7Z7sFVARJETP51*9WuMm14YoSKawAT6%S0xyT?;2Pj+rYze
z2e$($dwY_KeA#bxpzx2hKE(nVjZm+?<AD9**E4cFd2wC=cn?_K#$N#xabnI6Bz;JP
zTNje6%;eQ)(N%nGcn=`aj7MQTv4$8fG$q1+rsPH30Drx7kjSQJ;M*y?SC~*intAL&
z09)qT?_@jR59H+0uDRU#yjyr%oMmWWL;lCD(Bb~RF=T89{~mGJUIQr3j9{v*rBU58
zUBX4--!*@*vU$D&re1U<BYBwj?p!*>gsZU&ZfkS=_e;Iu#8Vzd*Ln0DD$x09U7qZk
z8VM=$U|e<*8Rhu6K=1wBopJ!qmY&mA_!)Ra>RTY^Oh{JW(fMT4_mF5m0})!rR599C
zdjfJ60|7jC88qah<+3|yT;CpG-x0mFsMPHj9}ib{1t3vyhD&^n9GNLx)`)nO(g5Hz
z&zJ-1xmn39la-adz6J2H7P;gVvodh3%iY0P)oX5pS7NUjJxT@S^iV9siOsIh5SZmx
zSP~P&Pc|!OXo3;RnCd9et_18c-hEX<{@~RdFLL^Y2StmB@U2X|8Q#8FU*GtssYG79
zdcu)kiE_)O7a+NVc>|K%^W4ks?z1Uf-I)oMLZ=nqt4d_?WUjxG`TO@2V`a1YQa42s
zT<;;{?vsUtu(A00!7i`#){4CGIN#2)EadG8mt))oqMfPP;tF=zmkG{pW;SiYGo_C3
zNdL6CbJx|bxwcuTo8~R??5Jkh9&v=h9zzOVV#km_<MFqL7rg*7Ffl(y45!twFm#~L
z2-yO7TzMn)CpJATU$S}OHXau=C5VZWOwKn}^IClsiC!~HU33VYtxNqO1!<%GaZ6Pq
zkyeFhBCJ&Yg`Q8E!|>7KgqQ&5M?SUT2+&7B1_>=ptoiFX0p$anxIvDA7m5-rlJ%7%
z2?sGS<`8ja6uUtE$Ap%~8Z^@t$v2Q^i8=-AcAaavOG1xY^*vtZxt=*Nxnx4bM0G~m
zD(yy`00O(S`O^zB)`J^Qsg92HA~^tx0T%xf=uSw}#J+RIASQekAvSi_I(8mNHNE|7
z2WQW0QByl0dqB2!Yl~Sg<V-TvIMJwI)@rPdEo;d%f8Bnk1{mZ0Kr(xhg_`vBvw`D+
z$n>?$OW=$HQPW6-nixiqH|KKd6@y$MxOkq-!P49iGj`Z5VfKh+jp4S-X?`G0N=cA>
zYpiG7UgccvI7c1si)-M}{#rxrc>waQnM@H#Ya<ydOrC3-nUxyqBL_NU_>9TiY@dX^
zLFb>OU=~YeE*zQ+e25wz>3kea#jrkiw)s>?r`iq%EZE^_{}uq>=6+I4NN~0*N5=pw
zgG%4xx}2N<Bx3-$oJhbp4M4;G{PDa*3=U02E^})N2EA}}aK0ZaO$l2koZZO5!_3L*
zxa<Nb!U`B!#&gjsPfZ|begrOTmP(Q=JZy59^x542bQ};0qT52;=(w$bD+-&LCJK+8
zyj08NchGxdg;Vh8fyUO}iH*B&y=hjkphSBN8ggQ9B%MJnBZ74q{cJ8nhpFXcrl45;
z;tI5VGPpseq^f<L1&hU*tp&((v74``Yv`r#jb_2p$xE5Bwrcvc%!x*KnLBIVYFf`|
zW+#<G-uv}MPss+bu(IkeB%0tzGCNO1YZ6W8z^QCGHn4MY#9ZwjVyiD5Kd^IQXG5wc
z=67+_?)@$7Q8mFR*lbW0O)pgxtxU<VG$kVwWx<BHuCA_z#b)g7JL*~k5atKLV}_Bx
z-jIX;*~Kp&jKJD0z&_<`{Ot>~%ZyCDE<CR9$qk^{XR)slnYoGoftDi$|J-Sa#?<??
z<UsGC&@O4t`jZ8929+>A^mIi|KfU|uY^&m_#CZS#AMq<*6f*(u=D?$qP1VKhUCT)n
zu9u&Wal1yGOq9(rz9L%8lvx<@nOJBXRBa8aFpFS=RtY<RI+yE$stwocGo#*~cCM4A
zjy8H(?bzLf$^HSnZC2>b+U+<J<@cy{iicAlb29u?fdgD+b#-;(d7X1=`#CkB_cn@l
z41pqjji-y4m~iJ>4Wbt}Rc+eq*OUu}LQ9Gb=l01dQ3J?w^o-R~gfII;a|suh9hgW#
z%eclK^Lj)!Wch!)GvI{Kt-ma++<jMT5c7fEkdeK$q6?NCH<>=BDLCPS@H+SD{1d!w
z(QQe`1Y6RZhcZ9`ruZms13v=yi{mn$TH?w29r{z-#EgG{!)1i3hS_F%oUJ!c8orPA
zBBXVur2E-=m;$8C1JghOMbBn9vZzwdLnkM58WP_tGRjTeFG*o(pFYf8iT}ve6Ir?V
z6p>>LI(i>Jhqjr=S68a(qm;*|hd1|EVW12pK<ikzAxv2joyu_c0`(|VN7UsJXkaTH
z_ABjRczSM~5Tgxlv@ET60q;+vhwPL`5QZeg9-9hNB=R*a-n(R;EteXPyT`{0ExRSs
zKp^Dj3;xQ5w{h<y1`7f^<&)WIJYN5XJc!k)q(_ld+#KTglMKnEFc8v&=AX(iEFi9w
zlxC!%=tjro<aXf2!+D|YGJblXuok}U&zHl8TI)nf?ihg11!Q-5_y9U-;NlHc7F<!_
zN48bOI~NHO<3{>W>Sz8Cu+jzPWQPJ&Sh(7Ga81RM(Kir10E;Zgnrlb?yFxg*F*VR?
zB!(Fx`zeLDPxtcDEj8qM9f*9EQ*V0oCk)ov2t=)q80@h`<toNU8sMxDL6q{5u*~Xv
z#Aj+6>TXd6LWg_&bydhz^TAquvlvQDwO~0?6>O1L{+^Qmvjc0f+U7^os1{ir?l#9j
z_Kx4{Uf?3n*7CZY#Pg}fdAzGkJ<S}!90y_r5R$?I2u_c&z{$C#G_}FftYc0UP0OtR
z*4AbucEFh<vviicteX*5dOatsWSqxpYfR@FbRHQ1+YtVXQrs<wNTrylG)w}RG^m21
z=X4^k49W7(j^y+XE$M8%#0xsN|5Fm2DrP6iMs<X{2K0$_h_$|?j<&fHYU{Z|MrbNo
zl(eMqxXzfmByKA|W1`(p@4E`0npiiDSM8$1$wiO{A$s@gv*CN+LBj@RL$79|mx5hN
zkqI~%D83*EQLH9}&-x)gPJqnR<|FpjL*?ep?%H^AzXHF@Ht&V~@h8-KZ=%%<9lYj2
zN2iHp;>B&vXA)W{?XkW;VcEz!O61J6am=)ycK8Ale-v;6ySJ>BRoNMsXJP$Ta{_$s
z>rkkfIi`?XDHs(@G+tFK;T;+YhK|m0a+|Pvf|?eqx)7=mEcj@AK?`fo3a-kxL%=i^
zkr90INAV98ODkKSHOz_}DK(lW$gBFY_%y^}XH}ZDrV?y-9%)jFVaE=qCTm%f7oS{n
zwSem<i<_6dNMt0b?9=KGn9`#pCx*ZX$0LoC6n!PKl{+$$h}k?-roZhYAjgI`XXN3q
zdaKRJ0`0*%Ye<~d$uy`g$eLM-ljp2dhb@tZDjT@yw_(R`vi*&;BS5<%K)w#<i}5ie
zwO0t2*ztP11DLC3P7UZ%atK<p9!uuILj&b3A|dsjj91D7x-p>3ew~~^OzF+o5caq<
z0k79?hD*^=3Q92)9R9T8G}&_D$7`lIMHGoj2KxFUmu30;hr){$k)8ye3G~>uj`tH*
z?gd|J1v_B^i5!g%*k9q7n!=9kkbjZ-kd#ReRHv=?8f({_KdhP8OX7<6XJzi2_PG%=
z(c`&QvP!(F%%-y!Bw4h%)w1>@<hT-^80FRVA>N%@;}T`&MNVSK5+mMj?K$>$9Uq||
zPiiHThG^HBCq1`%Cpu|N=?ls-Y8oF<{f{{2qV3G(02@u^R|*|V9}NEC1n5*uzy63B
zIVy$G;ydeXdezmfu}%o;azg0z4wea_6`W&>@`Ag?06VP;nWPv|h4}Mq<pRujfEXse
z=k&w44I@$(jX*X3Aqveotj0Hr1ItB9Phpv_s#Bc)j;iM-)xw@IGuf<>BWKm3f(Rv4
z#fv#<dcFcTCBbpC&URqs@Z0Ug45}*NeU*+$6qZo1)dB{oWo9FZOqN}7$4IQdBkV{)
zoZ!e$-?6+JXZzr5TUXaKwc2z7ui@h5OZkcMe-=G6p?9fEM2EJ5UrBWzbKG2HVTa%D
zT^R|fl8($yr>}CA>M3H7#Rw~Xi7g^I8rpmc^4@Z>=`lVwZZ4cgHR}6k`J3UH*3r<|
zdUB4i&Ml{6J%A!V!mC#vSzeYx-iX28@bn#ZXHu9SHkOL?JRK^pOfDFrWhPUF=Tz`Z
z`r@PKIDzoaG?H5&r0d4nb0^JtlB-LDR%cLWnenJbJt?UE@dj3E8Hx(|sEk5gtoCqQ
z+|%G+a>k^j{@DovyIUf<Lyc8BO;oo;H}!r}f~P_Jn=j0@edRgHWxdpOjoZ+%z4r+N
z3`3ZDR>VJNHMv(W!S#x~0#wpv)2d-Ibl2`b8h2SHI?rA8w<d3DW$KMas>zu`RMMq%
zDt(@60ru$4OuqS7GF5NOP5;VMD+9NeJhBYT1j?OivZjQQtO!1qQfyIa<nE<p=x;K+
z$t!5WI`ehWDutUOwGW4tlpiwpA5C=Lybb_k+!_o~I!|gUWfMOME1f5-B2O^j+Al7n
zH-9wlBTrnWw+F_oOl9tq3v4@%sa&VXGBsRfF+>Hh2eyo1qjo1umR!3KG-=;5)GeH&
zjQ=ieuT}InRV8kVPCMu<XOvIMvvx|4P2I6i<7YIbpdu<PWo{2On4(fD89byrEQB{b
z047+w315bcdSBI>mTf6U(wZ$y7A&hwW~>&vPFP%>BHTKKsFf*86XD4xq(tcGSe-?P
zSi9{}h=wiMOC!6M2v@qeYo!g@8BD~D@&d|l!f*?j*_+L}&TZ*Xjb59UstQre6w@T?
zsSa3&$gB2kGxwK^Lqmr!x}+ty*MemYo?N>fT~o89sVX}bl@I;H+tW<jEaly^rm>sp
z<lZ6=hY25zO0&3x*^2k=y_QUoQk4VIDhB!-R>B<tgl|nZmMMeM{~)Mu5*DLMJ-L@|
zE5>Jq1-x{Y%tCP&B{k8jD!YFh`l;ijk=j?kv|DmnOC6gWk_8o80Arpz#bv?lnQ&5n
z=a7t}=g~2Y$$a+xkx>?$Ta&;P#?);hw<#R!c-4}UG-_wJHSKf2tBRr|ZT^k9s~5Tm
z?mvKX4aIf}CAC6Vjl-}mQt0%b!>WFjB#J3*#qHOj8<%PQs)CZ4j6Q?jxHz30x~#Yg
z<-1fm&mFj^_O5KLE)@cUJ10VG(;@OUz$=4l6W8IyU|RQIfVtq2bg{TI6|+aw5@j=;
zfi3K-oD}r+b5-Y@8~hCe8f8@}O6JDjG)Xif3<`nC{l8`bwa-xoN-7K%LrPN(4&%1Y
zQ)I(Ab^r7wB+9QXUR9!GvQLP2&?}{luSgWcxuywGkPF63k#j=jB@q9)mUW38l4>u8
zZ~abg#5)aI-eXgQ;r_nl7eG_t&mPd~r0>MOY^#cb{80Et;h+5Zuczn{_D<3tIIha~
zxldeq{NUsu%Ru!YdhviDfnb5Kf!KiTfOdg<LH+*k_B-zOq9?d;@6$^<miN&OFQs%`
zC`cagAWx`^7}0`(D@gt9_v}jr)30QR;a3b+kVYL0Hb9Oe?gk>3*M|^}2CokRuMgj<
zMuGUfJqFuhe|1sdhIB29RKTl8R}~QcF#BBqgpV-<`2aPVd(|!{Rx6}1N}f+hj8GqK
z&9vOUURm5k(G+Q-!dHnX3;_=pp@x9;;^%l8L-iy3Hj6jGUjPlH9QRanvEAF&3a;i&
z_D=6F!-sQn!sPU%y5^ZH!uOM(4+T_-F1_1gfeVC_Co2d2@McY;{!Fv;NPb=b`eapr
z(a669s>h5hDo+?Q`$sGgY~*?B_G^STxcW-McS8s%NcO<#dz5SzUWV?Vwv>rBZ3x$d
zJPG<^-=%B|9RvhBN8%+6W5fxF&0HX;9XMX3mlOaFV;6=agdV2nOXGWUP!c){q&(fU
z6}?Ck-rZXY6+_P803>yw1t(T%Q42~*51Lm>si;q8h2$hwb_|No=;SXKW;qHYvQGq8
z5_BE*7|~+50fh9<2Qnxi6dy+b4GqSPl%(8<D@;PEr!E0~1NKTjn(LDf=LS#_I$`lH
z?Su=R4MX5_J$X4~^H~tV<}E#%nZP{UN(G}{c-K0&vLs57A>eQQm2MIct0Qg>4f>i8
z8fK--+1h$X`E9Nq8q{2E*dZdq!^s&O%a@mrZTYR1W;N|JMB-$!;b~?AyK5m#d|GA@
z^ua#x;{s>1019jq2b1NUqMD$?sgkKiPZe_;3+vIvp@|bj)7tN3&>gXE0Dq=MMd!28
zPoe^z$oPtc<q`NE#Jr{mA-IkpU4=d48(LulqX+ES2DieOb_`>>+OVZ3(~ZN9tLHai
zmFzj}y!o8mQVh%aXG5h^Z)9STBacqg>xw<YUV1sjXJP*$ga))<tdi~lvVZ-7M3Ou~
zDI!V!n1^8v_9&s7g}Cv967ZE(Dc~Qzbb7d+>?pH3WUb@~G<Xi3qGSJ&TagKY)s_iR
zaKsl23MV2C%#<M$=hH%3(M}l&uN2Tfw$mAn4}^-%pflVyA=_wyu^Im($QXH+2u;6C
zt7Myfw*qpBBNL#}pf@oaa$p51cd||D$9;ZtX4umzB_#t}KHb{~$^ts3x9cBmG#AIs
zLd{aWG~6+ZgP@p&2Qya=j5D{y9t<CH+*i`)pXTGEA)9Rg75(uk+qPn5Gpd1Ze}|vm
z?GFdE=^O7n_lUBv;;;oQ8Zq_zAhDgSqTeo1_3f<=N_srPFoA~2>&IIg(H0RCpo^i%
znbR$w>1*Bs5Dc5s_n%?iVFP=enak0|Nsl=&D=dJK>}bgBE2C=H_{FGsg=w7gS;Tq1
z(y_>nc8*h4^MNOtGBbnc1EN;t^};7o)m^hAEb`cPfy2T@g8uPEh*72uGhxboX7Ru?
zmU)KYE??d*$=q`R^^)<7mFigsPU(;Evo;?-0D?FWKr{3B1JSX~>NA73Kq;)#&_)bn
zXce&>nO5V12%sDxvylAg!KPZ_d;b~>z#?6)YK`&XED$gnVNZjwKm(?l3$f-g`TX+*
z<@`Bn&4Ty>_7PyBNL{5k(Ac;xpc)C*x}%l$%Ai26nbQmobf{(#E%6`*8WZ*UEN4th
zL8Ag836%iB_{i~bK=<~WVea2#S!bl~Q*^uW{?D~Qar|%iC@64Kf9U3XSzbf2jY1l3
z6A8J0_TKva5g(QAz3FO(LG(?1pneG7`{ZQl1%s5l!j*u#UOd}?lXxH?&p=POL!eAA
zKRU<+B2%<=W#ueFM1fJkpx{5{b{uu9Sa?Nu5rX^&0RZ$`(Ca^eqiZ~JS0%%RN^y(8
zDvNkQ!0)E9a~Ym2z3)FN%&k>^DD$|){()05KIJ&VAf>ZqF%0Yr<l&TQ&qy#|a7`uw
z9)h-&B}Zq}(5-0Zf+YO4FwZLR2d%F@ZQM2>6sxi|xws3*hLhJL%zA<~Hhz@P14(j1
zB-zlNQDC6Q1^7vL(H>J1B3mtZzxXLf--p%DWC~r>S9QT2ytxnBSG<X6G9duvqd=^a
zf;@^OzzZw<ulSgbl_Rq4Lp+g5V)<mzS<@XVso11#fxmt;h0Vl$yR&$8ypd5|!bba*
z5x!?prD0kSoknt|3MU@>7ek1S8*ox+1Mv>*yUskWrPBC@O0=5VDTQ$gZ1VPmxR~0R
z;tqH)ZSi&0H|sc6Y_}G9aR_~~7pf44wFn@7uX%CrNWa)4C6`b72Ty0LBWD_I1Xr`8
zqociA2R?_gAxq=c<bX^(+_;Ekbg1Ir)6lhJnXBr*(_n9>4HDI`w|?|XuWZXQP7DGY
zJ2#_$a!Mj>uxYE1GkVCHsN~^;9t_RU%LpcXEn3a}E<%z^Ae^Dm!BR)cWRNU~fw=3&
zRK8B3aJiOexIF7yQACe6CB&SlJhnuYsPx1UHJ&i1t{v3%S!Ec%l9#C%5|1!Kc{v(d
zAyj^}wRb)jPMnX=GCh$(byS5%%g5(e_IUz0%iE$5&$8tUfOak!c5w1ya!;SeV}^|$
z|LYnnjG@B*itp<#S&Th5tGlREcG6j;I%f_qU|C%5OgWdlO=ql!qcVD;mqZ!dWViPS
z*&Qa&uE~?u{tn?Z$)6!1_&0wPM|p%HkE;QDO#w1vTKgK>6=bBiTzUn=F5h@3xUZd6
z+}iJ&D~b<{N!{)3nmybIl7OE~bwyt;@+i6>+n@{e1)y=_A8Z9TD>z2LIZLFBEzbZ5
z<y#}o{YCp5x2sHEMu0YQ4k3DaBeV9=e89tBqBU-*$#SJRPaVV(l}@r>x{~Dj<j~*k
z+2kb(xxDbs^<n^>sd&Cbq!9PS_T!Dcx?Dk6DkfDoE*;0d%M*gh2`xvXkg#A;;uP|I
zGeDSnjmD%tDPQLEeTJIzUc1858a~41R6Qkr9&}!^6s7i9&VIG?5Lm^Gg2-A)K%y8y
zWmvvH0#fp)LCw8RTlbLjo;M?o-z6$^F_g9P4zzrP4z+v|Am7=d@Sq4iX=p7q5<Nu6
z{1=y1LC&R}60hn-{^SG?_S-iWv|u6E>1HN(0E!qzuNHS;G|HYlRl(fOnJO)Ts2Au}
z{xuf*nG5dy7~>lZ;2Z}9j|IPJnY&|1JXGyo%>M=<dp0B6VhcEsVRhlf6Wmv(X#c2R
z<4nFUPw|es9xA&TfJ&A?ye!`KGSejAHQ_*8ypb$bNzo^D2B~N>TfUBN!BA=wIMdX&
zYbct(K%LoceQZ*utUg@HzSY8Rm1#6F8jNbSTNB2<iY)6GYrgo`0=~j>9F!YgeYJeG
z6}`GrzG2%o-z3!e+2p&@&1F=h%X#Nnv!ogU^DRG)^6k|=T$9s2|4OScvXo?_`p?UH
z$H!*C@O1eym(t)l8|{H7-FA3N=`NG-*2)EKc$0FcKgRrQie`hwTr-hNw?W)oP@`Qn
z^$(U*)p5U5fBM)!)`_TQ3RvFw>!}Pq(U9$4i;RV>H_G%tM8jS6_(c+md)1<4GindE
z%CKd8dZK;%@U$FZ(?&bo-c+$_hcV~zo0h~xS?M3P#%!(1f@G6Qj0dK=^(DiK_A49X
zd5zn)R{dO7rnBI`iJ|P%F)h^4{K<FQzmXDlO1Rt>JWs1#u*YYHJE*GVl#d(ar>tmv
z*#1SW5d9@x2#(Im6Si#e!t2SDsBsy0ow{#LPL=;HK$!mDNR<leX_;N4-rRee9kDzu
z!~nKy=Bvs#CF3J(V_6_$38*3EECm3gT5W?Qxk-29wblX*NNpIzmL`dvn<w}}cwT1f
zgXc6i#o52}Bv$ao2}XfZIF<vG7g3SqSGfl$DEC~@sU_70(Uk2kPyG21zvZ<U^ENPf
zCiGcaCQ3#yVfze{<29l&82e3ZBtxWHdc-|fU4L*xr*>?XowJpyHk%Q)1(+ioMC_>S
zu`5ioijWEvrejrUCxHo@_Hc<7Rm}{J8oWuP<-a?b7d_0|UJGfQzk4_LsJG+Khauli
zs`(F-vN(BVGnM=s9l>waEt(Nov~6{yw6>hpIhqs$AK8Ab>BaTK{-L;^rqMo@=ESr&
z@2~|ur3x?Af9Ctm;9`ev6WWj1GMt0O(4Yhwb=(~&pR=HZ@XeuOq<YSNjKKIo5vo;P
zRrzO;>8o^n-~GU_WRQal2#dF_(0l#A%`lm7k$HUu_&5^BOJeE|-;>X;Qm=d5-5^yO
z0~84U0;Le~R>C+Z1wZwQLkNAX5bz4nKp_ka2Js5YQ@M;X)fQIhZp4d1Q-DYQim$K@
zYRR6E+qt|HN{N;N_XkPf_C+@JACxC=r5;s4sziah^cLaCmXgAvHJ~p;v6#UpUE1nw
z7q(<ShGI*AjJT9q@Cr7k-}0X)pEFV^Qt!a^F$UCrtV4*XfzF;Qu{bWlg-0wgQQ0*a
zk101JSrk%>%{Ec1Yk5XiSg{=rxc2?#MPHY_w6!c=(U0`qKhlVxmSPec_~B<vS@cQ#
zpiz7R|EW~8ISS7i=~6#>$#b*?6!K(cc^A+{&8sT_UjRCU=G^5%deF_^O)dZj`le3-
z)EZpF{%-Un@8s8@yde9P{||+2GL0}Gj9{WUUPv<bCdjYU3tR#}0f@>D%ko%7BDaBb
zO_*G44d>%zBIgY9TXxGV0ysc}5k$?m-nVg!l48i{r{l*L+#QyWw|im}3;rlr7+8jJ
z2tF)`mDV8lC2L)B!Z}{xZwUZ-N^j5*T1_bmo}-zJLLGm$G;ucQ0JxEyJQQ_1fi=TU
zz=*!T7Wa5?%uT&18#+imMy~vO58%+XM(rf#d)Pa+!~GG++=(bLI9Vq!yJ2Z9oYL!?
zX+>L`C3R1@3_~g|pSQ5iCA23oSPW~DAW#n#sb-;`aiIQ(SWf-aU(RcT{w|w9j$*=<
z%Vueb$zjl>zsaF;tZW3M_UHRf%sZ4iyOuIvjbd<8E}hIquv&qu9@|KPU#~1gAI3~h
zML69*C<0uNfIhA;v#eVjK$i-NNF6rn>j6WsD_C9SKO4`7iuBF$CRg-uCkwkQ^>{~e
z9sx2oY-#YJ5f9Hy!QlZXQ`D5s(hRj#h$?-R_#Qov1F3GGB(Ds-!=i*D1nan8I&kee
zbL0N}*H!X6{)3nA!MBLV=)3^W^M~V7HBabUWkHgj;VE<#w{Wa38;~iiukLf_ol~Q3
zZd<+K_k((ONci82_eJ*Lr02O<_x5J?K*391p&cf+CDpMetUj`<!y&cX-irvT*K_k#
zfFa5dede|7KrVOihjzB(GJQu6U;Xp-VG<WFOb%q_^ascL$p`bLay$9W7yDOe@xQu2
z#EE~u#{TE9tjBlO(>Fmaf&MYvC^eGZ@VA3FNr-=po*X&SFE`vl&VL@di3A@XfKnk_
zQQ-@tJix89GHoB6xq;rKi9RLqH|yBZ>V%p62XY@G3i7OGLYMNb#<t}+LHsMi=|3^x
zf2(?dC#vUGkLs25Cjk5rq4}0Tu+kBwQbktn9`9G2H~1?STrK`BG3RRV|H<lqd1L?o
z<M{u{1U`r^w-*3DKu}og2aj*UH|gich>Qs$xRRU8cjVt6up6Ks4|LjtD6WPGMbeuQ
z&lyY6`G|ZC<JZUv1~{9fh93OWG7F<8Lomt}r}IlM1NJk3==TG02?P&2O@)U{r6K|m
z3iT%dqJ-`31;w1<gAn9T`Mf85r_jyp<)NBz1vUy*Uec*pQVwOSXyoA^uc$pb_%)gc
z;QTFQJ34ytpV2_@F(N~>utN80*(_=s0YGk8pzwg*-lPCbkicGSNDrGp{6M`u9q_+)
zJp5)DJ(th8XwVS)ku7<CkEnp-<G#9G;qgBp5C(4`;$nn)yMKDc!At4+(o~=jp&;O?
z!QfW>KaC&(lwTHr{4_JnfJop;Oimz#UUFbh|GqE<1^B&>eRxvnGB7*h{%pQoQ}(z%
zKRv)7K{Ylb?9stc{<vOL5IzX7D8DG+LBFa}H%u`?l3g(gflX;aH$WZ*|3qr4o)i2m
z6L_89IWFZD9KSr0o@)?PzLSACj2vAYIqqy8E-Y98rXM@dugfm@$)y{cVlbsbPt9@X
zi|>t>?pO1;xin2lvXGw$ln9sr5Z=Ned)!f%l*3QXOVm$2UiXJr+S$cO$a{jB!|9_N
z_q6S@K%h_*fY3=aXpoMHP0Ad;-#7Kw9B}D}SCx+FXQk?+iz)ZXq*wXDe){2GJ-}V)
zKJJ(=FVGrP2(kjAqT<wUPY#g)>=aA_SdPQIyrBbIk$g!UNh%pI=NMKjBzNUUiyt*h
zg8xKDi)W*AxwyZ?k>s#kRVI!F75fOMG=w+zMR$z%UUhmEvbRewZUEXOu#hE<FZRk8
ze*&`Bec>kto8@+Q_9KX;i$J6$=87UqXF9oN9+RxtOsV8L1W$l3Ada)-!HES$8<b8I
zMxCMhDIby*!mr1?-Dr9X_eO??IspdmUjssd^yFeV$0T5aP2B<cJ@W~{jkps+=c><c
zFTne{LC}5U#1)nl0d~S8u7toF{}SFhPZ8?E?XAL?^gGKs1qecu{-Qlm`vZm-%pqM8
zvYY#w1n#EbYddJMBj9x4=|FpZed*A55cRa~3TJtvn_r7679;VlIVC{Bjn`L(2f2&!
zl`Y4<8Z;Kz>=I&A{%z37U`o?2_?6p)JklRK*~Qww?hk{8@07%r7^&h#Q80~IUs0p`
zynt4(pDV|fI?=%>MfCO;d!h<3NNJw_J8zu(RX?qC4LmABT46aK1y+D({FZsasjRt_
z(t5Uy+4flcEq7&JaCbTY)qRl!DSq_r_>-fyY+Ej<qtE-)*b8rxUcO`Z7)-NAD#}`i
z7z~w<OeoBW*W>^h#f$?3g9?dN+ILhO1wYBFm2vAtPmp6Guw^I=rI{tjtj3=H2Y7(7
z5;A2<Io>y(P3A2h>@_dTGlDpdkC9uHA1OS~WGy9k`_|dh8UFa)=XnRxLpqk5aJxRd
zuT(WrK-U$EeDxHw6ORY0&}5n>XC$Wpau&BXg%D{qMRGTz1n!ImOgPBP0-^)>9ywGR
z{%xP&I+j`*Wd2}CP!~RmmY)`<_V4SwJ!_gje>_A8yb%9xh+!YlfZC*!V%GuE(LYO#
z<tAk%ArT<Y7Ew#!YEeqAIK=mIQMQlRgzhJ}$Fv4R9FI>N5662VThzC=+!?@pL>6Dw
zUC?XOJn2lh%7l#JuRGM6#2v;|)txiRXh)aM+SI>PQ`+;o@b15$>vUONnrNfs?cFHn
zcEb16Yq}_w+jC~YSzQ&jUi1Jv2s;Qrh@BrqKZbBZuvoTaa=_ZLin(}Rp0Y7GX^o|z
z<#|?^rz?K6E=AYbmo70mydS)h&`I3#IBEO-+kU%%B*2`J+JGbtJ)Bq^F$E=qDZB*L
zm@vRZCB%Z7U%sk;l9&)h0tEwD)(cEw(B0<BhkXPT@{M2>Q5-tPmfbBg?)Z6d|Cdlz
z;*{|BhWc4Fe!%;VnCNoT=59vAmfJ{QxWpnz_DmQom?00}e#R=QY+4ilLzqsL1o2;I
zMFk#e03v>Z0Q~(u!)m8L8KNW<)@u5s<S>2u&F3}hngUg{09bF(0E_Q+9UDWs!Cg(p
z%NGou@Lh2xug1Y&r;y{5Qdg%k-+Kcg!c`?$rMV8a<+V_YO6DAb>#H4d?7I>zmyF}*
z05lg3Up|m3N=E|uM5{ApmGCcMM2I6=C`d6!{IfK@C?f4vkR@SgL?oNzW)g*3f{+fb
zY)EX7-bMuwz(|^gL+r#vt7HP8t!hpG8F`=lnlD%!C?7?}Xt3bsuko#;F67_4VlROS
z1093>44n8Tpy8x9EM6gkXFjr}woPudiG+G?+#JPL>o|2Nb9*F`T>+=<rC!ypr3Fjc
z_I6F<N*fbPd6gGSjU(%_COsGp3rpK5;=06bXlnQ%osh&+yx>O!?a^Yk#d?IA?MqhW
z-hFK0JGL5{=(nO)>5G=*7a-rfohc*kd{WbuNek077ih4Nv&D2-+tgR@$IdhN1!pgK
zy~oe;jYQ%k5g7?pK(*SjBV;Sfu#bQD84<G*&{r4@Xv=p=ZQmnexG6$hj*Vu1Gi=T?
z3P4fSWV1mXG@s17ePyVZi3{*N7IL_?+^*+8Y36QR#YFmHj2J4+cj4LsHn_pTdq=%_
z#96!1yy?j@nst*4zrtc>*aI<w%H8b#*rj5_CE{A6Q#rel6O-E3M)WViWw7pwz=zKS
zD5>wULT-Bc(pKfXBidOhD|NK5E`)Y~<<}l)+zQhQ9<c)ZM!tcfYNy83Bq6JKXv$u+
z<gFJxs+J2V;#`I!=3S_g9!q{2PU#A#%o>^NHY3GQdR;K>r~YauYSdzY3RcUUW+AEm
z@4}EDH-+o1ZFZ#NhNp?%Tg=O{{muwyL&ZqPTkL=z_aiB)IR6>TpUDQJw=nM2hYC+F
zh_it_5Vh8dbKpk7_dF+%peOen5evKu2$Of+gb9rs5Kh_=LUe!I8@rmcmutnAjs5{k
zxN|#TV*0bpHmLkclaO7i^_UK#>X^0mniPvaje3@KK`+_YQ>>Aa(PWE29;R5G+YsV-
zww3W`W)}zUIj(o>(Z-X2OQTwBkxq&E7%VKqfi}A$DbEH4`&u(20ViWqMr>&$_UQ%!
zpQ%HAlK>Wn9t$glQsg0m)IC!uVS=poAG>MLXboo@&KJ6hhQU2QK*=qv7xXdUzIPV`
zzQB?h((i^1?Y*IAc22+b{J;yf&wQG2DFodObss{B&8q|y1GoR#)=>XeBB4fmB<IZ0
zuB}_-;!-JU&lvv4CaQOXQAp9t2b#Sb<05nFOH^B=qs0n@`-^zmD@Z^bN}QehvG3Nb
z&A>VlKSBHXw9Y?EODZHCf4Bi0Cndu_Z<T-6P`s9{9|cuIBCQ+VYEU++KeaeSU#pM%
z@7LBl<BmD5nN3Ka`sBzG<wOW80v;!|h=|7vJ63lf<N|Z_7EIs2kUbH|(BWhF;}gaw
z15PWO56sJ1$JLQd;6EYolOWZmo*RjCJ2?+poN$I#MqP4i7<k04eNJpgtH}#Y<2M~<
zZL3n>K%^|LO-7F6+C%lXZxFVIc<LegepbuR$7nT#fcz|~lV*PH_^siox@&u0q38z(
zAMGpq<d8)7wTlL}{8pUI^H$TcH+L*)iX4o*{5vSkzSGF)z`k~M?04Ysb5_jcWsVhf
z=e{;e)(}|;SEFq3c)gcjx2$0T9z8qmPx?vJGJ`aPoQBAP)WY(|f)efT(kObSM{CGz
zPYfFg4M$@)b|PK(HZfzr%l5`eCufFJ&Pev{7K9W0!y8ckE7)aeZZ6nEqgNJ2&uwT$
zB)yTkZiux~>3d)m5O2>5?48KU>W{Qxh{CY{0$D(&zce%}7OQ0P;V7{F<Uz|r^+}5i
z>#`$92C_sx%n-g91mZ|TG7Rw1j^oLR!!Q7RpKO{FY<C}@BT5^CWQ~JRdLz)|*lMfA
z>5RA+dnu-f=*3Xd`5FtAKLwFd4Bt%3N-b1aW^Mcy+O{9s32IjOYo<N@GYSQ3yFL8#
zeD&(nE?rUJXaoijg9I*OR18ZQnZg$#2#0@(ha0PLtmB^RFVQhaNa$dS`dzk-nC7m-
zG4x!`1ATh?daj>iL<)ON&z>ng_pMz^lSJMx5c;8~BV-*Bv)PE)ghmVejJCsc_8tby
zAu??=_g#n3Fj%x_n4WxRsqbE6uKdv3Z6@r^dL+jPn8EZnPW5EbBRRv-3}Hc|jx(;S
zMElY2)Z;t%n&xZG{>RxGkIwy6u*D=^PYF$&XhV-Jv!=TJA6vH66;z4Cj9l@jgCM14
zKop0}g#U}i2W&pawg76?B}lV?sdbeCe$knLAGIW%Fj_TZZbzwqG`6pIvgM-H?6YVa
zlZ`Ids6pVdNG4V+01$SZp<{UNzc1C`c<RMD%8Z@mRAC_igE<hi7-|$o6;v?xyrEI(
zyX_-^HRFT0#yleFZJSQ@&%alF%SRRS%E#-@-}GAVU3GiD_g1>pZC&|E)8le=T-LGO
zZprfc?q6A@rEOz(-!aPBhum&8RczR&b4q(#TE97*$4^!|ELjU&#z&3fYYL-0-*Hr)
z`R7=S8jVeE_1639x74{-mo<)}v_34aM!09gE9+S2EMyNO>yiL0ks^Uc)CyRFhxz^B
zLIEWFzCFNsKcG>-;&Uumus|pdU_*c%K%oqqP7qYKIcO#~GN(JDT^E24T9`HnMNJBg
zjs=!jL7<n)uD)u%D($Y3g?v?A(FiLXb#Qi)Poxq7hDikk@g<@@Bmttz1fmNDDhI+S
zExy_mq=Irp1*c4bL@<y<kg4W``xeZBY(OFs1|X?uu@;z(5CA-*1vm$)hfBXba@($D
z941XqMjP8$3NwUL)Dd=Ri=J%!#;pwR*b{g|CfM3PIzu6%CokGAKXi08(xTRldDXh*
zrLU~;u;W{(BLQSl2WN2SI5f~a88IE5S*>Fw;Bo^>WM~_$Geq}eP?-G*I%dIH8^Vi0
zDvkv)DPU@0)VHGIS3#F@_OhQ>u5#PxZp<BUY4Mp6*F#}g5k9)}GkRUwx(Y^cMqKJV
z4?InxZd=ja&I)m^hEH=L+snVBx_fFdfV!cau^Vu{kvoe--0MlGkyQ+=G>CZ`n^`9V
zU0!cCt>-Uj^!jEYTH)xEFqd-z9A&Lz!yy}DQN+;CKADiv#V#Q?sKM5&dknt39FCj{
zgQW_WeLV@;e2KX1b`tY4Lp}y}xhAj%#@OW3lT_U2GoG`LIo|rsXO=rbW7HNJ+7RN0
z8W{9PP^fO9oe(bjMYv^qX3XTt-@oOp0gL+IqrCB&=3HfXEf?&ImI-RO-iP!zW`%KZ
zZZT!1f;=0BA|Kl}wN`XJ@KG8Y5X`ub4D&Nr>H6Diy-vZv*t|OM=)s}6$AQM!T@}PW
z<={QW4;XakR=kOwkkb3>5Z;0FiXe&^`?F4rgpC*(dX~8wh%(Kl;zhDIAJxSahIW+8
zp}6^cwxPWh)Lylo_}y<D%0@>`;zL84IYUcBq&F|N;HYahBb&tJampq6SemnW;mopo
zOC%7601yEA!~_4w{+1t(ED-;)pVY`@ky%0_HDBWYx6S@9@%Fi?-L-l@w}1O!ulCgX
zHMQ0uz=|UxpSd7uYf6%9VtKCS-KP8=bR|+&qIsuUlGMW%(TdVVv_)u0NtR9Z%b`(!
z4BU<8ZZZTDS7uM2%I&6Bp@k44Rps5c`z5+;8We&tMT{oWV5F#!kRs4Bwy(kT_2=MT
zd7&i40Bf9pfIGM#H>wtEZU36pw)}0@|GL-#(1GVI1Y(lKCMIl{Q(G32s6wQ!)0&MD
zvM?g7$x5bdmMwKQrfRt+BM1zWSdwLuA|^lvl)c>8O;Z20dc55zvo(tvDnmiB8Y0Y#
zCEM4YSY`^KqzJN6jU>YwjTw=(c{3|qq=*bgjSv$k!59o!iegonqQw+w(Y7d!NEQ+q
zQKJTmq9oSarpdTf|M7B@WQ!rZn?<tjq`;OkVZH9xQvriw2)3EBV{5BTwXeZE{-xAn
zVHzW03vX|4FBxP?fG;xJuq}&ZF^z((T1yr&s_AWV#WFTDkx@mB2}Bx#ODbRaEqdzm
zl4Aq{MJQ2fDBIRn=EYpK!x2<OR8b}@RxHriw&k}H$xzKqHc((0GL)2W8+9@>Cel(C
z@v7-rGcApbS|d~ujQ~j*GX%6_MY}exNrr-BCP^6}NntA+WV~9dgb}xsbfDTIO$ECx
z%8kx!MlFpB1c5-5kpz=uOs1=%TKMyfmP!*ANt8*V&{3Hfl)?xB1t4*k{reCyDjkwa
z1w#-T!Lhyba)mL{+oeT}CbAL>w{oK;qXD6&NUqJPn%xs61tkpDSdk`-MI@NS%SMYD
zB8|CnFlRV|BCyFeHX@@L3Y1Kkq$0i7EMW?~%+0Hjl8G`=BTQQ*0f8VIYg*}ROxlZC
zEX!3hY|6&AS!P>IjkSNNtI08?7^7H>%|?R8iy91;Wd>7d+A(N@SV)lD22Fz*kdY?B
zVl-Hi2?-R9gB2AqND7FfMj1g*UAbb&P>N$njG9{{$Y3Rmn4+}JnM|+*h(bmr(qmvG
zF%}{ukW82{L|DlQMG#VBWU;Y?qZR^9f+3nnD2PgAZ4hG-3n-#MvSUS!G6_jA8YGz@
zrBDQsjBOxMB_#+6MlYFjA`H>6NKp{Y1V$`TjikWD#Dp438DS`dCM<-8V<bfc7}x_^
z116INDI^qAD9nt^Hd8GThFGx@X_(N6lx-R^CW4u>D+UN<-@n?tCe>)MX0(<@mPha{
zSL)mM>-n``%u9a)tEy6!DO8z}36#s_e^>R_ujk!gAG+W9iXX#MmzIi$EB*Uc_;Nxd
zVFnP8<4ZvVlA={@WY3ZA`YTv&uj$Jy)*DvRFoIu(yDDwhQAt)=r<B)KFa*7xu0>H|
z;PT7m|6<D5&sJ2-6$KRH3`T|eVf1}Aw)t5m(vn(BTBd4BlSY$PQvAN7f4%$Ljg5^X
z<pCiIa73*<OPGH%d2bVnr9yP`hllnY>=Z#cbzYI{<f~-4K~V}W@5{%@XX=6Z=UnuM
zKzPWYr}J<BC*ty#s;G$HU*xX&ZP}+W{{<)c2i6b-O~V5OED-!vGMgXCLe(=M!=b-+
z{;#u#m%5^$Rq7OBdHDx>kvj5wgo?CSV(adAR5B4mESVZigg$M2erx(16Tgq2III|t
zK5TUH4i@|MCn}~Z1Y|yvS6Ua0x&C9y?~~>a$c!`|jlCo#F{Y5X1lgE26B3C^r4T}f
z2$N8?)IOZVnBYoT|H6|RnJmDP!XwZg0mCZ^SWk+1h9KXJP)7VQk=ihlARuuuKQs9w
z#|iy79SHP6C?IKJceDXOhNh0(gEvRayMxul!OS!w1R{1ClB|7&0m8~s4i4cy&zo&Z
zt{L3}GM{E%MaMUI*b3l*y!AuXsksYX_<!fgE%V=x_WS+{^=Gf*?({)X_jd=jXYEzE
zo2$;SsquK$v2VtVtgZ3cJgsVkkc#Fpo9*fN(>mq}R*Y3VMvanHV|gbO)4OR@IbtyL
zdnn#&_RGZLsa0jxVP-RUy`u!p&5@klV;8YE<LgfML*&jj`7*~f{R~rxW=sr!006Dd
z9Jdg_kcg*!8IpW_n18hNVBhrle#>obw)_-V@j)sf=~9!3+ra%j{z^M^m)`O27sKxJ
zgbzOExbvWiHBmdu*gEq9&n)q}ANhn_IL%f^sTm|Y@&aXsPAe{0Sr0ESN28y&)ux#D
zXjjd+1MO80{1t_~ZU|<Ksz6eBj2~Rq660sE5%G^jGzCPot!3-SFr)1X6EGKZx3k@o
z5B!RDKct5@o)5y#A_v$2l*L48KthK>d#53lm3COClrM=7^nqY(nrNwSLAj~pewF3E
zP8c602%gN+qfMW2Pqc~FDc+<0t0#T`01%GlA!AXN{_6z6LOm9!S}O@v&-Y$~eLcB(
z^QMs-5zdLrW!k4H0z7c-f<LH$W^A_5h%rQELXG@PLbyd(cT|31`hJ=%V$Gy9CLsZ1
z1jT_Nj$}2ELZdSq#ElBljhI)o?9I<qdzptTDb%T|oELt)QVU~RX=bQ_{4D{1R08M<
zqKY6WYZ8HUViekm8pjcwTYJptP=b`C70^b-Q9JcD|M&Vrv7b5$#2-a|+yz6N4%?!7
zCw$D!lKKhMDnc48Bek_IkmiEA*d+Okz*GRc`tlz5a$?bRRl|6YYnl^8=&%XOLNrHm
zxOr9iR6M4ExP>ZhAC>G{-&`l}L;md_8x#th?)ws+##)Ofmi>oz?8l<+u4S2Dq&IFi
z4r2(&<v9?@OCG}dpT_4pm$R9*SZbceMUs)1)FNl$fxkaz=+TB9Cfw@PrSHqPUt}H1
zfRG>o`BMY;LG=VPem`Ou?B34<?1g{dDO9Fv$@$D@XtMn0(lLRAmBjP$JU2W5zi3@}
z!e;>eo`4L+Na_Y?XlaZ-z&#iYFU3w_3lTrVz-=*}>_*;xtDZQ@xrb@gzdE;FKpj;*
z>6-iPj()|pUARp4-6Gh~&Mu+-F<~7tM)Be*t0_lCl2wH+M+=$=c|=hv<5>p9{G2-Z
zV;xNKHc?=ugs>6Kh|6O|67ISlO_K*t+&j0S<CX*I+E57yQ1C<Zd}~+>Z36DP2Y|QQ
z^+AMm$}BLILNJh+_v_8g9r^DB60?eqvXN?PH9@P@9I)(?A|hwJS+fiyF@&IrKvHeW
zBpz5ogp>xY3A{$=0N8+Q4)9o`*nJ-0I{L4<YrlTAQoI_zJC6g8m4M;UqR3tb?oRda
zJpgksWRenikC)I_um{0aB5o+HrUV;-EyN!)nPHvgq>W5MrblnQY)0(abw8`KR>1xk
zmm?F{p^%l&vl>w#nG`ejEC;na#JrslTMEd3z}z`B(@t<-`vXDnd?8)pG{CLug9gzN
z3hQ;&mSd%Fjuh1Uo06KR#Kpz2(`aOrrfz}JL;hWvX6T}{)zH<fbDqYg*BWPS<B>q0
zAbyMnd;m40D1eNB_GSghgo_dgnu|pbgQgvt>0CK;=X$*Qoi@N3Ha~-~=`pz=jS9iw
zY5MpiHBZOzi+za3O7((bGb1dHN()+HL;^@mujbCFVm{<e78&m+v7QkMUU7XBX0_;t
z6U0$u))plj8xHoc%dfF!=z;Jk+T&d`GfgTQ&oc6v%Sg`)w1*a(=k^%N!s7Gddi<Z>
z*X8Mq$e53edlqorxSR9rIF2W3&DPy*dQP4pJ7^t8ZA3$6y>0-34nUiLWsS~);Ewr*
zTDE0dsn-l1<(1W%Opw2`(b0WCqm{;@<xPSt6%no9=Dt%3JQ@C7`7g)v^z-_L|K<P7
z$k*NmcF*Y}ak-?hTVr-rCH+uluv*Qt38Y`TKN47VyBETA$qUgiK)t6H3`8z7V0S+D
zsr`x4v+4o*894VeHCINrRQJiLvbQ^zJwOD@q9rV-lO!f%?ARmiYglOM&6n1P-wqj+
z#zf7%BMVYxi?53lHF8?z4%+~K`JUjiS%cgDpBw;?Gz^0jAbPq_E+2KcieElKr~z;S
zV_*;3kPL=C00|-bgx&<8w7-KBMDj}m)TEsWAGmu^vz5RxfyX~TJ-X-4#q$7l_$IhV
zul%4kTWV1j{jE40<V2L-G>ND@Q652Ac*KCJD5~6-nf!!<s2j<6qsYalCZKSQ2aB1D
zjL0*M*~`S-X`f{t&qdHgRxja^y|*1R;A;wHXG!X-OROp(2f<Lf(>L29O?NyR+tCUN
z%!bW0)rAyl!z{GZRSwEM9iC82fF`JmYKoQUs5qs{g-C-bzVhRB@oj`8iI9~N7A!U}
ztV$sxC_#i`)YZ@%lo7Td3(f+Ns72vu+1a(`5W`3_3Q1u;)9dBvs3ixmEhtOhuI5E=
zkz>l}Zic-^g^EL7<-~}qy~uyDU0nMj4$PqYOr%}k?#+<Yw3ZYZ8{sC}FMA}j1bj=S
zEYN)n0&rU{`PAy=R#K+S-*f363#g|hLRk_ROwo-QM7^zdB#SXCr%YUYE%<i{iF!WI
z(G1r1S9(U%f^RusdwHmL>CeOiKJOR44~mFE+ziKP0)*%l9>}9OG-cCWCHi7SbEBg<
z<p2pSh8JridwJnd2f)666Ym`g(XYM=jko^_IVMvPyBjIofwit+zo>mv(^P7n<2$c1
zUZe2@QKIf!ya5)IXdkQ22A_pu_U!kL-fHjd%fqufWVw8NeF4+nx$3zY^mzxX0l+{Z
zjkfkRAY40c;%*r-$U&0Ka5(W>nCIdHX{`{<6%!=~X}H({MAN3U8aAkvE;sAhS|N0y
z7f)fN(g)|>(v_mf1@-qn;RwC&emZN(NKJ&%HY(g_2fV7ALyMfXAj)4nM=dHQ`y%Pu
zO+l!I$J%xvgy2xa%*McbQM^WzJbF5cP6e7_Zi47AcvzuIWm`KFKF;nQ9PPiCe}4;S
z*Iscd?m4eEb$HvRF>*QC+cjgF6x}gIs(Y7%4lDi5otLui(0ch9kCqQw)Bs9iT<I2;
za3mHa^wD?H^q9xjpjr0zss_p6DaeFEpaoW??QVC&hacE`_x(+Q;RY6)L`|e-D*hF&
z8(aKuv9BBK_U{s6lUL|d7C|!$`Do<Gn^BpjIRqle+I$F~_MYS?Rol#jNCDEQVN9t8
zCw!zcV{;)7cDWBIIq{PkHwM?r#UoTAv09<KjNnb3z0n^>?pXb})~s(>>o}NO)!lEo
zKXsn=<@?3;p6%W5&G+1N`}3~zd{y)0<bJCAtZ`qh!HJ&5&n#6=7IWq~taomu`B&|7
zIp-%%<&F8L+-fJgVCR>|EsBiqLhauftm7T^t}U*+&Y!GLCCJkA&nFcb$vrM>zcTi^
zRNZX@?zZVTwuk$~>j6apMc@aJq}mPxR|)KD3LlEt2*?N>AACquieUTb1>4NV93<Gq
z*{$7#*nI$h5|PY9{h<k8NoW9{F$6pq9~u&X*ku7bol3FIQa@oldiv|kgJa9tYf<ll
zQ>(1Mre>HG>^U-$%3i(1<8No+5uOB`b+GrRsgTVE1a$_mE#vwZZV8+B2<LS09-%Pz
z@0WU0);rpcye?k(m=ixpvv@A$XQLg;Va?iK_wY|0@g2=quGV>!OGqRyuyeV3ZdW1T
zW<LtWAi(|PEH^`Mp<8{P;?AD1cE@GYdJ~rJiHjTW5kV|c=yVu65us_DgX7<wibj3A
zjN@E!CRQ<cqW$AI>znV;i5r39EL@F4L?$26IA(oWF=NiXDq*E;Z5oWfmKu>|YtaNC
zk)PBaGg@Wv=XrC`-LkvB2NO;9LnF3nHem-lHqAL1TyI{48XeYee(jxay;k*=t}&#T
zmfa%LPa|Rz7sV4aaPb#oY*}>hf7%M*Z^35Xo!@7#E{_KF*#?Px89=IxbSb$b`WkE5
zD&)EsuRYrZ{4;U<YbJgWgSKomvpOuyy2N>6x88Ot=bb>-G;3^`-DU=HPD1zZLq>P#
z+@>=A9+ATGn9B~Nwh6nOjtWwcg|V(Q6}Ko=h_j61EP?zZcRP<pXpbT(3ge-?2-O_X
z9zgBr6K@Pk?1UR1ZeZ$D8txz0Gj1DEtM}67xHicfh~=1tmN-c6b=(=&6B;k+YP=|~
zfVvPq5Dz9gZKCvEWx$+xoPsYcw~t=jJ6PREAXU561FQ~MYpV!YE+kz+NFV+q<kK_f
zqpU*`55Jf=<G;U}z^ccg$Ab&aHV#B!n?WVQ5n-@IV7rjKKk^<$x=eNSkjV1FtE8w}
zi03K}W-Kg2KpV8%-Ur#TNMecDcB-R4dYwwLnM%r4D=Jrj9?63Upw6-T4`5OZJYp6f
z^=Noj|CjJQd1f8;%14<8lpYcggo7bfPBCTa!x?juZIhqzkI#I(b=V=h_wqHfAm!}D
zmJ|>OQApq;f$y}V@T>Fw?#vqdjKlC0IYWpTiTT91{NX}3+)`*=yQDQ|#$!3lz?d^D
z+hcY;<Fx_I?gOejq8`&DB&8@(RRt8PJRfpLgpn$xRer1<ya2!KxSB)6JAkGCtOJ;b
zv4jVKLohM{NHF?YCz-%RAbUWtJEE?;0dMg7gTqVZU*1E2M)%vOHTmVMf6IR~+p4aw
z-8I&yumB(Z%_ss$l!<(iLzwQ;_t<dx&r*Du!Nx(D3PV8RUjAd%TvIa>GcsUC0Stp`
z(@i|y9)Ewslc*=~k2rB;oM#)uF^pZ^#F|{mOnfh-)g*Wqgcl%FHW?^?`~PGAv`zE#
z)($^*0(9$<<UdaI@B8BFH$%lcvkv1g;~78b7ZQ&{tJUIsac=(7jGmC+Zg0JSONR3A
zcx4pT5-3Fo10;y$)%$ipD23FX5)~9Qkf|V37E?n9RNye`$}+F_#4XSvOg<LA9eLyf
zMiOn|O+`((bP+Yk-T!mg9XdMV3<_pnod=5(17x6RVr1Cn*kED?>;{xbiIds;oeJH{
zz5Cp$$CiS3#Wy4t7bs;yf{1TC?P#GC5xtRk8IOXF5l+ZpY-Qy-sQ{V?P!*UEQ=bGJ
z5CeP;TB>f%5fIHrZ6f@?EwEnnUokDt3a_X7=%1AMt3$8CPqp!Asg$USo7wY>PVTg3
zU0R<Ohp5t4ycVc}g>;L~FG9RsYVxscwl6IxQAtc<8qQd<GOuV)CLY&&>3N=Jd1PTz
zU@idI0muQ+0o6sTl@U0W2dwo{KsT<4^$P6>plp}*a7FhDSYHqYTH!znw%Wr@InBhV
z(mIkiIEJ~~1@>c)=Dx$As2@lN;v@6@SbBnXqw-2QQkeyJP;`&*2p8Qh8)n?QflM;*
z@95R7TlnaA->-*_p;~SLcz<%5ZXqQ9vHUHSPC;vBz6Q)5tZM`GqJBjM%oTva2<Z^z
z3sGVF2%a!QGC=joSpifXr>2Yqf4vg)`b10cbqcbc#3HUPd)Zk~(O_qH^E5a3@S5x-
zvuT|l)c0|}=91kg!@@3|R6~C?^V1G3zWULH`i&V)YIT8-p4XR4_73>RZ+J|_RYCzv
zmv{!vT0MS2`)}&JT!`N|z2C)j22a)$1(pV7{t6WXh<i@*^HAbqyUHFKiV}KAakq#W
z{8bnXpEN@3r-Jm{D6Fo~O;?Dk)Fbf|n)<h-DFgA}U8W?I!+oVO0{cVU#M*2+V-t|#
zVOVgr<R*?$>y`S^t~`wPHe2X6aC9@Z)uA+boIa;s9y41TENtz1>{ouRg2RgzOns(M
zk{7pFHM_fgeGI<c-q=1x>*}3WtKyG>WKEBMMku?MW>?c)?8B`z!XbxWES23Rg{)BR
z_IH8GsSeDk*#fh~Y&PdO_3XNf{ip5UtpGPCcKcpgS_CrbF@jCcLvVQOCN)m%(Y2HE
z<<k=XUxAYpu<1wHqQ=Oct=27rUJU%`!XXLK*Dm&#Xie?%{(2hO!L1qGUkZ|tD@MC+
z++Em_x9{WB&wTbqyP5B-OIkSYHIE5J>M)X~AnZiET@^|}RYkC&=$UDvU!$BEeL6=l
zY_V0fX|nxD_&FVF;ATzmW@;SlD^wdJDLBoO7wbQFq{RK1yk^lE=-gfcdq&1~VWQTl
z3L@Tp*^t&P_!}sXW@kr@TPM|@)mp{(KG?#@-j*VHLq>8_;bk$F_eqDz4!YU1zwGss
zh@#xJUTFO@lc$C-!i*m*86+!;N<?K;q3MdHWjV&s!(BJ`UmZ(aVZAVy0RK}OdRMx8
z=WOzPP<>Pe9fQ>aNZ2J5&`D4^F|hAEyYjyX<1M(Wp9WQ!0(_2bl+iwNyJ95@xJF5H
z8>kXao0$BJ`RMu7z94Q&VcJO6OW*Vw+P+KI3sPfVb3ELnS(@LbAHUTfY9ra^?N24f
zn+o<C6=stj?FcCpdqzI}FoG+dmZA6aJ>*mSi<cp!yT6Rvi0e3;`EoT%nhr)}sVsBo
zpq?YsyqX7bYH22~JTw(6+gnu{Sx}4V*QwGgCpQz2jP*jqOKF{@b;c)kjWa9);}8zA
zc0)%>9)|p~=v9I_G!$(HJztspN>3GgXsFpR^!>1TsCfx6aUaD1|8XLQlAwxbstUz-
z4zpJ_bqfk?#2zDaJfNLuk+RLk+Eoh%P=!*?BkP{`-@Xf7RL>3%)Wee#gD70~g5(&}
z)3aMdlAzphx$KTcOgbAt$8S*T`l0K=POv+-wqla38;&Pr<8Ja^-EUUDAP%dDdw2G1
zc$@lK+qdl#twfZ$)JpL&+Y?K{efr(`kAlI{K0UK98M82Fx%-5Oy#6M+0ZVV_)qD;)
zqlWQfM?qG3{8LxLLqkD2?~s-6BvX_X3$82C5J4|~5UusUJ1EL{R&C5KsE!VP9v(C(
zY>m<IGp|OA22tw@5hg~ZP9~*MIVvcY>(pygw)#ccu4?C6>YGJ+=Ygz1+5m{T+jLIj
zGW*w|+s6+abmFtdxmBwiG`veYS|#;A0l2I1l18nK*`1$HSS@ZQ{CX`p!3X1WZZymF
zA?%-zKGuE~&N3@`)o%=3UD$7oy2@hSxV*&q)??!)E1LJ~Y0fij_Zc=_yG@34a9<_{
z#MIzuWwnl6SB5q**3SGmW>Lc^ny7dgc86-J9FRz4slZH_EG8_XLEF9h_3~~em&Ik6
z0}iW&W>9>$9eC_EG3hXvTxTKdwwJD^(e3bMDYeOn!6P~7Xf;WSoL?C4w9b!%<D^@)
z;9s=I-0;Nxy%G1>vAn?4O~$b{h@+RoQB2_sh(5waQ6;8`mzW`X;Z~H@nvlB&f}ma~
z6C;Ch;7C>?bKdCGEYUG5Uj@kB(&OUnQJRgMW7CyQJ3AjW+GTsJxzs)?F9UpHc?fFp
zsWaQ=2|@5yf>BXv=w<gBWm@GRbz!k*`lOFW$QB{a#^l5M8xZvaL6UFCcJs3ulcT98
zFxNijGo_)O@%Fi*&(Dx!?cC2f*Ob0*^Ei0xy9(@tGB8ni2SSK7oS!;~9$j8gM1*8h
zA}E<9xZ`xHEyxS#0fh?Hg$3T(8tCG&t!DZy)7ZV%1(l)v<bal<ASwuowp)G}U+x@J
z8;~xfkFM-+_)=d~AuC+3cKT2mRZ&$!#7)SD&BXuXU?8XS1d1P^*aP<9d>o4J;qCR?
zmK&dz&74-5ZgeG0Jh()q?t43&q4m>C-&J!~TI_vRlZ@<@*IRnMp0=$R#nrj{^UbVu
zviGO+Z@#>`iCu8h)-{gfUB%A3u4JC?t98D*I`do1+qJ~5^X4aJPc6S4KC)1rCLgT#
z-h1x6es`Yq^FC_4&j<5rV%=+yM!Jsrx0Bpjv%BvZ$;H=ZsqK9Ck1ywCmsfu0<Dn5h
z4!|J*l6^zMdmt=(=sVyZfuLQl0~jPUC#(uK7U|F%8UNTzA3QJz?JF`776+|sLI`9q
z!6EPn3Q$FV^g@D*gJ4FtC<6%-y|ku9R>A}i3?OyudOTOp)!h<@bL#c!XgmD}Ty*u7
zW}nwdiaW6LVV|k&c64sneumR}PUBd&lnB`HjO58EI2|5Pt#1z>Ms6E5<T{Tg#j>*#
z&5ip8=2)<zZHqkkHOWD~6gf`zvSG`QqWd}-ZQg`o>_ZT(bT{R6vMZoPi{3Un!^c$a
zHfb>fNZ5OkzRRGZ8D`9eP<dp=#LFaJ3G64|DWNls#vx&w-?u&2QQ(-dm`9rGciplh
zD!Z@d(LC|Sq7c)}R+`DCIFBj|9*$v(Qa_ev*xLo!Bo_nsFlQQnQIWOT-<2=X9Z19X
zVm-=ZLt!l<`wJsH+HVYulIw%w7}KU4e;KCW{gQ#q9}`86;R>zI@m}rRZ`W_%uw5n~
z$r&4Y+q0)xAlZItf=iX2r2jvJ`Wf;o;A;3A1=@SPo^D4<IBc-I3Th>{M4KBFLkdSu
zOCFcsk-FMHze1lqUK1XOjNF7GYWzFy)z$4-&5vG}ewewQ>@;#HZ0}5#+-?ZBAnluM
z)65*oXJ$rZO$S=e9i5w~Ol-sOYbcZpFON<)ErLaXC_*LdOqskxHA-W$BNrpH(Mh<V
zj&McHGi`Z}U%S2M6FjDjY3b7o13fe*yERzyxJdHCMQp^$P{c!~-G#&&IRkwR1pk;y
z18zJnh&%Y4wl|q!6M;}S@>o1?5{`yvB}jF#GmdmD875DR`?!@{u{4-^m$70q*=%<{
z)OFD_ln!3!LJN*Iv^kwEb~xHMo!cI7;@b7!t8ac7Hz$ZKPMTl02P%f~_BG<#G-s~P
zraY%D#>Pu{Jq$yrcPVPs_rzXCDLYr=4`{$5eWec&+&_)?>`|;q7)coc{#N_?-^%_R
zUD_MNAh1wVV1j%a{lCZCw=IJQ^=r!M9uxQL-@|s~kDfP*Dnb$_B8;8&+;9u6r$|by
ziBaJShHxYbFnVGG)HEt71++f|E4cjHbqC&|Q?HXb-mo3{CureO<3NzABre0+A9`}~
zaRI90TEXEwIqC9ermhr#ktb4CSPXLG3!fqS|JCTgg(mV3F=O8DYN|}==E_0quD3<+
zmuN#2x=vL^1{hIMnLtt!LIi3wHAd@wgQ;}&zu?&XOljLQljQlgZt6KO{>SPMkL-19
zM_k`b9QC~is&0j-d$`+Pp^&(_Fd!r#ok~W=H25{It4g%uZs}cFU)$At#Vq3(ti%_~
z=NGk<-W^TTtVu7FUllVd*1e@#YQzRqy+h^Z)A|fsN~$0o^O&te!prJ!i(41e&04L6
zHb0bM?v`@`#x7x1)N8u8Vq=EwcjBV`(BRxxd-Z>meFC|GY`)23wL-1%ItdG|#13a>
z=6>xTXq<q^q8aDPcUsqUxuO1%fCj<-P-eaQ$d9^{pI}I5w$<uHfYS9Ep!-Ck`-{C-
zm8B16V6df2dXdUO1zMgvTcWKnNY!sBEbfz1vXmB4#$-kHc#A`S$k<J=K5wjTo73by
zh~#p~_U**ZHNJknwQbq=>yh(2f<7D$gaw&~`4clX!|{?v+L<J>7=`RnlBW`wjX&4Z
zISK9-M1`;)V&{Q-l4FS`0jX}YQV2bi&IRS0;Z6^kqcHPOfjYkgmq*a}{!9w>_2m$y
zTZG{WGAXW_M#-_AIr7w-2Ry<)_OrW<kfIP`(DpwQ?)i4AaNks#3{;|4PhgC@M^IRk
zRFo45#mbv4mDd(iOcAf2oK6+Q7|`E6+hxp3V%s4%%I%wG?mg-cz8vuzD$0=*iE0p6
zpU6K^Lw9d~GC2GgMB)5D@w8206M{b?LH{T|_wM8s8#4p{x6eo(*n^0Il>k0l;wK1q
zBEk9Yh*E^GyGw_X!}>(aLhXW&{EvS_N_kqQr`%z%my0gw_EYTw$x2OPnc9&!{@-7U
zH`F87<Ga>Zvdmuv8bArVU=$&*%7Lo;vtGxJdpYbY$BfQpF5}J0mvQ9@`TfW1<M@6*
zoxU-QOilXEx+l)d?|Yr&#CTtMbA2`XH0D1>t;bC@mP+aD(x!uw6j1iGP=q{!YFi%m
zC{T(rrK&fQnuWFa;q@ICCqj2NlD9RoytQ2Gam8i!9Fy!2Ut;-$=HhrF2#Od3I>kJ!
zf87)hU=BmcsT051>8(6TS5@thVD164AfcF1u-gSfxlynz5)qurP0@_U2*VKv6whl=
ziPnj{3NM$3JTACwRiA4)x;lhJqz24|3hJ?-)I?$Ui1du)CJ31%l_b<?buy(jiwgBn
z@X47yOuAxR-O~!U2-*b>btX1iG__Un3X<yIcW6!c2K`Ql_4q-XDfpbimGS0(aWb3R
zn8_IqA_w~84!(~g>ZO_dK!(F`?7W+#GmPbU8kI6c)J$O1QH5HV(W|ZtoaLJ-2}qS7
z31~Ez=fK#EjqL2z{vK%C{F%C9_7(~`Z=XF1X3AynB>VJUb~))XlhgLhH)I*}kI~`F
z8Pf9`ef}3U*?#G;j*Y;*iTxpvA7kGK_}XJ{?AOiodaqI2`SagX?;05%427=K5L#vQ
zIt*NG3lx~x=q{POFT%XZ-(j=S+jt}o_6ahueV1N5y|8rUOJkf|3}&l|mK5fzh?R)x
zv!pn*&Cz636wbQJ1hFhsxymET$S5|Qx(|gSWniP9RvTXL=#kpqu=l&ZMHGBx#~Q@?
z=5~FwU0^k`{@-$0^8QF6r=JVTbHAMWzjwl;)X$n443L9V%}ptzLOCu#vQa26zg#X_
zp!PSc@GOXw89x2mpJq-L_=an@(NGrMwI0>I$&8>vSGG`UKoeDAMGH#VaGz=>SCWP9
zGBX+Uh~k^bV=La|!VE#G(JEA2ttzz<i{?q<Ln-U1b+*mDJ*hXoJ)Q=gFLw3r<BdMu
zo6(3lb7(v^h(*k-xD3r4DkvugM8bKXAnNeOmtj@d<BgIfb^GpTIHp1K&Uad__Y&7|
zxN|B8O-|z8L`RVxiJ_>NiIuR?!mw#fGR8{>tYr3Z=<6k5j+PLH_HNe3a*tVTwi7;C
zwr9XT#n3+@#+lGtXStk<%C@g}?}H)7cD`@mBPFaF`IiiuL1E(md_}!;75BHljC;?o
zE$-)tB!fcGBYVp>HPJ#4LLb`CMIgU#7wn$UhDXl(FT&b`#N)>S!C~CQR)V_etzMk&
zuRsSr5wW44>qPm``WnUtW8N?IB?xQs4uTO3)Baw*`NrMSM59xEtnxZ&Z=KCY2l)p0
zW^Rqm4$e8#{iTrA-TVJj12<=utH1I84^BayL^V_sL&%BTM^?%2eg%5VEq*xduWIej
z5d;Id6%as}7K#R#=<MIkpY`6ueOPXc{<x<bv1*J6r)W&@(3x(G7qSqXaWP5D-I@HP
z4!ZlEFvtWCcQQy!YtJRaQhp+C+TBPAmg2F<9q0hG573bC0m-b`SR<&^IqsSaxWwKi
zO|+KPg+@bYC+5_fuyj<ePK^CK1XyR$AF2;ogoe|Kx`NrJq}qEQOz1uDKW@#8mPdEq
zybPo6!!aKH{4Y=CYZc0V`U3cu97$puUh-MJrgG-?X3^}x;NCj8?^B;RVc){&c3^WO
z$o1>j&BNWU<R!QX*#QZC`|q!Qe<Sq!|FGe|N~o9^tzy(k1M@$Ccd3*{Lms3~gY*Gc
zUIEDbQ}?H*PTD<n%&*Pb)o-eI^DD^moiUpnYFX7K<xC%CkD@kJe4|mm$E#ng$9nPX
zmhp=7eXTB@D;M(pc3SEeo?_a!Qdc!T9(k_n(N=FE-9}>E#mx78cs@10`saDpXI=BI
zJ*!yjQ8v1cMmb%@*&WY`cZ=(4qf^WAJ!0L(@uBkF@0rCvR^}gM?jHQ+sGm8l#g@8J
z4zK-x@_`5hC(Xuniaxc0)*&M9C;o@4`!E;GK4MS`9(0tZ577lt@a*+^RId}&>K|3B
zpOK*^ATWm-tzy4FyWR*v`ibDrrm{_qD7}lI{b3oO)@LEy{;hMW<?-G1&ilSN#4}iZ
ze!kuY?ksu4G9foCafx0XG$ywK5zRtlMb6HTDSnJ;&w44FXMmf)=?*ocgE@ja;j^)z
zp8Xao4@V1j<uggFKNeWRanLw<M_ub0$B~T6HiJIh3eQ+HSC2`E?V&e~poBda^>dxv
zMmN#X9-qX9c7)Jc?9@~%K}0~_9Y?429$he<0RB7(f}^WlGelhG3bdg$kpu5%4%(Mi
zttuLeT(?mIB*4$xcNH@uMNehq^^A5ch_{1o{7gn=XUx@?p1X^B%p@j8jFL3dGouQ$
z+wGdg3gEcbIgPp?cuZ}c6iu=-g-#AJv2WbH2#N*GwOw)`-#DCy5~9}t#5o%m)?j%x
z9tTVtE$Ij`RtunfvuV$XtQfRhotGwbG^E<T9V(1%YaCI1PSW)n(2F&NO0YD+vt?o#
zsxM=g44h45+GkCs$+Vf3hWK0WavsOoy0sy`ASDx$GvRY4*}F7dKbAQ%QVN<Q%^rsG
z?*$-OX*}E2uN5w+iM1Y<9zyiwrY{3-V+RWxe0Jz(8o_ip-KOOEqEsN*yJ$@qYe$LE
z58HYICr(?ers<gOw$Ovfd1IMux*S|>lYfGCJ2k^7@RB||k+e^5x)kag;x%z@vg2OY
zedg|lah$Pa8ZbK2&~rTs@St(6qCD?=OIp@@&axWH9j<6PM&E>zc+Bl7<Z2d&BZXQg
z0IP6nH#-0WV0kao+3N?i0YYZ1!Gu&Xxr4X~e)T@+lqrXARX*S1XDk5D#4wW|GZKiv
z%l}vUC*6P17>Af>5YeB4f?QyNC5DgzkyNM(L>3Cf5Ga$rm;cdDPga@x|37x;9yAja
zLlj(YKZ;rkJQ651pVj9$a?w_}k`heGCE{Z%brm5Z7gZF{2jV9{lR}y+R+|HXTnvT^
zj-P-X57UkIIhN;6(BVXXxAuoXTpT9pniFfM#;jnN2|`i}pKoaL0;DlLg#IF*pq?zm
zM=&e#Ff9~C3Z6D;jGq4Wd<te_B4*{Tb^5H>8H%FcWFLpvaGqbBf+8X!94In|37u80
zSZljGx<xnZDa9$rHmGj@qXQ0>O2xJ*`YfP-@srS|Zm3ZS6K1!rLx|EO1d0+#5pbV3
z&>eJz;i5Q<YKoFdtP^vHV}67muj(J5{z3enAA7kS-c5t~*e7|~|7+xJ>f}4!pEI+e
zBdfjW+kvU7aC^*N4>Lj$(9PuH!;Tn5CzJ}nd4m9=fr$~2VxdK)b%ZsO9*Du=a)t((
znTUuxX2CSqwY}YZnspOUu<vy-exfSYwOL{$&D_eiFp0h+5fOAIwe1*R#PysC?|H(q
zi&bL8+VOh95oJ$z#EP=-HCoNIQ|08joPS9VR<?BZv_5lzRNB>xTB=E`*#0Ph*aN5o
zumf(uATkFOdXXXR*5^E+yD-{@N`)dEkC#XQtNwHS(3EU^m_iVQ*Kk&2?cd6BFQ5n2
z3Lyw0rofO!0zeQB0k~K=03ZkxV5uu#kK73gqs5?4ikc6G67;KHe+tqvB;QN<bK#b2
z7%0$1J9iWi>tlah%WZt#t0Uga01Ezry$AdgSzyN#|LKN=BmNE~8xfv`=O3&r$FJF)
z1cW+GE{9VOX5o+Mbg{dphXXyCL7pQrp%O8o9Y|Csk)ljZp|V<%>LN;F<9s)$9vzoD
zshu%(rf#UFZDsH1k+?z+`}#dX@Kc#0vcc4*8SdeJOLlQ~r8U^ZvXtIdC>AK<0<{(}
zTP<=a(3KVU{QpxmvUGi9)^zY6u`jwMP^~3=a*oK~3A;ATn9_bIj!J8+M?RDurenio
z+UMAjriOcb#vEvDjV4|Tpjl?gnBOi(jC>5NZJHOX+w$<y2r@$lT+iPI{g@ls-U-Ki
z_t6a1X!t%|n|^)%r+kj5ubi(urm)(x-1&^bfzOuHSv52){Z;!YF4t!7NN(ruVYBsr
zN7`X<v{8;u);Z~#gZI2az~f7iS3@m(BmkQM0@xey)<%VS8^NnXM0>@xljrg2+rCKH
zF_@Ib%|)~LeiLROS^J&}Dr=+A-3m>!x;P|-WHk15qX*r?-*taGA9gk1hT+c{lR4GX
z9FMB^nYN+TbKTYZhTHa7u-%HzYg!Ox4ja(5L;5Dp8*Ba{BO)KHZT<;jR-5s#-Q?`O
ztLs@H#X}rcSX$<ou2s~LLlM=v!)2iTTA^5w6A!T189YOlz7M`f8wRl{i{8h`jW}lV
zHjif+sA|NYOxf=@);$v0<NQ~r(UZ~X&5k#F>hWzr+weVXq~mw&`Ot3}9eU++zC2z1
z%!IdTsOELtVbgJua@)*1Ea{7Q;gZ4WI^sDj4zWS#n#u$%a5{`<t5w)tuPVib4yD%E
z0GiPdDXzWw7{iE&{cL^gQD0%Zy2fr<2ZcuT>5URcbw==dx3+D+*ly3jmYrDgVtO=9
zI&%}xg5HPdQALTYOYmhKX+k7w$U-LM$2|1X=v3+8n7zp?(-*=pfn}@J5t9ti)SFo&
z?UF|NTR$F(FNhnQYO3orD|9H%_^Gc<5fH%pX%a+c;@ff>;UxuaO@?1TA{VuH8?JLF
zqt<EhZuj*3FfXI<bBb~1WshS$hOVO{RkQ|-3ha@Wh7fj4^}cw_HS#%4hBBUlzZy(i
z;H+mpj*0s8S6R;1ZPn%d`{!<4MaH{$nf1>^mMBR}=+@n5J#v#xI1VimYcni}O_)_J
z9XF)VH&}@TP?3GwrHO+&EXx?k0W2E=1L<Oxu)J&pSBajPn3ERu$8B>@lPeEYnBarv
zsm=>BJ7<QqLw0t}(B{jvYt%T3gM(Q^d$&VmY7^tGTx@vV`aKcD2vLN^mj;s#v#&M3
zUG-Zvwr`@0ahtfK!q_`%E%S?1+Qgo89a#>A%(SMKZ=Q+~=?JU_o6UFVYAGBN%DS6X
z@zlDroFLJ5ix*K!h_M?3EVF1J`Fwmp*+{Hn(Ei6KBWe)eC)bCC&|tscMa*B(_a=7k
zGBO?2ue>*2OZc!O<33_(`|fyitNZm}j{f&B(3-lVUnWL}bk5o^f_DzoB-<p0l+&gm
zbXeN+Ww%4Ui7S8}aPXE1?SX&>$|19HNG*{Bpt4%3!n@ybo1<VL?wciI7F2^Ox~XQt
z9R#q>$Ep%EsO)dR*U|Q@KW69bxHFB8plRUG0y;3%!_hU?G&7C^@V=5bB&`vgCKr||
zGWu<)t<4Y*1N9#ny7=U2diA(oX8z~o)37|6ByNWHb){8SAr*Z?woHK*sDoRky{O%h
z2GeE2>od;?3Y4NMSZ{3h8R70*PQp=d4`plMn9I>aU4ADs)_&qykit6Q8;IyKU1>`(
zX|AYOQCU@DYmlg<rGhoECvyg;163U3Qf~)ACVwt<wex%PeRb;7ZtxQ!C6Y6&bkk#o
zWKhLY@@{+<n84Di%cyo_Y_oqej$el?_MXfwuDRq$XeE9thRBjC=fZ<XPCMO35p;>H
z7BQbVc!Bo*L)ttPW5OwDs8V!@wM9ANj~`%a!ky82sK*m#dmB}<H$}K_@2rYkd|`A}
zZy5BG->)y%G_zI5y{~NJ9jfb>e>I#PKbG<_JMuc_qZL!m`QMkd<i2y<99!f+Z)|Dx
zxz};$j(HP`@4Q{zZr#z{rRn>w_rCMzc#K-lU1PJ)FWcu9?>ai&yz?FM*~XL4dhyP?
znu=G)URmvx)4IviOk-3@R~ukD#g#2^*d1DcQ9w~~)9y>(p*`pl@aXH1Hq6mQJqm96
z*$UT;JP*1d;Kgyk$k;)uJM0=4A!Q)_yIxDJS@w43E8?ZimX%6TB9V$TBybj#f$#%}
z&LC7y>gIPErt`Z96iV+M<B2z&P1y1rrD!%Bjq_Db*;edjLvBnTcP_gZY++!|`RhHG
z959&me(yQPI_~_srJD(ZcXQ2)b)rJ#Yfsbq+6nUt3JS6T`sOkCKdlNH83K3qaMx#q
z9h*S1HhepiE^8x8mwb%u&(m=syNf|2dm0KEoIQ@jBWpvA(53G9FzU@Iy3y4ezHiF5
z7dppwtZZ$Jl@_4lB(iE;_S_U{u$zxPDjL(hhRrj0nDE8rCOGgj>L~VZfbv=Ev8;GT
z{KGabH?IrBG`+@iwrKEZJBl{)b}r@4(VPmr=!w?`a*P@o33ww>XPWQ5_WJ62w@HkR
zV}se7tZAW9jQMDDLv%a#=1D5q{*DUJkz4H2hxYp#L_}nh+-I`maZjP3XG36g9D%GY
z5ANx`HWPN~k7gW8YWwAPe4Chi(*@bJyby!7ZrY@Mu?h6ho0&PXa7r!j1sX7Dv~}TW
zOk8aX!=nS9Zx$NdZ4!ax@MxHL$<<P@&NLC&+AL(5lLR2+7EU?AU>wJGFH~QlWP6nL
zWX5vx_1|T*bA9*V+smP{Sah4N_!FWgj-SWuY=oxB`=iEZF|$XTX48H6h1aKN8@_@p
zF8Ar5(B6axofwMtG_yomhZ#Y#9NmbypLyr8mxJE<9Bi?5IcgfsNun_ORQb;|MV>L6
z)mrnkfZ1UNY%L)71_{lc;_uO}np1k<$|bc6>%8D_%!!=Bp+nEZk{0nA=7C^7eMSU{
zwF#KedGy8P$U;s38JzUdXbLO4gQ4#V1CNvD6Yke8<G?;^HG)XVn7n`zNye#k?wKT6
z#&kM+Ib~~kZ~TAKIi@j$d}Xuys)NesqL;Cgfk?ohAq3d_;a?Oo4C%6SwvuJhx8(6|
zWa-WxVH+?Z1&`7Z)Gj{b)MC91JIM0<kAubZIljj4M+bSKb3da88@jNwi5!jw$B_Wx
zW#QLu77wV)7!ZL7_7NB@uX;Y&?rp?Xy-LL_JN0#Sd%j&?8O@&96kgwyyjXi%3lXQn
zd#KaRs`q$xd#vSHbv1mp6szTC^A7mRwN+adn_XIJ_r%3iT5VOE<;&*vcMOi3sV;oM
zB&9Ldhw_XZj#IQ83@lE3i#l+VoU#h#dnslF3g@T71fOqViLcClLg@sX?o#Pu<Hb)M
z8_psDLq%&Q7uPmO#OoZAnN>^_l&l6&<K(BV5(HetbE9~vRZmHGGE{kA$*G+4jK)fY
z-Gh`{rm|}cI%p9*KbiP>%p<2k`4db_X+cyucOA=u*w?3qMJc6Cr)1}x(}m6U&=hvG
z4vdb21}RE#Gx9c+=*QU@SU8ZYBu-Z9k%o(n*(;hi<tNGySP@fXutJqsP(<*m@#W?U
zSwqJjAED&&TeUdYDEM+5a8fOEgp(Et#P!#Hs=KpP&M&7pn7!s_QwvjKPJ}u5^<P65
zI5IrYs1#?FvWbQ@yPvE)yGqB2r<#wYwYK?Hx);huGrHwm$`Q#GB4DYK*jR~F#g8<r
zWJkUVSZ%7vv}$xmOMv^T22{~7mM{jQ>}FWp*6UHl)ZR?6eq`KA#6~JJr&$E7CnH?a
zN|&Q51%l23eul>-wI6w_CO7amp{T8miLKnSW9>f#ps%hG>l^d9bp6tr--pe*^6jKT
z3#t{TC(0k;-QR?K{2s5SZ69=YYc3rh5Z)6feqY={m@b~^3Q-K$fTcKzsxnba%$d$I
z2NIT<6&a#e8F@8l^VrwmPnPu5n+)lqv0QPG&NUNPN5a+<(8}B_n<PpZ69RV0sx_c#
zhocfWl~s(cg_$yTg4oZ?HOqV1W@#@{_#9ME+bvxLqmrApwiH;`zdcEg^1)CjAL;%t
z*uGhp3tpJeWT3wI&ztu@FA*~H_ck~1CKx<F9h)DveT<c9{)Z0xo6VqD^D_dnr%v3)
z>n`DH17jn~tP(#R{)UOs!nKxW@kaPrx+rwcQVJosLJ2JhcJUnx;}c>E=X?$($&Ao<
z7&53U$`QNB5`5|{aVsgic{K_(WNrLu^l&PUb>Ds#%L!GRW4Fju=m4hi%4wHuOr?zq
zJdKRE8Rv53$i8;FM=vZdS6-alXAG#y;{wxe?!}FG<;}Er7)%nH=wb@eXEUbv#|awt
zmz9zjN+elrISG<~(GhukiN>R{4$3TJ^z!XR9;c2p7qkwx&E@p%NxhDO7qSx)@IyDr
zI6o1*k_hg!Xx_AZ@iBCo&O!(JK0WvAFRVvfi9O_RzH;Rxj;C@mZ9(tl3Ufx8zIxrC
zO|i{rLvSvSzTCKp^C5V#>p*?cDUAaO0zzj(1#9v%*$3f_Wty<kX}&}$fL(Z1PIgi|
zER0xn;!sRY0Y}-IeR?nOb*>x)bsdy}Y0H`{n+1?lHjOKdexBZ8Fym&8FNR^0-cN!|
zAopdyb%JH33J~IeU}T8;a2pD(yBuSIMIeaeN?iiixciawvj@U2zYFG$M%||2D0Xz!
z!viLi-%QTR7$~b$q&&AwrF@{MODgWCCt^9;JbJ#Z9~vb0_0J%F$VSOVh53IDkjap!
zJ6$S4^doGCIMyZ0t5S&Jgn=DI8596pK%~D+sDntO5(*iOsP=~rhTBeb{x+b{(gv%Z
z?#{vSkg+F@S;CDStbz=wnzkZXkSuLgMXIK0W1Qm0N-v{JY|<{24-U0%T?%2YG^hK?
zdZEyBnnQFHh;0NSM3FF~Sza@^c<|eNNTe-X7hcH<3ta_tb7$7)5ch89Z;fLoq*(`9
zJ<PW5tW64jBh>Uk!{yYbHhPUdiyE(&?&f`oh_+yl7p&PafxR>)c;&5ku|9@!yNEE^
zO!tQx10?V0oC>CEKTbD4Bjmk#h`xCmJ})=;==AVf3y^xKb!2PcWF>rdNp$d;A7{HJ
z`g|8b15g(vIQcX4v`5d!&9*m8Z7s<@&y;Nv|43gagMA4Vv9Q~JqlSddXKGF7gKecV
z$IEFodmrl@@%`gXl-L5f@;6BZ%nI1acWPCOzDny|df~4}!fgoz$-waybkMMQhPYA{
z{g!V6QD^P;S7r<A5A}aUpzE^p6x&Swe0<B8%5D0uh%kU*(=q|O_PVQ>q0QnVd9Xk#
z7Na#4N(I9zUkBfGmrQ(>_sR3l=bvf1dY=3H^B!}zSe@s6)-`QwzK;8?dEHdHdk=hf
z8t&cN+`2ceQisKJuJ2K~@4qQLb=Od})vaUA$9BzKKR4yiJWH7CkF4_(4tdWjxW+U}
z$gghB?|fqm8S}~WojttG_sy$c%kBHOk!*S2on`UkW;}<$to(lQV|l#!Ths8~uQuun
zZT!rCa6Uie0uTu&;yoeOA*@lcp<<J?At4~}BJPqe=wcTRhf;@;%eQx2a~e7joFm+5
zXMTt>N7>9^u-UR<`S;^eXc`8LjbpR!?77@>u-HuHmj!ML4mx{|H5Wkh)-BQRcE%T3
z#CC#`8Xcy{U2>J(ahVZbk?X^<qY8vVXBm3(UOftMNy(p|>p!c|9PN%_<Fb!)VpBov
z*+k-;x$@XoJ_s8_W8+^REh(UA8z;M)M77g*3__>7?4)Dj&n;pQay1@nUGCbBSkG78
z^=C3Pl^lH$PEPvio3nBhj*TM$DB$QjW6q`H1bKZFHp)Qi2e7P-pC<9>Y7pwl3gjj>
zTtsTHj+w4f4v^?5)rTxn3c;i^jnLZ}EP>XZU%YS3?d<rTj-pH#NL!@EK@pQ?15Q16
z1)APFlIBhq^`LZi>4?Ezo}R>=vm)b2+BETgyCXx;?BrB<FGod+vpEL@bb1t|Gn8Pk
z*^%(Q7{f|zGiZbkItu9TOx4)kb0w)U3e`G2cga}Ei0j2R)hXhJAVDWJaCA~k&X}Q*
z!Z$WOc~1wS6nZO^gv+JZa54&Biwx@{&BrOdBr;?jl;c^`8|j;(P+|KdbR2x1Yb?lZ
zLlmCeyB(gWZoin$U8cOY{r6Y(gPhvxID00>PW{Q$jFZt_;r%>_yrwN)&gIa{qn5k4
zFLBer(stCF>$JTgiZ8zcS(ll);ciXF?DP|>3N1c_G(vrv8PXdCAaT%W%VlOHl0_p$
z+UhUxJ5$5JT0Iv<%;NO0*ygIKwl0f|<9F+XT?c4)OmD$94y;)Rj}O^mnv*-K2TkqX
z3Plb$$XC)}zQc^@zMByH!*Du)SZTv=H)RGfmC{I*%GJ5KWZwUy?{;utJt5kSAwsG`
z=LNg~VD%~m;9Imlkusa$hgc)u1j;EQ7(prm)IoT40~q%B1-^ODU4*$IAQCKukWzSM
z6$qrXDGE=fL#qs)4hoH<P+Veo1pxwq>k}L?=I+C$*nSW$D}RlR7nkNe+Gb`VB4v;4
z1Pa_}7)=8)e<mTkytLbGw>YZ4Mcn6({>&N<-%*M5q4GKKvWlri#j3D$ztVQS->V)k
zCpo8JcrfN;^E4YkTuBgeQg|gUEM~8O0n>_M!^FhY#qobzfu<ZgSmtPRk2g~8Y&AGL
zxx3!iw%!^K7p95F55yz`<X_G5IddbFFf>HFzDt%dTeNO{L(MxBEcr)NOgvu4?t7`H
zGV)(3;gy9s3l%zjVef2I3iiw1=1RR@Eqo`rHhflY__h<oPIHLMShJOYz7?JFOW8zT
zvoBOsqR{`(R=4lhBbJ=)I-3vx)&OmQHb5t^B;oAoF$>b7r%Al8n$@=6{jL621Q(aC
z`bbzm9p2EqcjK=8vLrI;E2h<=hzV?673~XR`4%N4IlWZVDv796=`h0fl~*qI1sOtP
zIzsF$v1^n<UIH;PB$ZWHFAIX=!Vy)IzaYrmW?daGi+DHYQVa_6r{?e)72M1(lv>iw
zWFFJIj)IB%x#aJs-ggh`Pp>HPn!81$mFQ>_x+w-V6EYBq2TWMG_X$%+Si$AS>@Sae
zpR>k355JbkR<s_Bomq-iY#zdp;wCy03mr>K*|!Rfbv+90f~~Q=w}SKJ$`4;*zKKDh
zy^`md_ABScYb^?6$9rUJ4uax6eA;FD)O>H%Zr=WJpN{VEXz*-~{Kie*Ms%9;aO;;0
zPU{v%h{;TSdpLd?_qMYj*FHP(e3Q64kEwOctm2p2BkO9-?VEY)FA9rD(Za}R>fJxk
z-w^+R_2RJDGJ<k6uNbA_h~@<)r-NF~IE)j2ThQ4l1rCBe2R=TD-&fDLBhNf@G~FP(
z+2+Fc<*?YfH^VDy!R-Tde8k!MI_)(gGxh3&p4V1=$I|()b1qKj-;Y`)e+hV@onIYg
zcD<<}4^fOnT?~?z8TXP<qOr;qIG(YXrS9K*l!F7H`DXGs_&ztJ)|(R76Ha@9BNWbx
zLDc<TZQrkP=U4cd^VU7l<m9O_eci_TvC%P;H@JqumM*%sT*9ut1bzB9ffA6|KM(hw
zT)*F1{*a`e+5%vD$I~oK`b0`1<plrV9oIAnx!s^(1*i@dkp#glx#++0Htp>3^zY}!
zUqT1N^#`;**ZKZ8ZEf3a_wPAfa@(D)%mV?ifQ<wMU_dr~et%KyJK%QYjpP&=CyI(l
z;}^Z>GxBIwIOpd{s#B?~dL@Rs6!2{J9UPQ1om_7Z5I=93vDV|y1(V6atT{-P$cltw
zLedHkrP33A#WFxnBDr5#MRj48xDv5v4_W3<E|jW@tI~mmL5`|Qt9qdAf~j!z42+U9
z6Io3olzj2YAYL=&VItc~NTWSXTGiFOtaXm2TrZ(1z(|atK}~@O?J%C^a!5wdAf%q>
z$?=mP1>8Dpxr>}MgC1w+*v??O3YzZ1WJ%kMuk-1!LJElYqeAjso5xIUJ8A6sEq^^<
z*74t5)p+s3L$10ty$W%pYlYDBIltsngO`XTLOsEzZ{o8tH{E@ATkGeyt3(RlH7i>8
za8}UPID=8JMJn|E(Tt4=HV(Mo4Bq%{2Xzmvqqhu<to7-cSh@$X@=f+Yjvl(U%#X_G
zY9#~k`i^{kd-cf1cvK$)6mvMEL$uWzBe@*}gQMTW&CL9etm%=6=xqyor+|cC5Ko)7
z<o4+chs+-~JK3}o>9r^vSUhFGq(%v`PnU>2kb|~wBe)k#Lh*TRp3Zx5W4~Va(MT>~
zm}FIY8Zzm+duF|5dcVIb74h+7$<eH-cP#xgYb;q{bQaR;UnCLD9;8OqL~<r|z*{Sw
z%adDtV)8G18uL^J6v}LaWr$#WAa-rToe$T^*U4;a1q_UQjZrQ?!E)LgLw?$-9o%?Z
z{yerGPU!8qw09*;H(L7=bGIX9hsmyaKHBM_k46jJ%h+?KOC9`m$nSaek|U{u!Ijgv
z;Cu}6#6*S(LATGdvoT^C;$4^HcJ@2wM!G{RjRHscKsEQs72Nd?9vFT-bdB;vw@tE5
zXA>329XesD(}HU@GUj1~I<E^;^NBe=tk6OS8_^iOiW4QSeSKTZ3B4LX=F00@e`9U3
znf4}x-0MA^+Wm%oTNi<l<9Kypt+Anmy5V!*$D_-<3WwLDbz<HT-mO_fvm+)=AonP5
zc&{BCJsUnd?c2c0G}U=_hf^ZJWv=ZyOg81!$wYI-1k?nr5F(Mrj`W3(5TeuY{YJ@@
z0N}<rX7^z2Q*`X<<VwHS)zne;tO|3x;{On){KNgVy><4nTedIG=cVNJYAxPtky~4u
z$5?Y2e09rf8(8h*$Zsb7cHQpwch>y!s;J*Jw^qI5G1q-gRCVR6eq#OKUB`2W-K_m*
zoWynAyzXu&m-7=HtY5D1xo*v7_+9vQzZaIy-SNvPiR;YeRhGId%Szt#t#2=@`ORwn
zch%!xAG8QSB%Z%ub%EIfAPBFnCi9Kyut=ZBcrF+^_#J_ORof8NqT#g^<O_p=$lJol
zd<z+0!$Q~UvtFxn1FQ@ueeyJchU#Ai@qwmB>APztxv8fboNhCw(Mlhow0KGm<D$iD
zvbo6bt!nn|RC1x<RlJ3`HOv%&$m^=x=%WUnQX9g-bZ4D2Ar8&h+{pLNi$@<6IMfMo
ziz7s9vQZ}O<2A!L5YA{Jid<}so7Yc6*G);FZo)pj3Y)qa#?k4ln%+00nY7G{mhvVv
zG<D|fjo;0A=J%&~(Zml2lZ!J?o3Br{HZC@8;|XU?p&SuhyaXeIc#z&RPDYw<8>e=p
z8)v)vJTF{(9gK|NvIvyiFJ`i9W`vJUHjcOGnHx6I8IIYzYbIKP9y!HDHO-z%aB-Y0
zUp)jgCeZ{fboIVoZNj!clu3DJhg4}a3&`8z6BaY)8N1;cUnWf<k_D#H%*Q83tkSIG
z#d$f7NSq5mtxfz%gy6a*rV2*uqQ%&}4o4k_zgA313NMp*>o`X*o};;poI!n&yuO_3
z&7;B1nIs(ZFjTjM^1EI+*<P&MW=$md!_KreOyRL%xUUExWg}CNM{-{oF}??e4;`}_
zG@9dWODm$&i07#s>R!vu)-+TOLCP#B8_v4(9pd^@p565O?vDx*f~G0r#2~@u$i4hX
zWg;8ElxKOIzgE$_csG#7R-lyjntb9e_HRI-^jLJ39HVcx%59C6nbF~vgw`1f$k`eW
z&dWufdQ^;NH_+xf@X1BGJdZ8S<CgL<5^)5yi`3cd5R4HIgRF6zVPs(FgcQT99T`m6
z8-gK2jDxEovf3;k71I1lP<6qIyTZ^j?+Ld00rL;PoV~mB_Nj3eK~qSIQ~?W!)C7<j
z6?j3?D<UuS<82W`K0Q2hP;r2o#AK=~ZffPL=yJuj`WD>PQAsAzY6Bu8zkY>qH1O+J
zw>>e;KD6hd`N$}3mW+q)C88c;+M_~VaH9X%-+*=s_dsO<7z!|z6rxn75r&wXon5pX
z3pX+DdS@@YADz9Nzj?fH_&8?(B11k-+?~g1od9as?XhBNrf1c=y{B;(#NI9H3})7}
z-b_QenF)6ZdPR$v{^oLBV5`n%+12%gvl8!;Fy;%^Z7$iVn!a(IT602j_RT`D>FHW<
zJI%89wOjj&ZCEuLeOmDZ+O-y&LYr#QH5D2C05c;8!{}fHL`#UCU1{+VM7tO@IAHi-
zrN%fd5Vfg60ff&NY&=Qt2(E_whrQrASy%EOA;ty{CLo`_FfzOOqBDQv8s5(4_hc|c
zj?kFZQRwo=`7Q&d`0j&Z%aD5UiBvYhd{pR7{le<Q;Ag<DeWrcy)y;3`n6HPQOf?5+
zs{|n6zKC9p9@^)O>zA|OArf=8l+{^g{ii${jy*Wg7)5)4=UBd`_3_WP0Q*blsbgxb
z8TcRT*}lxKt-pinu+F|3$)L2Hfehs!eX$DzI>^Z>g|?VnOE;J)B4icDRONk;%B7mN
zI7=ph2-8SbkBkWRdpe6u@KzgPNaS^f*jWz!NQ*8wp?n@XqR}mjD4BG1WlAO_Vl~;V
zcbSgBvN@QMA8gs=hC2AcS^6mkCqGB8wo_BLi42)&m%*-Be%x&ftJQ|~!>=rbbJf|W
z?R=BkJ!jH7Qe6i}#*W^-NkS2$=KnLu(!Tt?bw3{RG@=Eoi0|%hP6VSud~l050_ZG{
zK|u)U!<nO<g#i^3)CwVe@j!IUMN+#mEp|;8x>B48JT#B8KF6<(TUKU_Em&tlI{89&
zxaP!Lx`|TyZ6-R`ajIe@h8Mi=Oil+C&c?l~p?JrH79*!TK7CI+x2}0ny2HQB2xx9*
z)Ak(tEw*Sf7(?F-*DLE_=;6;|2~J0OtUSvjD?G?1N8&a@@!R(8?fY*{{uV;&*?r#D
z&W6J9%7$$QwH<Rrb3CScuCUbd^6RK(Q0YV%6qC%Y5-Ai_*60U{1)+#I)s4oqOYxAH
z1XRu?Ed?|)se)=mnj+%}HiOMiV+?eQQ%#rQjNa!)*w=;#xJo)YD9t7#fe6bs+7oc#
zgmtr?WOl-9vt5AR(bUJp5J$VhgY}<xaWPl;BEIRhBO`+2P?ZXR&Qk$#s{B<5vaw-=
z-np4c#)+CVRyTtF{!IMH-mHDd_2NepNd^06xo7FV2Ea-+9@v%VSJX$x!SEPD*w^Y1
z*huu^c=bka;_rL#_0#$u_L$8<=xEDynjL-12i(bfJItis9@d?o$Rx&oiu2O$%sZCs
z_h`Gx4Bdg9U*`wG(2r=;zsH>&8IbwjaZerKGKUj1u?X4hWS5>;vJaDlA*Wu#QADz$
zeZ~3hJ)fB)!n-~1%bgW_qk}sqHh$xcq|x+8ktB2EUPsf#Asq|dwEl>>X!7G;{t7r5
zOe8?K37e23O5Xk=B;Qw=xUD}%nWo!#ehOZ|_1BDyd>HxcSLl=<5+4l6vGBH<ui0M$
zeGAqt${=YQY|zCn1EbgCTpx#r(eh&y+g1rg`t{uIvFZC&i1i_jmN!v#9{bq0gl1p6
z)5z2{6`!Kxu?vA@h(V7iv<j0MVIgK;n2$taW8vbSzH#BKXQ#GC*u5Sg=-|>%#?O7t
zvP+@JK%8!S@fBunxTB~;diPtm1o|#I2RaEomKsIdT{Gz8S_df}n`j33o0~PRa~~Wl
z*O7al1RS(tz8Sp)wUaKs3zykQGuJxkvIiRfqLxN+^L+9B_3!39P{$X+@l<qAV<qs-
zjC`9s<&(v_Ju=G>o;_RRCq_5zoi#U|bTuLT^d|SsXl|P+pXNF!HG`uo*?)+=?6I}z
zM4xtVJzHG9jQM3!<YU)<-<N@@A*^KB-Wm0o>fYI$vYlysL0%6-QQ=4{vB*JuI6^%T
zIC;&kxMdS{WQd`eT+DuMAFupPHzp8_K{6P0$lnjXUy=3adi6S`Z=av4-!l{S&F`qY
z^!(IYn4hTctof<DZ#}Czx!&>JY~D8<?&jg^UU;BgKUrPh!q-m~-F3ZGYrIb)`|Rgf
z>iK>0_d3ziTekehx7K<h<+W~k=4)L}F<X6k7SCPteO9!k?LA-1*Ge{5ddF|ya<A6z
zrFk6ltG`|gb*#&yhbq#D#x9HMXwf-7x+iCLdq7b@QGCg*Q4ujI3l$jqdnnl6y`B?f
z-qIN#QIV~J&5yBBP+`d$%QI5Cb{gjgbGVr;jxKygxZt~-Bi(WCH8fgi@PrD(Nz*P4
z?Cqab>mA#!r;(GyYf>oc=L$CHM%u}r#%t%oFOOM!3T;}h@Hb9bsRRy#W<5`tZmphq
z4Bm~gl=u)k5T4aLcw$B2g55`T-W=OqHz}+&`fUo*v9mhx^$=rX8@`3#2$<iUUp{l0
zwngh@b*RINZsny4u%uf<WU~~bE)a?^%;ge-;k~(%kb1z|6LY&h^TaY6!jNplW&Fls
zlN{{G*=A1Jy{|?|2vjY`Nab=G8-=#rvo0Wn-HoC#8EgnFS6)oxJ^2?aoVZAvres@b
zj>pUjri9pxINWMY9&^<_&YBZnuDR%J8Z6B`k+rQJ6D-*)njKv6$U%I|dQLdnrm}1^
zIydK3I?K$-tTZTeHeMl=ELQqlUJI5HI0<jAyqt0)n11=+F#8g=LXpt|7lT4WXwz9X
zx<hQ9>|D7sOzF5cUEK=%ZKG_@v9Z`vY)kRvWs2j*`!3k=STs0T&ogSG8*nR0!N%Do
zj>UeG84tki7aIh6iXj7-jvf*(9rQrac;$7=dFPk${mvV`zn9@%L*cp*-6S@M8^Xb4
zJYad=&e{_`8WTCwLT^$$OUbVSk<;VHGvStN9h2(*vB%W55$N6W64OtZYmi9NGGfch
ze_a+V`hi9I7R%WTp9p7hlUW!Y{PfL%$w9ID8O|QM#c!6+sfE_Mv-;K!uJ~qmB=ZPs
zUW@2%*rkIr=8GV4uQOECX{howk6ZtT_GvSHLvD+xv;hP496%Tk7;CTL{3KA52ItTC
zNFsh0vblF4I(4fe8&oXyg@EoW+ewsU{6ka`uiF3v{}9OnLPaBYb-A&C)K@M0*Ya<S
z`So7)YqCL*1_yAcO8U8qu*|F{)WTR_(zQ6m%01@dyO~ke1w@1i9ixnQ9pIvZgMq-2
zBr+SxQF&@8v{mP{@>$~o;VT2z9)0?DZLPZpfI?Z(>=i%|1)ui)1XeKa?(Y^!B%}VH
zP!a&uY~IbgvpWEZWXIap_>*CCRPO3TmAiU~c53?^EZ^U30k{TqPA4GOCYf-Fvtddc
z2t$iOp>Lo`D4iXJgo;G&fxuBTr11s}uPT&{74coXmE}^ElC!XAe5Z|HH^ty0al=pb
z+pEO+^l|t@zh;{)9ER+>3kt#v49CI?%=|-7uwW>oBoYHm%e%lg$sfaWCVd@ao1Fg&
z^NS@>F%n}K<i#`>y%Q0uP3?SMFLhU;Uj!`T`OV@LjAtyV@oPm^9}1FhV>N==GgWL<
zF+>-ojJ{#Tl%3-gp=M#=c&L<;wjTw5O4lR-t^nHrZR(E@6d|Q3j+dbU)|VU>L}o+%
zYp=g(oOfN|jkW7F49!uzY4?Y=qs@P||NTjP|K;8b(|S*^vO-ZUALjmF#GtED2fBWv
zp4(jdP1Q~TY&!d7APTXHdf(~t8V|9qc*7lU!NNBx2l_}rJI;M;IYzyi&Id3n)IOF=
zt<1pgKI{9&htt4@Ae?%f2ZNDWS-oC$RmV+uuAa=D4ki0So0My)?N8(6e5&cs15P-1
z6(oXX;LdZidZjN27+WXVa;3myCQ&XmhjMvo5#{O@vf@7nh_tw8<j%dFW0~4L`Lq!C
zLOBW}g;5jk128s)ufv&4S3)*7;V&5^YU}<Wf65a@Al9Fnti1di6INPrKz=mu@Ina7
zHtqQZk&)14JJR{RibD`{M^SN{dWiijGHecvU$a~I*5kV=nNOPQHe*Qh1R#ge_7gYA
z+}QRP2}cBaXUsXt6%kJDT|Jy{#zM&ai*NC-@u21C-nM&H9YHr?z7R;(p#n+%iDEw6
z`wF4ZUpSQr^ck6$zR5GjP=$M@Bx%M))S6X0v(^*=+JOiG0t@BV1qe&b3VX|Ivm8dk
zY6?umaQsAo`@u)9c^Fz2-fJeI5~BOk*Qku!#MC5_Ri}L=meHn`TXqq*94wTtedv<C
zt5~JSy!f(nIhlG2_L8p4A0Wk@dL~Uc_*VhUOHAW!BwbNf5$J%Eo;pmmoL?8YWnh=#
z!4p}*0B9TP{X1m&`--<8kA(g*P{>%&&^0WMf<5c(yy)Lk6R_h|lq_zQe2b2~_?ImM
zzxRqmV(2b;?{?ewk57-WMTW8)fP6({n4TVwiaYgMjq@>ny1z_bI(y8sbMZv^l#MpV
z;My7Au;Mtag3zNQh_^yJrXA&1Zr1PVb0VhT>=@*DN8!R3Pw+L8E!~qI78}#EuSFoH
z_&uJ5i1Uzeb0{F}BDP@G54q*djYmFwYE1oVVVmvfZ)Bi?N*(I*MsLfHKLwen`EmT_
zOs#gc)_!NWVVpZc+#Q-aX3*$`@qUJ}ypYBQWwd;1Z8oP2%?js@mf|i~E=;hd=fPbR
zNe{*XO=l5l%Aw!?1)^lClO&+?6S%aES*WVvM9^KLF-nDdHc%f?9ZZfN9a$P0@HJRT
zh?S^jBR>*0r><oChhCdntZ!ZG@bdn?bLijEa7%+byq@>$=+qyFM5AK*cIsKAGKumZ
zBYOx#ub^rr2Nle#9I`H2{EC6>_`=xn<||>!-8gmDqnF4XftwOG4n_uWl|NPV@$v4|
zSKjnTWFUOQ{SMcC0znaQs&=##a)W9p=Q)XzP?IQ_4j5+yGo&|aU7N1pvIXyC*_sDD
zfv{Y#*Z1LR_7skL#nshw5vlg0ItFBY&!GQfSipm(x<^)Civ>o^OD@?V_*1Byi|-hO
zHI^A<DJx3mA4VfxmyP$tm#fP3&F8-ho)|s1tT`7P?4%TOF88;x4z24ZGrQ=z4$3N1
z7mrKdgHdiX{j4_ziFoP+-D?l8XTj{G)<~7xh-xYv*Pi<L^GWR=9rf0%m?Pu2j5zHH
zpNmZ>H^BE{pllP|%tL943?biV2(U^!GdE_mi2AtSA0H=Od?UnBP?l!U^Q;Fwo7H}C
z^x<P;V0T3(Ity{J^U=SYrahlAcY6vW=x=7X=x&8?r=*85)#I-4^U#Df*`}o5)TSN;
zdOZqn9zN{Fd#iKj=jV&nW1e)e<He!)aD)nOAs8u|K2B~KoZZcpnt$2jO||ySeX;Vr
zOJ<oeOpw8yjXt8!dyipMckHfpWXFZWeQ0TGCVc%$VcV$N{ihxsqvYOv=;+>$UAfPa
zjG%Il0#Rew(ay|5Vro2oj?VmsPTb|Bh$~L@%kI{@t202h=fPCW?ALn|7DP0VxJG?*
z);=)2I~Z%A#c~4+s2npQjZ`GZpPT!-Yhy^%(ggY_z!5G)6i5S-r>^(?=$;)`m}RNg
zPfVpKJ@AYpte?l>oqhdh6_2%LUzLpfa$(eSy}jS9<l4OSpR=0p7^REbyK2*(=;_}P
z(N%7z@$RWxrRHsfS@q{U?>4si)Z(DdugdbLeN1mXXS{diTg%3IxaFr4e9gL<^UZU#
zy7HrYH|KtHuPw1hS&q!zSWfx3H8Fj@E6y3?)pgG|bi7v0pjgLSUF_yKa0X$zVZPsy
zcsc@rag2dS-s4DGizsyHi;g%F1qpy8iwE}yjoh$>K#=|DXgsXw=ELDsuUzy;)Fv)E
z3kP*6kFe`(*vM6i#r}rF>FD7(`wtvF{bie$OfES08+ZE(<Bz6qRpEVK)91?J*Q@cg
z-KKq#csPU;i<{xlk6S$SdLae|X5LL>SJ2sX#0Yfdf@Lu*I@@`n*JEAZ!PqYpMoGs-
zig!sH6nSS{*@yB|4n6Kr(`|ZYOgv5xDrdz8#EJ@|FkG<S92wMP%d<{|&>BONhSAli
z5+?V(gSW&j$aJoi&K!5~#>KW<bRHvEjd9lTGapBSb#q2dY=b$$sVK<yu-?msTvZ;@
z8)rl;3C7^droCXO(A|%^IOb~gyJFD0-<)dE%(l!3+itcukZyD~!O;0KQFFsxK7I!D
zZ?!lX#9zG-X^jcES!XGVC`HLZUNcNIrkRI+$vPR+(l|ccdyM8dU^Yc#wKS)5Zn4fs
zT|JqQ{z2YZyU<w=h_Pu9%gK4}9NC_UL5Go?ZitbpCD?yFv)MCIV?wLBNea~!(9;vN
zJ!1u#{2#A88Wc_3w@!G?53$8q8Ea<35nU^H9Ia(ri<qwR8$>gv@bqX-CWe&K-0LK@
zdeJ1=_$x!vB>HpU)JyvCQRMP?S3@fb!x7{49r$pt<(ZYz8`ZXYGJ~h>`|sJJ$>dFw
zu?|A&+L5S_Iv*oy`Oc#6u3r|Hrff1^GkFTM)HVDzK><kE-U$ZaB^)S(3vz7DfE*k5
zFdyY{+yb35=(hgyym(p5T#)nq1Hbl{_f4v^peT}0btot)Jy?6OL_3h3|LwUW74VRv
zy_kx{nZl}yrjcYUP##{Iz)^-dTdb4nr5;E=kWfyoOxHFQT;Z!L^reH6vIQi!lr)S%
zf3djV<>PyH|CPHm+QWD|Y@W}dk9E{VE>q~F@tL+}_jGn;+VhvpW+^Gf7%WwwiJEjx
zsC-^ON{ZHE<?U#gGWW?=r;F<F^_j9UcXx!QVJ~^UCoQJP=4JI#NnkY4!wx!T12#xm
zW-jtc_sVv5Wq;TixvI+5)wt^Uu)}rzM?_nY3Sooy1E%Uz8~gq3UJU(YY~j$(HhbZL
zrDs3DYW{ybE?x$IX|=<vOUT~5K5f{^1qX+S(^3j%!+JW_YR?acnA_|4IyB5Mu2GT*
z7O>n+1|z5YG+zUJ@tb8X9b8mJC==|ks+p`#Mk`lLU|=d5`{&J{4*j0~Q9l{1Wts0e
ziE>=c5{cPSQDjz@PN)`KWO>bNR&a6V(N&QS)&U1b&d^{Jc;N_mN6?Q)vdB38Kh-9e
z8|{J+egTGWtWNlzzOBx>>8HM~WP!BJJo}M0>fcVABWxuP0mkXaNkTAeejkH2ap=KT
z-CUbS^%IX?ZPsq(nQ4rAHt%n>x)@F7L^^FT@8O%|o}=b2_#p=$FYhw+cx-41P3Iy0
zcWL$t>}(f!_pWa3LwvaF2f?Hs2C7l;c|@SIH%-4ck6!!p`ZrrWcvgFG+w}9;kpgB$
zbksq(%eTSdTInV_j?WL*{$l<X`z?3t*IS#r^_h!w&Gy&Y2+-Uz`pMS*3G3`Rb2Xlr
z%6lD<Hpm_FF7xJ79~dOPWlN#ZTj)qceMr(Te+3}+%`DUOXI{B)UcK+EUf1)|^DnEC
zgG37XXek)4nSODbyPoaO1#0ocX_-3e>5c=UT8PHD-7NoEW-alIeZJdS@=|)h=?Nqe
z&I<Qfhb%YCx@qT7Hr+9AsC^V%zghR<_TxC?Pv1mu?Z2?&W51EU&^wnyWLfkl$w(mV
zMy8I9M{g#GHZ;|qG%_Uz(9pa1)#JY2c{}Rc-udg$pu$GD@Hq}LZ(WKt3fS$#SegoK
zI^}tcJhrw$NX%)hne&Gc_9!!~u37f<@$X9K&B6AZ9MpKtCbRRbuV#kI*F76Q9-oZg
zLnYIgK|`R5=+E_oe3EY-5{0J~27Q)6wrev_xR16y-{V-W?>w7x?B+(<KJ<L`FUEA&
z=ph+qhjxU{U6&3xjP-btXfCd5$%z{T^fuSuCd{D2_ViI-Y%>%)7YJe{T`#Y39v=~B
zw}6iz%QwN{UHpyOX2J2>H?FMuhHMFRDcO9Dl(Lw?*Fo7x9AnpN)Q<XSO;-6Fu}{$~
z*192T>@h)fNa!4GBsXS*R7$P$zUnh>`*WF-!$lN<EEXQEPbO457moTGv-5FHt6i5n
zuFr;U7guKWkWAM&ypHWM?(si?Yf+%1-cuU)<26>_!{bKFb5b;Sqr!cjd8(A>hqxf;
zqU_$_+30T%5Og$4y!<@-_|TZO^v1=*l~3X8=j3l?(0Y$|ft+U<YOCfVyof{Z$O<7x
zgcdB#qNS{xB+5qmCrsAX9E9nPEEI8@<e;)L&0~Qm(IKFaO_@sY{rh>Inl6}r%w?;`
zYY{AZQ9UO_&Cgd%ShCu2$7yV<Lly8`OPS@N*uAE(CZoc|)>h)!e7#Zgxh^-FGq!Fl
zk@7dL3ehMY7-OaoPIJ5+#Ot`{R_m>Jn7Q_0kL42x`e^Yn)5G-QQTFJ6o0dC0orhEH
z_#=d(-i&14G<3{-2xHs%&dIcC=yYCwa{>EeXG>^rPcP}4UY5^jJ6=2Xz}f~2u7(DM
zojBsS@QHeY@gYz@<{$io9-d&p^*C0>N-J)3@(YF+NvCqqyFlS|9s{E6%u^n*rMrA{
zM*aJF&r3#)8$JfCvaR)%cY@=N5jF9*eni}HjvXn3Pkr*OH<?*>(K5?@TZx&EJ?NYw
z&OFpPk_Z}znMP;+-;Ty(49GB>$o27wnAPX4;d=Gmr+b^>Zus+BJ#RaYi}Q_VCT?@3
z&IsPBD}DTDgmigp=e2xldgS$dTAwrDS?gBoQ2tw&nDJ*l!8y)W^St@p8-DGJ<=%R>
zqcy$v9cNqKd1c$EdgbADYu8%o`q8D$Z#vPA;LLVwJiW6yj_i^*p0m66<mXjX{l8s3
z`tQD1oZNLwzb`%GySeZBM*&Z^ZLE#x_(1uVLrjgnpV<msF9-=JYP^tJ;G`aWNfXo2
zB<=wR!!<KODU58Fc=hMTqtnftzEcr$6Lu?*gLr67nu&c8+}KlLPRJdh>P54xdhwe3
zDKo1Y-aLJ?bptxDG;0bASjk%S&YRN?r*6ngu@ZuFSWJtSv<6F)j21503P+67(I^~k
zgEl<IcfG7_YRdYfX^S1iJOhK=usE#fZq6DOa(MRiR(uLajY93FCl6VCM-^4U=^KUO
zC2=_?8OnzH8829tTYgev?VTQvEjfKW7$*8IHwH`AM(XK|$GJ>rJJ~URF?BuPQgk92
zvX<cO`hG{fmQ4w|;YXq=@c_3dYPr~X=Z`2hyc}q=CR#e$W5Q#P#%nw{jTHK3PMFp?
zLyf}7E;<Uor@64ip1pP=1UtL4*vE-_I`m{I9+|v^#$7QHrQFW(j|wSNY21l8xI?kX
zcN*|T@m(RuPUH?;gi#aYGBASH+)f?_M{<Vht<vH(n_=rSF6Ln|#&1`Gx)9oAq-Q&$
z9f>i<ZD1u7&Evvh#*2A+b&hW4%SoFWL2QU_JiXE|hdUGEynjvDk*#p4yTIwUkc247
z2RbGhkWy}R;Qofm=$KM8yX1^4EQq8g5O*?gqY{{2y%pfMz}dqlda(8co6+c&&{8uS
z?vooEX$rYaZhvoHPWP>2)9b6vCgNur#B~a^LTx{%whLn3pieEJaKlWwCpIT>f)#?b
z3TJp(^?#&0@}ejHPg77V-wGH@ALarEYoR7o<3pXV!vBN)J?4jVIlI~C?K3!foEU;J
zceP4MB$*+o6SzC2p_FQ`{_rf<alr!qHs-Ot=U{P}vLMSrS9qm1nX0!C+j=ieO%E&#
zwgf^x@c&f=Gd757GvV%j?|bi!muAd$C%VqDSqE75=RwedYBMOOiBSE1*j~`j=bAh=
zCf{_f^YcIZI)kgK`+4p4UkRn^IRD#jOQyY}`yPIj|MCuk{eLz%#Z+HYWB&e$I$5dy
z(x6kT%M83bx~`r%S9LqKtz0Uy8~dO4=oXny8!7GT2I;&!{7KPy@0%y`6!NpE?(3Z@
z`gL`KEl-Kf89UAN(GG?=?Mg#}c`A?K%-l%b<w2&bsk&szm85y*7^6|WS{0+UxO!7;
z0#<o1DvRAuH$4{lEY0%MuVLvohnzFMk5LX`XR7`iXed4X@IHg7L}43h{DnkCP&C)(
z3tNKLP@ntK6n3)*LWU`aYIb@nE9;sgy^FANu?O;E2)tl41%`b1{~rT?Ow^scRr{du
z^b<Z=1n72N9jIu{>qNm*$}jx^cpmy9DEu;3EeDLJs;4u?1azDaP>j>{<+WH5Z{2v3
zU2E^WjbkXWaz8+jkrDHJk<NRt?SVnikM21@Wkb+(p>*HS7u;I%0+{vry+fGkr-q@2
zpPONfL`3~ZuKIZ?idrVIFn*fGE7A4Q^+zxuL*P#0->O{oouLO8z-8uEfS#U*ogjyi
z2;>{ZK!QO3?*n3w-~;SBdp>keu@lyV_JY5LXk07Us1&97@vRI&)kdGkHCm@bTQ(HV
z$ZN7--v0I2L^Tp{6wcrf3YN;2Pz6NUQ%j@>4pehM=``Cw6HHsSq6A&rO3fBwK#|i*
z3KR-NlWM$y2uQoA6@Z{z7U*JRfu0#>@irvo_j^N3q>@TTW)jeIm>HFHGE6s~aB4f4
zh`itm2zn4>hszv(j*U@(!x#@6EiIoL=(#K){KFj|Q=8wfE*r0Y2I#|zQJHY)shTEU
z^(FPbx4uXa!Y3}?-dCDC?p5)2NSh{}?|+jC4*k(EK?)275L;=M=1Y<YKD8LQvC)+d
z>0>MMgUK<hyq#W5-6>B81HG;(7wUdB`-=(+>QJ>Q^t{;z*F{IvC{hqLtxCS;O4LnR
zQikL>RAU-yC{e^2gkO5SK8qMWYp*6svYUviHXSVMehTCNL4yUUP$H<kwNWZa%;<MU
z@K57~afgiB-E`Vp=*51Hx8Hoc*$-NWiSSw+B|<wt@uboyyc@H03;W>1yO$JAV-P(~
zU@aiQdYhNHxNZd~%5-vob@V9_K7~Rwu|lD50f4i~-0IaMbj+axsZMI!j~LSM%}q)X
zPzN(3oW^RIIfUHJ3cb$d$_K6a+0}!@N|-)+IL%;hUp{TYNH05B>lc+x#%z<A+c`)_
zKjE28T>X-LEP^$I6i8$`ytocIEET)n<C|A-<E>7WlBRY$O;pAe(B(WGXI8x=7qdr`
zI~$((UfPiK3JO7h#CjSr=H5P~$eU@1Mm}#I5d5?C_jW%t7597la$|5EAp4}LD?Sf;
z1n{p{sv3Far^2|QilMPX9xabmE<&{vj@ANlqb!>sc$RKy(X%Kz$1SkkX3yUld*oF5
z7~AW%*O@7|7ST-Bs@jTL7%)Lop=w-IIhHCLl+jTy@NTh3PS*iW+f~!HLD?A&o*Jhb
zEl`^HubX6Ly4tY@|K>T;`uvc3(6kFFED}e3nmFaa&$WATrp^0Y<?k0!U)m1H^M2X>
z!;;llojA=p)Ttr$_5%gI3c@?^W8A1xzG$@yBC6iW%=WLF%I(YMBS%EqtNQ7niu5SN
zsG~RoxGf#a_P|DtZnM`t?~tLX?Dg<F7^Q6O*gMpr>&cEvcWa}2&jpgrV5#GWD7+xJ
z4*9F4==i(Y&3ic1qn3&p67PEw>2E5D+@!W*;N+*BSXAm2l`>P-yy}$nG2p136C2{E
zP^S@7edfmpa;03&!BQ&9kkc*gj1uJ@KfeI;`438SoN$A!Vn3U@Y2N%B&}V*E@_$~^
zWj_z^ug-4!{#Ji3REIe3I{9_A-r3_ehI-a1By#;sgN1uBV!DqPAoV=zCFUNZqUa_V
z--Ymo3L(u?ycxkqoBxW3oK=>Fh~(t9V$N5^D0OaQ#)l5u(8%S&wsb+Zn>m@>>WOZR
z)U+y9eR@96TimJzYD&tylsX2A5;Xa_4#k36)U6eah3KJW@N9pN%BfIrWINR^744Z2
zGMjLu=~>zS$tUrLe=RI+_LP25)_WoBil4jdr^0!sTI5;ouSJXPgX|y&$qLEui|n$s
zl^=vDJepndqq6J5dwm$PN2K^&9?4Q4z@u1nnk)qcQF>Hrv$gN_HwV*<NG&L%3(ne{
zxix;gX&#j-^ERbVGW%3|)~V#JgL3c`j99sMx~B;SbAYwMMWlp*z!(O7dD!2L1#YGH
z>HID1gOmnB_|>7#Df(|H_DcH--yMYh-9NVH_D8I5H8rl?Uf~Rs(>BA{H49RYeNIf2
z8PRa6;-=NF*5ul$@KlNFy4QiPn9j$gimEEAl2hcOd6p_{=Vb90F+wVZDrlk??BMHE
zf~9`;3aTE(JLx@cneXB%x(YJTry*0XTM|=pq!g0bfrhL-PL5}gV@w$SqSB}*wrGu*
z;Y#Y|2`C;s<8>axb^in1XBpz7D1}Ol=GSJYZK+Ouk4_4mOYNl_YNkF}o0NL-EqB(l
zQnvQGN`X>Ao%L`X*l}%2DxvAzQ0uB{md4uSF73`b)c%Vkt&){tL7h)P@yqYV**z1C
z{xtYNNGN(rpyXsU@Nyu%(C^EcWBz8I&r{HKOnm1`^|S3+cyL@xh&%7~7Eu7G8pE<L
z8Q;e3gYk&}x*m~DU>ZO;L*EcPlsxu!x(R9{CiBtn(dA~LgxYbif{zMa9vx3dC>CbO
ztB*j%-9E9&g5V3k1`c{GtXH-oo#~t)H14|h5kEdLX0^XOUTABa`tFEN^-Zk&(KU(r
z`3|}K6q32_OmBiik2|8H#Sb!~Pv_t2SJk_%$t6mu^YD4P6k9%@wni!m&tW0Rs(jA&
z<JjTHe^U#^i=Hw!$&ZTjilEAjHF%2dpDRAkp0#oCf+JxwZrBIQ?$0^#h<FNMr(SsV
z?1vRkH)z)8#!7|j-_+UO-TAk&evgyVyeJ%l)t5?{!sBia!q}nSq%khh^zL9N7Ued*
ziigb;pVn4k=H9x+skM}cd_K;lbB*p*&hip^KYfQjU5C>7-^;H*gyCt2S>?{ib$vVN
z(yl$uEUM<p?N9KDRnk<OGb=N-G!#i*?)m8=_i$9_FK&7yCp*gR@!t7$<7dCm9((c2
zn^uwm)v{n@h8+*<Q9iqHaAKf#s$i;n=Pv10^WEd)*Kv{S=})T~Ts{9AUVCN{l1}Pr
z@rNbRo6+4$=JLwf5S=G`diiHk$q-f5%<9L5B^Y(QK~zf~F$itzcn^jB$nZ7Pq13Lv
zt{a|gt&-tfqOP?>BX#>@;OL>Osf*XExQ8UyR(0RE?46-p1s#?F&kPG48QjF}-A2dO
zf~k*FRHu<$@@-0ry!c^&#r{`XE%-D{eXhQI_8Yow9i-8)T`6oGh25``>w93+b;U_X
zsx(Lt@HyLg$_^DmYh^eZo$T4+ZmcOv^<^6VwQnq8MNJ+~YIczy**M3{r^my=HoW29
z>O7R+<2~w;hG?BEa*iqbd#D`zvisiB7zboZNeQg_N+lU*UJ=4^=vOZ_HMmRg`^NQ;
z%>}>8r-!<1F0A&8?EI+x@clZiPpESq@pAUQaTI|=?RjHcLhhVgHjeJwG6_=ASjw(c
z+ct{Zv7V<ovV{(;jsEUc%`<@`GdpIe-Bain$i9`TIF2@`a{Ac%dYL_n2bpMIWjqxu
zQJ2u~pD!#ql+ft+ae3{Jm~rJ?&m$fin9mw7`v-jE7_lG)a*&De`sqH1czWwd9H5jD
z_QL)0R}Y)v$j8y9t+4g->Uw%bC@5r0Y{#YP>2q(k)h>C>z+=5&p;MX5MY8$6)grxA
zJ;yqRwR+<yxjlYo77td{GuuQ@u}W*bz&X{^d<v8tq@7UhbUnoio<UoR0o6_}Cl&D;
z_46+}?pv^Ks+rhKaiZ3;j0;DlQ9W*{-dAG(W2|19&d8P16q1i~KH47i?_+D2&Tbn9
zC{h)XcScU+{%>co)a&kc7JGZ%CwB(PZj)<KS+b3e;G-$ttf+(axxw4`vBgosjp}NZ
zIhu13<J1}59@js;dDJnCs(q_dEhy&@Xevv!C6nmT?NhEg`em!k=i>pEXk1RqJQ6PR
zDnDYq!t%|#RMxy|M&9ndoU@d+ErPA8Zl#ZckXOZ=Kq5g2>XbP`kc>}tv@O@A2Ga9M
zD`zb@yNZXOg<cv(#7ccOxE-~M)I{KlBB&nLIlEp7wPlbuil<x#N{BaCSG<_;;S%T%
zCU=)yUD~k|!9?b#4B2A@lSG@(Hbd)rSh0gA1wraLhTx#O!F^Ir=yH$hh@X^COu6pt
zuST?Xc7|;SvVKmf@n^^M-;3wN=-K!1>&FTiyIi7~7xwpv?KPKbRCN%K;6wJcXomcz
zjZ8s^2p~kEs_LQjR`K=pt|Zz^>w6Gy)A8evI?-Rd!7l6J@_eI$&ut{ac`vo>g>4rh
zx$J@OUX`h2s&=oEws_Psc(0{SEAr{*a!6Vi;-e}WtdYgwIa2#tosaW989~Gh&daT5
zIQqRr&UzU<_^gx9F%FR771W*)<gZwB>ZY;^PkV>$5Q~z#$T)Dk9LPAWxjnR0G=>nI
zcx80YDxH=7;va-Y(AGbcHuK+O6GEMP>z7j^U552=9n-SLp6H~NRX1=OqDOPC<i->;
z)x9hwD_Zv~=WKC;R;o5*t6xf@W~7&rs`OhDuC^-IHu9A4sI5wuy7xO$xLyLYSJeC!
z4C`cap_5m!w@=wRu_+HNw0;#3LF#uZAn6Q`Q8yeLRc*2=$q%EBPk$cS<92S49kx^N
z%Ng{v@4&c^*HmoQ=DGh*w!M!ezEw%8skxNqcJh|jDY{iRGLc!((yM?u22_IJ=(#)G
z$p!GIOZ?urpm<{^Mz%cGG6jp)x~R>>6)2^Xa-?yCg^O^B&h%vpji+?y9{GenI9@wW
zQ1JHH%iGP%bywA)7+&o=;mrEJdJaf&WJE4hOIO5Ftx<{aAe}jqaYujS<z4vJI?S=Z
zafSgTiOOT;Ptg<6!;{X{2_zv1LJ))@2u901I(FsHF5CM!9_V^GI`|vqKFAU&R#JC*
z>$V=9wZ9B!7}kv~soPp>oSw0x7w;j}vfAI(n{iu|Esw#>&A^S9y=~U6w>n?d4g%Vv
zpU(@RuY-bX!AdB}-5zEqbX=!nbXL`==Tpm@SiH-nPFGQivD&ayOm#Gu&$X;`9M`uM
zC|efGhI+pyEL)dTHQKtZesW@(t8!AME25=KZpyVzh=<BFxJ_Q{Gjs4-?_3?fxq<Lw
zL*&^hLd9*>M;AH5wdnK+BiyPjFc^r;%-{$mx)XEip4XPo-002`dQXb7qceG$wM2;{
z-94_;q|t@Bs5ofbruz&kiNbIl4>!)JYCg$*9JWIK3J}{w6(5dqwjQ3Bn~p6woX4bO
zsmivptQD$%2yx8g6Q7P^c4NV3jK{jCPdARbA=7ByHoZ6#eg*Z^`b>&5FgwfmMa#{Q
z^@(F+kRPj=p+Dkc>cQT`4A?YSDFTRUPmtmTqOS-gkCTXIaf^O`F1XN6OVhKI0z4lZ
z1&kPoL3+$Vh(R?_2CYbib41LN))|}50!7|nK9Olo<8!Ki`GlTdLAm}wSU`}7LIBAr
zrlmC`rr3>XDM-pts~NLtvN4TCwJCsv3HHFDMd}(+OBJ#r#t4D<)B4;DpT+)yL;d0b
zkN1D||ACmqJjw-F41xcuQ9%xborAF7^+X}W7$FXp(p2n8I}%_?9zwu}Vu%q8*9gSe
zKb}Jyf9a**AqYr^Gh&hvlY}Kma4(G{x`r46B%XsO`&b-;1b~MWg9w?{j6@1ZxPR+P
zTokbPCGY2Okt9!@(KOC<$qx$=D2q!-uC;EPO>{~tl!U>(F{LW01&~0f3PLCxprBCz
zCj_bH$QkLv9JEdpJZN4=jxF|Z*GzfZa7VTjPdx5<0uzA~Klf(M2-b~f48{e)q)<)a
zPzsB-hBSd@2S9@uhNU#<Q%;Bcbg|b=keARgKl8HmtssAN3S&2T7CJ-zwZa-`p`31J
z(s_(XhhT*vQDfLrrcz15l7=aO&^?%)jKY9gQ>u*s;|4^BP-LPoL^(pBa(l3NF+`lP
z3DziK63J(b7rt1bJsaF*Xp)5UIeRBo0Zxo#!yzo>IAew^*#n3oq?nKjc|z23UlcSB
zL5vXKgky#%gC#~DW7)XojZd4()v_c|fEqTbWrdfafxy`c*=!dTn<yq@z@VUt$bpU)
zsk}o*1USJw=_*dr1*NG6fkJnzJ_V%V;Gh}|3EG7{3Os75*<^>of!a?D3B?kj(4NIY
z3bV_)K)sd-djzOf9us+5AdE=?h;$*yBWV`Mt5F@d?XV0RM^Zvsrjig%P=Q1w2Uv-|
z3R)r<1k@pzXI9s=y_LQuK#Xh^;??P|K|sL^f?^vGbc3x|{}4eo2<UMrD}*UfI0Rh9
zPLV@Q)5Zgl(4fN*u{Wahk`%EI_0g-P86%j8K!-3Bz>-YBv^XY`Piaba13WOMunUMC
zXN2i=$cDz|wt^d=LLd=|U?2=~?eck)PVo<u;m&opl73kJ{e<ZB_E4{8@hv`I1JHjn
zBmfZdsv;nEoPx8cV8h&}lkxN-d6nNZPvU>K%MWkU{KtMjuk-u=x&89`tNiNGGV|z(
z<g)UCJem}sI7g^*K<z)oyzB_;6L@)lRlAwOyg>DWb*ibOkrU8=iYcu^O5NHS5k5{7
z0Sl*TTYhy<km7PnM%HVas%v9w6HTnMZBj-NBOk&kM7W@EvWM!$GBfzmzf<el?EdRF
zbWkK15l~#&Nw6;{h=BWIr~s1BBuNPuwjZW{+8wj|bkjKO41@f_1%<|-CV)q}A@^#1
zM!)tEN23502?Qia5dcx|GC&l6`Jf6r`r14-swS6ziZC;k1o&C>3Mc#lKttrz|5cM7
zXYiojJO8~*m6m(wf47Uk|IGk!Y&WY`LQmfcpVz{oyZbo{f*(iD5P$%F*XC#VPqx6%
z&GqL{eaKRzCcqx=>qq*;AeaDWK$yP(@9{m8rX`^{I)R|pIq69z9T!?;YKk@9uVS3X
zVi*ElZ+}e3xYK^Uay~4Tt;$2VWKU$9*j4LC4+=qx@BbfaWS{j)M;~f^h<P90|C56)
zIlldAGve&(LyMB#-CSYR)3xn#^v9REUen1xel%?Jr{z8)y6ja*K=*}Gs%>3{pk;;}
zH^$F8wyuz{_0XBYPSXd)uPuE1d6_Gp#PDaG5}(EVjxL~NU<@iRY>zdGYn4JVvTgpW
z=DPiL^zCn-K|9{qJq}$tdc+u}5PBh?YVsLdxu>Kb;C}VW2p%W<pZIWv2NXZyhOt3`
z5UP6u9Pa@CXCUBdK-6N@0px@tIS6zx6l{M{|7sy52Ef23i@@eslrTC|NDv$FeP&Sa
z)3EI})WCWW0E8mgU?~K^3{rJuRxv=z2oZujEE=7;4^(mbjMC`hc!W`*;l|)$3WP5y
zObV2Bq!|HC{(y45@DsKRK?s2?ZcyB$8nT53{X#&6A#|HWp^iY2O^&0I_kstMHPS%U
zHzCOEN2nxSM9l%HkVX(78eGurxmX~b3L%^Vi253-g2z{aRS9CkJkEg9`K1`{z#T@w
z*sXwq3&I>lrlf$-4^W}N7#F;#n%$*Cs54YEV9eM`rii-4>_=S>;}>EwL7&IaZ@|vW
zzX%+mX6rz4$6`Fd=oGd`j}Kg;$vhWy7#gT?ga}zWC_-Ap90xX23QWvU2Am2hhMJfe
znGlm30#F@ABnzAm8cx&GWTO9Yp@#7mOg6*>9YR<gz(61fiYL+t&+(=}q9+hXf^;yQ
zhfSv{qE!V{B~no^E(Xd#Jdz2ZHal?;=833n#0e{cc_YfI;c#v&hxpk-TI~>O0aZ^E
zNU;ca(P7VWj>FMbVuG>Hc$(`p&9;Ivb!HG%;0FQ$?O;2uUIek^UG<z|c#CD@iggAS
z2aZ*_LjtMgA}icMJOl$!5YC85LJ|Rus6!#T(6kIjjf0EWg`jJV^`HZguMmJZfT6Ha
z0uTqd3Ux)t5)0V&oKB&59z(U2+;j^rvVlRk5)fJ`+@Q!VI^+U`$-rppa5h%>*)&WS
z))5Y*gzxXG!9H?HB!qZ`LmufT($DEYlZ=NLaX0+H{^uhRkP?!Q<5a^f3-`n9?Dnxp
z{Nx``)%54go+rfo$!DCoMtA!lSjO2P8-)9~J8Bq#77;#?1Sn0~k_R0S*HhH;qu71z
zoZcpn>oKPm{}&@u;O5W2Mvex~=DP5CxO5M_j}wW;mxMcgzVS<nA0@pAC!k`VG)KCR
z-ai14!iIHCpI1lMh#`sxfr>-@H23Aj!_+whK{OxfxZUkj6E9n$YQQ+D{tgQL`gyz*
z;&4)h8;4Fd$MQh<6<{$S7Xx>Tq!^jNLJ~<78dH-<96=pOCV|u}6Hq@m1H!-)CIseb
zMjVp_5Z{6c`u(*x%#w>QZb9{c7MSlC_wp29@%btFgNI=_oyQkOBR>QGxiAZ-NVzzY
zi2x7JBcZMOY*;J-LkDO=KYmajU}Atvh*}I2w<R809b{u8Bp}+-`JV&RiPr|${l-p3
zf&svac$LP}1O?Y(luTp{3Pk`9>O_ct-vjaje(o=*u{HuefFShy|2&Y1XdZ;YRaD84
zz)o|c$EnXmiXAgO8p}X~#HegkuVW!n^N#F`sYvOLX8$j{Eal}HHUNNpD^g;bg9yY1
zVq&4XuP8fJ8&fejWM3ezp6b%9)*QSvx{_RZpd^`XlLWIm4mb5R&yM&%bK$3B;m_nW
za%uLw+H_<0HTTA!Edrkok52ppzdp|n>;3GGcR-_S;zKMDFl#eb=oc?Y8B1j#a%~zw
zh*_&>7u6m`pjg$w=CmGJ2YFb1WvL2`-(Vq(3#ZZ>H+P@ss$@4dD^P;M0zv?P79r(9
zm_i=I6eSQK5KjYZF@h8EqsXS?g7IIp-WwPPSD<z-2ao@TnU4U_14yG^{G_-Uh0tO6
zAAEKL^iZHV@=}3Hay%2@zwi#JkQH#0e2&L5-`Mx*%oKzH_J*%;v>}t3l=P-*P+~r1
zur%7V0SG0K*l`P)q8gF?)lUlT+<<PROqS*%F^SKJ6gCEQ0WAv>y2LN&OabLG28VO+
z!X8{8Plwd@w$*D^+vo+jwtii>DCB8q^_Ff0D^9TRP$2~^Jctmb9Z~^qh&=v%$|K$p
z!;wu87tat8q4J!9fc++*a|0=aO_#v52nbXySad9~Y>Q4m%b#}ZAU;Et7(Oy5-a-)w
zK`cm-_^CWKPXZSBfImR@tOss-zD7-ZXlN4<m<B^Z+6q&v?1)oED@qy(^o%I{prO$g
zWf6wz5)lWyJL$>;bF=?alvx-MeX$Eh(4mNm^Ns<|?(1(ir%8$@qN+Rqh?p#<XU}et
z)*?hA8bsE37`_=g)zXo2Bt|eg3Q|mvnNCuW^cX^)|7{2h562{7`p|-6(F4*6;6d<4
zBmUmb2Z6feHlgbRFp=7pO4MYQ&1ET@Ql&-ztm^{EAp{62a5N7epTr7K==pRj=*;vY
zoCr^mzSHdk4}h5Ohhfl!MzRR2oC9$Kc}DOReH-yEp7)`^c%nemtbw5HAhdKI=g{0>
zI03tw-2>be$su^A1Spe+K&_1;bQu6bf%bAtewEW<GBs;#S7lusA-M&FK#&g5gi~@=
z5+orYQUoXjgg2bP`!h%0XP6opr_vEM7jcmUvV6=#Bb<^2&TC+8iGorah4~ni!yc)X
z1SU5hP<2q))44p)m@;pG&Zrw`5@fQ>BxDHzgd+&WcLtCS0h31}Qf;tlXa))$#InH6
zDA22@Z@I*hNJCSGj*k3|O<+y+3cFu91^Sps9zcknm$3aYEkpG{KXlLjhtNRgH~#ZN
zoFIGRw;_=g{K$c^4~&3&f`8>C0o@odKbUl||HdF<AM+q7x(a=#S{Tpw$p}F_c+V)q
z)|651`TH<2J=#?erW!;&zU@C3SQP(WP8Z|ADBc05((e463_d%HTXv5WongR*t7<rM
zGt(&w3w&a&h?(#Icaz$0p(1O90HUH@N@6QaLJ%Mvx{(<}y6Vo-e>LDOE)<ylltOD=
z*zodw8aZl02I5sab1%(4yCF@?%H>vMrAIQp)*moqw_fPtq6jj*=t(H1{O9%0zJFoy
zpGPMbll{+akM4KQl=tXm_q0>F*Jol1JMZ3>Bi?9tAKi@ebgkj16Yg#vt`=M(?s_Rk
zKF~Pvf%<%GzaBgHKN+18p$W>0LcM&g@O{WYua@&!ArVQqIWC7VhUXXR_R&x)Agnw4
zvvGed#=!Kav;g2Iydj@gFewH2J`9j1^b`UlrqT-Z*=pv`i+t_2zRPdsMN0byTp(J4
zfb2{_jR07SvxO`2hj|IkPupZ&067O%(F#~CKmsTp>IPt752)ZC(*X-7(xRdWr6`8S
z;!uEmMuSO^1<Jq<fuceX>`vDg6zgs#j^V))uFx%F0Q(=_A9o<;=ZTCI?qb=wBTWTC
zHyLUJsk?cQ{|I;?5PTpV!MXL|PI7)x2SAGRABbu10pj>N+$^FQQ_`40gd~uFNeI&4
z3}_A}PVI0Z$Ibp<IP%MBYBtEv_){yG#Zy}aixt$hjh5SKDll5h8mmiMHie27lGZ5M
zZG~8<+FI7wRa=_rBPBVB-Q9Lbm{lZ_Foa`@b{UirAiM~yenlU{BOw21iR~f>(|p6$
zY(NSKlt6jd@<R~1F-sxgHCD_L#NGw$5R=Q-!YuL%`X=dRV2ds|#KC4mW@OUeVy>BV
z)8%Wt>X|nx7>0+eI}13U0DUB23A8Y~qysGFuo}LVT=8ax1UV0284464IRXLm>cWml
z8lZ84JW250fIDKVNI*cwKN28f3GcWz5{EJQITwOpQWW+aM6`8C4#YcRXyXNjP=LF`
zwA^WVxoSBnMGk?2C}SIv!88b$Bh-TKK*UNQwH009Zf6RDaY%=7-7h8toE4~0Q79fQ
z4;pKU0bz7HM1cX??Mp{o384_WU<R}XLkN9ChU<nFb2~rn7v1}5_0L8Cdf(8Y58emB
zC_aFWNFVq|;~<wA1UUXQA!Jke*ez2KG6)xscV|mv{_vw1CiqlK{7*NprB!-%|0jbA
zq!FRPh%&I`>z(N}SRpf}d~ksSm{F0Rdi~V~vY7-U`BO-+Gk<@vj8}^$Nij0*)^WxY
zC3Qnhidvx2tdJRmveQt@OR`$0`tAUE<j1#@Vr2MprTmdmr{i2QHCeU%V&oG_U@-z`
zCJGFh`Fb7y*~mLnWSSkw1OhO003;u3n)HtES@KEK*z)zL&1^@;8tlDk8`*2#Ps<0r
z@`cNt_atJJKOBpT3dg>5$LaZd;ne3;9g1w+``Kr%EXNYrw$9p2H|D-}o2BX8db@``
zWGV4Tc6tgkKqhw+d9~Dc6cN^(T?z6<i)B?QEean9v(h8g!SRcn#-reso*yLo50YqZ
zNhbvPr38}%ifVUVj=7y44(FR^2M&AH3-Qvs`IE`~I^Y2l^|0(txdFUCEDXI5kP_5|
z577Tf^C9mbkL&;;^+7Dmti=5hvZ*dQ0TlhA;6>2Wz`<o@NFBi^{GgEF$PT4t|5HmN
zXh^L9|MO_^I_>gb$?$sy3=s7!6ItHAUHrKTObFBU+^nkj&5pi@jNIJu!K9~(k6Dg)
z^UsR%fgkonQ%kIvhaTDb+uP!&3a=J;!;qc%ajhDVgoWglt}>dDs?ZMTQOtXvts-2C
zl>~thIhyaVr3bWuL(T_93=@Lo-8g}uV<3Z6yPnhYWFhhW=a^02X!ZwH^Yc6VOnJhP
zIqP&3x$PnUYFKwnP|j+&68IJ`Ctx^dl-BB_6v5^^<YXidfCJ94>Oi>Yh}iTD7-V$*
zJ1UhHF=_DzXes2{meZc!hI*eLrgh*12RKxTl`-qT1Iq|;#LMNuxMXK{XOU?GpvB*?
zPT*m>HtsK9zBcuEsmF(kWPlsPWIPch2?h(&D04{cSOP;@5u0jdvwi)wy*Be!TH1jj
z_wm%v0tz-b3PZg8W(%&}UDaFUu+%`@Dv2WkLV%f^)pbo2IRzuy(sBrlio^mACyA#5
zjjT2}3fRR%CJ(T}gUe8xL``CN1=1U|3Mbq^F1GL~D3le}$q2p|DDZ_z+G2y=Ks-!I
zBxIyb$FV)_fP0=|QE`K)cRaxH>Y^98`{UsXdXGdj_}que!?*y*?McmNhnD*45`?-4
zVn*pJya|>jN62OF^SCO4);2-vgY4`I@1-s_*u=;>1}=0zc@CCNf^BmoJd?m6#_k3N
zC9rtFJ1Ol8qhd3&BFGy1dwIP6FzuLxJ&`bVdfu&ov<mQb8_LXJm-7m*z#J@wBVjwz
z1c(kk%Lx7~L?*-_Uo3C{z#hmC1{fok7qm9pUF()Pm=55;99nz;QxpOK3ZSPT;B}eS
z{YyMZcalm(ERivULUrWXZ=QI;1If?^gCsXD5SoP#Fr^L&R4GNBp_>lEz|bLOVvH!6
z?uIaTK7hgAouTxdc)wTx{eM@>0eY}f87iO%!0N^6U%qSKy7@sk-dd#@RAH20Wu1#2
z-KbLt3<SwYA!n@xLy!=t$rwP`E4T!zk7?XYhKYrs*&PFk&7muegGe<Cq#+l$5{nBi
zA9+FQ(59hD5?I2g!JdFHIzfoT6hg{X*$N0;41V<Bf^+jhez3L}ZaAuOMs-KP4%qca
z9HHB`6mY1*PX!aGLeK#bEs0_%$?mmrY?UgOlB9=dDv<W33;VL>F<1fI9R>FCSCY9w
z12EA81fi&f5f}soB}1iPzIoAII3}vpBP0-n5F#6ffsw<8BLXW43oRy&1i(QcAc6uO
z4$iqJ07Qb3fSgmy@y+uJHq{FhVkm*Yo&&JQ)%A(SWKDJ2T408vLxBL?E)o(l5DpA_
zs+H31Drl;e-)6S!`O5hIJUjUb@7tZiA?#RSS?>!Th+xp%;ixw<QwmyP^I@4w!1gZ6
zYzmtuN;Fq$FrJ_+Hx33?l21ONRX|?{ittaP;mP6@iJPVbY~o^v8_+S`a{*{I$22gS
zY>*m=hA<wJG(#vvIJCJs6uE6d<Y~cp2yNAowB0s4$ZLaQ!Q>_!IyB%mVi*`X#}iWu
z3PPOG0o4l<#D-%{7ICp13p6i8<Bo$H14V-e92!FqDm4c|&fDsSrbCAW+|)tBfkFlv
zU8s=2&=_*^We1JoyJfBJVXWTk+;qeP0m2If?R&lSiTOYe-a~??P^SVf{XgwWV?X;C
z87dx>rnA`(WYmO-%jjNcb6`>R1r`)HT(3^_#^Z1U2~iIJ9?&n|Ns?ocFG71rfIU3r
zr<8}qI$)AL5P3>e$x1Rjr8P89Cpy#YSrGP-%pAc2u{Z}hFYPl-B<0qJ)8bEjIQ+k0
zTg=f<%ytOk2w(hR?7T#ZBZevt>eC9*-be>3A*h=y4kwF{@E`&jkoK?-ltlHAvUv$Y
zg--!nqWY;JbUW}9TtsliQKAF`u>*Jl8ng+8;-)OQN?({zZYYu<D?_3%0PF6V+aus2
zcNv#H^-VDX!jm9%Y$`O)Bo%gZ3?+ziAA#s};wbd{gy3u@04RYFk_yp~HM9cGAFHf1
zGP)!Kfx_sSk%B>hM<~yTfr?*a3RU`Kp$_Nxf9QHNxv{N{Y^Ac6#<o(~OJyyTwo=(k
zWi6DpQrSymTPbX%vX;tQ8ravJ$MTB6gg+PA=r+LNR03FbK~6piTI9&5pw&eK%7=qP
zq$bHqp+IbYvdO5PsQ~TZF8DBtkb$o8-^T>?gi}%$?#w-bbknia3lmL4QPrnmu*g6@
ze!#Gbb`cNlg5ZLri}~m4inLoypMLEr%Zy(vr@|Kqrqn1N%0q&nDvV+7zp?zIdHFFn
zx(NV>)sl-PcyK8A!i8{|TctwObhSQqWNS~-%de|Yk(Gu6-k)E-QDk%q%xU3a&(>$p
z=+_`Az#wl%MO+EZEJOu91|WNWbT4jH1azBeytFzTfDo(*9m)3U8T{V?P5Ccz`~$Eq
z!`y6e8kHgn95TT@r+t-GO}-j}997Sd$`uph=vSTNo<B4_uxOL}I#2AJxFgV0gitsE
z{6<JFsp6YHELXt8=jHC2`9v~LL%eZ<IEDENVgxT0`-N@^s0pQAcvExWp3SvP(Ug!1
zb`MBe8U=I$wPdj&#ni|LLC_*nf#1QL14i<6Kvg+@H_Poqgg{IOOxkQDsNhMG0zHT{
zvn_$n5W~~JLFWSE1OymAY1Em7!HtD*SeQtXE1ZVLaDjBR(Bz;!L;z^e(FcYDNto+M
z&`gvD>?|Oh7%A{bjf(;sk=S-37(lYhM8sQHfIuiX3R3YoenIJ>5>Duc`ek`6X;o~R
zv0G~Vbt`SI`DeND?eA#l7?1W`yJO6U)2z~xBO#niD2Laj9gs9!g(*QaLxGGI#8NOK
zq%ZTL&|nN=bgj(!!-Jr<0%nk)P2@8K!Y7!pK-&Z-r4D%tW+AJP-vK^g&~TOpq&0LY
z_ZkVK5d1zGqp$9V_1?@tvKs-ipl*rx9(^&RM{y}o{EDRR0NqD>3Mml@shk0*5DElD
z{um(x!2642u+pmup|XbPcd0={Wd!#m0keYCEN#gs#S$q}iNq9x%-{Hj?m_|a7bz_Y
z(tt1qA((|l2pwr$bLQ@e%;h90CxrkN3Gw8t>{WF6OZm7u;G$HV6ku@f_M&l}U~guW
zx1!VT>sraCXf(m}<uG3z3eYBJibA_EZl4~Zg`C{&nL9yZK_nr+%1KZNmWaquCK6t#
zzv0ghk`SwW{|qG13~=@A3=&`jA{dS|c*2W<#OfW&U-oDm0O%f(*oNOW_)X62r%#^h
zi)VHyml(A{T!W+?fP!oy?nr_d8~q85jSPVgfJ3_j6^Rma4uY8jh`Sv!8&#P*3St2i
zl-=|56+ffbU(M3~iPv}HZeIoW4B<>DiQj%*ogMRKI8u@mtA$Rn!a`FC`!H&ljXfq#
z+V@KHQkgSIK2j~GGzSmtj)4ZF@rL7LF;j?%6bJ+c0zm>GL|~+f5F)#gPDE@VtQyT^
z)$L7H+N`R@O4*r^ffhhaZ6gUjfQWG6UZ>MAFR(kmxGoSNc-fugC?#kLrNFRq0*sXO
z1I_#uO+nFba?T*_<rL!N_?PIgArgh)7s-1)0=;ynC3O(Mb_ft1cs9&jRkfnpl`4%E
zsW#l(ZP*GD5F!kX1Z-w|z=v~hcpDcX?9H;cj`!HUJDyRNQjiK$+MbpM=9`D9*z!(-
z6p=%a_8~?gFbNM)1R(>dj~#o87;={iCE<PNMif5mFCIa%Wi_>W3N{4ZtM5-1$$`xX
zbv&#OS+Uxf7-?0Qh9Wl{YmSIWFbMb%B?SaWV~Qz<2!Yl}ub615Kv8&3`9!caOA%-a
zRi}?aNe*#;ef!>Xo*)Ro4)lU1Rc@g~uW&%2W7rX$6#|s80Y5?t5ChJJq((u9EkSIr
ziuizdbK(R8!xQ|3r_!54wp&$C0_dUGCNDILVDMukSjiz2BtcDsxPn4|r4qa#SdXIb
z-dYNA)yC<ErCjd<&&u~daY4qUl_6%nzS|z7k-#1PvI_SJG!K%f#GgA~-+ev@U>K02
z&|L#~d70$5iq!=Z=}H}<X^^BeHo4e|-chb1u;`CSjvy>tv#ak&p@CP4??pEN)C0{A
z0Ae%x(v3=nVL=b+OBiMp6Y%|X7C_}Hh{#X=>^R7O=F}(M<x2UdNgUB90Xj614uT<N
zw+oa*v>%8b@c2*|L*YFsxT)|%!<U-SxI&ov;#_Vps*HgOB^5`r1OR|)`Ehw~e1ObN
z)=ic0sQ4KOmlFsI0nd*TbIN07h5^VLfr8E^=8BX+)D-Bi2rs6<G%CckQSQu12_!mn
z4<M#7A>v`X2uTkw8kz)Zr+EO#LEG4ZK6Fum5~DZuup)Z9MLD4`H*OSD;sUgLuq~pD
zhPnr?<`4=T;b?45^3?{IJ*3ML{Dm;>Eg`l8CIJGCiwG2(1Q866_^(Haqeut72vfBk
zuzkc(??|5VL;K1H`~NhONm!195rkPh2s@(x?}FI5LJ#a6s*|W}s%-j(gj_a^hH>8z
zsUd2hJzxRW0j+lhft$I86#+p}IlQe`<a!iwz-Cfo7jOayR3`$0&LO3$5XpoTfkp_W
zLIfHpHRaxU7%tfZVF*1;m<GVWgd7$H79j*S6LmODY5SlhxdRE+T1^<QGny3-{dP13
zgU*B)C^W$#GNvnhLZ`ftdayrXfM8=?W{{lX!g|s%uzR3!><`%Jb3VO1PSop!B{6YC
zeHq=#0p!#Q)C$xJ)C$xJ)C$xJIlCj3hO~tuN*Ht8vdkb+MbSu+q80=oP)c!sf93+N
zzRQqQkz@WrJ)Y`MiXs0f_%9WFN~t98rs~RK6=OWh-4EtR3<CHC#OOn@|5{I7>fsE0
z1||wNkq?f*+ZehFhJW+aj{-PUs2Pb&FGZF|7rlEM>U2`QGYC#dqIFNM)V5*<vEg)t
zgdp@fItC#s3QQ4}AWNdsEZ(q15E4KI2>}I4VkiJw*$6Tkgj<E=3;w6?En5aTG@hG;
za}&{38V4@yNeVP6e8MWkJ+`q=Hc`5VvztyKnHaJAU8@lof1NI|NkN$k5M=+a*nEF7
z0?+LBM}!k%5n`MG@9rU>j*nn-Ro}=Tsqq^8{PVhpX&z9Sb+kaVxP;t1qQ2k=V1Dq`
zgF4Zuz>HCmVLORbVYIuXJ0k)sc%8OXBpDOis`27-r3{?}hU8#KQz}iXCMRgR1$Bq_
zkf4!cAt15@4nWh6(x2dXF7BMTClxp&b!hc(s-e`l9r1+2watksX(3G%5E7$J0&Ie5
z6%MQ_fbiH5DQ!0vlsJQDL5+Yx{N(8bIrZXE-Gq@H$=P^;EwjJ(zC|)9b^@l+1%yOk
zAs*FwM0mmdM6>HKP~O`VHjo58ghfG0f}$dON}vSq(nc09S|}3%bl7$71^$<`G<?|-
zBE85^SW5^_g}tHM1{488&?kCw0}ioyi~@kr2qXdt0EVJ>q);xs<SloUnLx-Coq=Tv
zaplDIa~!rkv^t2r3=u@sD9AR20KkL<JJQH+Lr`fl3_$w_Gh*Z+2tp8qAqYY|UMX={
zoEUbzl9Gs2GZea|8-DX)O@XMeOaKtq!{HO#l*k}z9Kt%{<lNOLprb;_m||%g;by^l
z4(ubVs%S(t)J>8&vMH>fiGvA70?Je=X82-QqUMMX@^J&%D1kqmI+iH<3X2h6LHZBo
zSZu*xtWV=eG6X;QJw9x3%{r*6l?zIU+ygu1v*Ym7PRL5C6?Y{^gSepJVu8adh%m0-
zo1CfBTR8pS-t54FzqC=iypJwAJw$6uz67v(5Dr`lz66E?+L{BQ7v2z5fCjwGRIooj
zth7oBswD)e$EWrGFY9aJjD}tNgR%i9PDg2E?1e&%asnVohcY8RaX$Rv_lx^x0HDS(
z56TowH&6>dR4AgB5K2NoPn~?<?_qGTw<AFO|7TjFNjLV46C?P#&&)JpAJSKVs&@iJ
z%)lvbYC_$+%)exOyt6fQQ$T=@@r6Wx&e=TDLnNy)MV|CM*uy!=V8BR7NH@a5$suN1
zER8-@7uo9enE;;{C#VF0nd~|q@zAFS*GEK#CyEA3nE~!-PN#Tta})JZzcD68-sC*#
zFcgeT0FzifNFa4AprnK$3EmO8_xy%d+$;ms@+!@qLYVR7(5Gj;oD;r?w4snVW6SCt
zgbZ>bFbGBjD^42<gJsf`)O*A550SLaz)p)2tmbPe4~`Cd&tqDU@y!I1ylq0!;8IU_
zR5^H>Izl{1!Vvm>MVN|^fw^P^46$i%xrd1#%{C)M3Ze?5QA0(757h-dpGCqDjlOJP
z#a*{Bhst1klENSmNQ>!1+7Y>l0t8tW2ScA|kOQKFR3URo7r-rD;n#qc9l?`dNf-E$
zSBwB85FMZp2nfajPz)GuO-Os=bI?NZ4$u-Y7>tKRIGFE=;}ZVkO~Hu*>l4Ehu{$yf
zQq174tKw`JkG~vp3rq&rVWM^#Qe@jNxokHw_U>3mWQmA2F1sjX!NcqOKZp1BkJaiD
zm);8l{Jbeg^T9Ppe-Z$FN72fx1Lz{A(LS$|gP+2cJ)lbz#ZW?}Ltf3H-feB7qt*vk
zJbpxv2ZV{NQAw*;MwcpZJisd5n!u$)yG(lr0@O}YAQC@wHs7}983o;%Q|d^GatV@T
z5@FKrQwzpvW-so>yvDTUb{0`g3iaD0*9_3E1j!2~GEt%Nr3wb0iO@Kq^&|+8AevJ_
z2Oo_v4n-*LjEC&y*?X?zi3+aWCgh3=I+KKL0zAQsX=WCbXo}=iAmY%L3Xeg!T^4yT
z(R5OjQ1-W0TWTR|kZ~LlFbc;8M2sE*#2P{{422XW2JpufNX8J52@o8_z;>Dp14Q{Z
z2nLDw4j68J%!@|=0|bQ$z!+il1#(L*gd*evVL%vyKBUkV*3qHBKoS&OQV@^@`X^9X
zY(VOT6sZOPV!Vi8b!g4`kssM3Cuc1Rg*LEoxS((n7O-0$LRzR6FoX6oh6Rx<CPpB+
z9NUthlZPPy$Q3~UM6pX~0ze}qPKnLYRW5s+&dX#kqoEdq*b#1I&>RW`u5z_Q9Slg9
zE{78kz%Mu#qKKfA5;DsLkYQr2TK!7IvPuFh(u^BU0oNhOFbG)NizHQ`Foh}xL5X0P
zpu!oe&E<Keq^wk>Qxe1$Nl__@gx|eZy<aN7J74_UWDx%zltG^gp^;P$2IE@o5Gh2x
zfErpo2Nf0Op{Rr^86nX<P-<YHqs)jywrDOuF{K6z5Gi!dxiSf8Wpe>Bfh--1Mb_OI
z`$U7N-6dr8G#g$^q%sZ#C<HjCZ|?%12tKwi;z-BN5R2kK2jvSK4#1OSXoClw3iv7e
zZ%g>OM?>NxPaJv8xEu-aNDo?l-J!3Fo+kPZDv_uj)CABN4Ew|&f)@!CPjSputqJ-I
z)g`Wo20<XFZc%L@fwqO^K+!T56JrS<EQEtvjeFJe?YmsH;*_YVNtVksG^T2qw3EvC
zysf2^McyW4*ZF2}IK^F0AR<1TQ&{2YL4am6f#}H~2qd3e{1_-(LfdS%(?SfYL`W<j
zpgAX%i{^eS3<txgA<E&Q<#_}cP6ObffpW!;k72M_o3=g{6-7rUVGC44c%>~i6b|)(
zjbs>=f?cc^y!aG3oa*X_8b|{&A!?z+zsC1McbFt1?osAYWdPrbC=Ytk2T?eVIgsK&
zkyn~fyG-bdv5X)moZ=XUsG-qZkjOTP2$td)iE%fM4yXnWK=5)2*ec*Q3KF_JOh3n<
z7J7IVwjEqv62o#j&ccIn!0d9zECOnvZPhvAb`TJOm7<0N5Qu}WLz;l)a0Q|Ud{cSQ
zgHb{>Qlr|2$RU7%qHL3gFY+gByQ(GA`{?2TaRRY9AX>#u;l#}B=V@JH8vrUtiH5_$
zI9OaRJCiXk3<l_TtpmryAWqamkAb}Rr?Y62fE2Vls<b$P^m|zoK-0Cuu;><5*|>Ne
ztDzL28D)lrBsiTzIzXTkLJ^2HjgIg#FN4V>dw`q>n&hV<kin%D;s!0UxHcA%bW98q
zlL7r~Ap$^<kgV=)MOs7k&>IsBUZI}Cl=q4%sHk)(B(p|3p5FsNHSjb=+S?vDfcL69
zglzQdBr?%8d^W~9OW(K6My+Ji)0DGQF1SMVqhyb4!5^1S1X<nPGYHvlw4|r|w+U^s
z0B;CQn;1i)3aO0(K}F;E&SfVd*v23VqOBc>TTV9%P2CXYa7WxKcHQzIPn8u=lvPy}
zdT%%nX9(07NNR?nw7e5o520J(W&|V#0o*W3knTs>L*9f(kpRdLJBVnPLQSazIB^mt
z;2FAm=s29UDFUIcAwtm-yHJU63ltgxdcN-a`JxzunI%M+v#bIBKup{eeaRJI&ibiT
z2k>BD|1_X|WKcVppZrhzk{`OZFOk&sz`#mb>KXugQKX^+^M&dZy^Z}rbPm-H@~!9@
z9!LI5K842rKu6Q<i-@0&u*f--oT>M41>7VL)$KXu6Gggjx6oFG0;b>qheKsPN5E3&
z>!DtzXJ!u`KpF|Ox)6y80Eopvh{z)XJXa$mdm^{MezG4#&V6QEhx5P3=h1tPK3#^@
z^ef~!iX0EAKPA(&&Yh;G7QeAQB49OC*!2ZAY?TjEg)7tq@dB2QIn{3<fl)7swjPA=
zY^Ev}A~1yU_j*eRY(C7CJq|~J?lE^SLqybpWqTplooEIIFXh=vw5@utD}Z*-?RxG3
zfC>kpz(=ZnKgoM}|0jL9zxF;pHHZ$PkU|=?gF*y5@qn<^P>oGh`}z1Z%KN5U`2Jeg
zzs{*PA|Vr#-v_RTwZf2t|Im~W{$x0qw;wj)s9-__G}KRw4zp`jQq_6pO-wHkq4QL`
z2h^ZI)IGf>yi#OZN<lUP-hR(enKW|k_7GUXgaQUUfYtE=_ykozfP&c&g`r%!elcT!
z#)8y-&^y~TbbJP4uGqK+#99lq5*&jEH6IfIz{Joj2Z(f`a2AqR(&kS}nP6gT?_=^l
z|Hbc3@nk}fpOh5#LkL<G06gLQ377Ty|GXqpMT8&7${8ay;c8-T@+d=&Ya|MW0Gdw#
z_nv;^!0K2oNRW~~AMnoT$Xw=iG`!9+qhW+2M&`LNl<&jDc(7bE*2O~*_)IA{M`E{5
zA$g2R?mwhblZfE>=j;VHw>$wg;!ne1K%pp@7lZ|e@P2L+@(35c2u+6|1YwQ<zl&7Q
zP9(BWNGA9*NkxP=r3)xFk>5$RImvi%n3skGYX&l*_x%20F_Wf)MDK5#Uc=J(@t>2#
z51mIYJoMw~hmpZP5hJ^(Z8Y4;oAL4vrgjPe=Yz;EUgKdbNrn^?XzgZ59Lv(ufT)w7
z(M6e!6)5HTh^%6a0Mt49p6;eEn~q_JRa`5!p_gM06G~pI%*QYx`KE_ACdLZsk&*|7
z_-<~qQX~L4oq|FkEbcDA&^ra(h?;?pOOZ<;LJ;V5*wclpfC7TowAiio5efmK6M-m~
zDfzaJ;R^%ggb1;_i~%g1;>y&~J;79pbp+&4&aH)<xt(o*7*HVMCw?WY25bIlBV+%8
z6R3h5QlS?JXhOPD`D%}0Z^j!vQUg~bx$g>ENBsO`F@jesPEcJu5IeJ~cZ4NSaSDI&
zAaDpTez}z=oV*AIz({ui)I3pWO7Se9*KG(lEtji&pezKN1qSee+VDy$(4&4WC66H?
z6}3RL>=Wd%5Uxl8xa_zo*Z~zsR{Pqm%BPvoC`I<g2LrYWj%LCm8#2DV6I-IC!0oDW
z1zZInpkP1?gg`S2!0o_63s4LZ14ASPr`HUj2ai)zWH_CoCV<!u`skWN)`U5LbOMcH
zQyW7R1}MEqSzDzw6hml4ju4_qHbR4p3L+cLiwuzikAuS}56T=xKZ8N4CdTAAB^w2{
zmkAkE2|^S|AX&ZTsu(H33P4~Wfd(I18!xNZCS1UI>6u9GP$A=r^B)+MiBtgqCny2n
zdWljN|B*-b!CY9NM`NKT@!|j%X%H>xWNZlq^PZ5s4zxKCHz1)-rW{%tgfbL(8-^O4
zrbSF5223KBtEg}=KsXuH@|y@36OQPZFkw6QE!a4Vxk2ZnbCl7DE~fShh!%Fhw16Fc
zW6lIV1^Z9%ubw1+s*wr*oe7o8g@Gh~;UaiVV28{xC=dA&Pni%8XhZYCb_hS+1Az}$
z&m|TR_nscmS=Y+d=W75Lmp>x?fO%u*WhQcks;sOzh!4-F4AQMlXfwCbKmj70a&N%{
z0h0E9Y4Cvv8FR*0x=DHU?2*y0paorxg4um;CK=P&|BKv_{gs&mNWI?jNnTA|j|c|P
z><;Gs7z^gY6K1~S<&QGyg%gnd#emRbf@{VA=V7EYIo3in_tzr=QPMT>o;bV^iOGQ2
zbQe$t$(VhgUjgymF=o1bMxGc#85wt^xpF9%R9Ibsi_%4x@<>SztnM}o{koGP!`;Ys
zaXwgBK}_AflM0j1MVzqWJCm#3d9_aJq$%K^>M47B`%{p9&4c70@*zYhz}d5>3x7m}
zKL{P&xW+J9E$#0b$u4F{hZGM43`8q6zU$ZPKBMyFBkU|!e_8O<QW1Pn$BwPv3mptk
zJB}(&#Qs%Eo;}|RkW42M7C2cuN<t7%&OR?t(9m^s2D(#b6l?+L#MJiIN6gMZ{$p;&
z0IP?cexUz^-U8;n<FE|G$Zj4fl^Gu(iHXPQN#unE-8VCY`LqSF(js|)5A5`wSV(?k
zfaU??Mu2AyAq+~WRdP#Mc+qJH2H<m}A_s{&>G&Jg6xIs9Qi@Iq%+yT*Hn>Ahp>|Y+
zX*Gqb2#|f{s`kMHt`Z>zi38BzNS^Z)<|i|PBS=tCK!BwRwYqdSY?eHB-3synJIF}W
zE*w{{B8nVpNeLwMXSBdBM2Kt}01-gv#MBh!+Ls^&5deS&y1J5r=79s$Z^%_Vvd#j?
zc8WnvRm>r#sjsg3HUET_i%D(p+URX5WVWH1rbVT#^jmu?Sv6FBS}%hfT@?z5griPn
zfrvngsNh4Hs&Na6baFyKXkU91zgSe1L;&1i4nS#625knyWEpLO7)(LJ3|d0lcPV&q
z6u}}#1(1XiLfx%@v2vgc5_X0dSP;3DjQpgY&@LRj&i0Lg&=X7wv4DCkcvwY@5<p17
z&(rQF5)gpwr4%ZBP+Wq=M1(N%7_;4t?SY9Tgp-YyL^5GAqZQ>an!+i7k;i4nk}g&1
zUF2p783O#Fri7YIpDd&_r`T<PFt0M#bc+0hgj1RkN+kghWCj75LD)n?XsMAD3}TkB
zQlU_M05oXTUvS-crI`@w3cQ}}gPFKGAx3}%4umLT`G8=I0f0TCnsj{M&9OFOdc8#^
zuHf)UB<43D!<UrPm>Kd(voRHv7)ApTh&zN4Cx>Tsj}Aq-h#%D2fI$E?f>*2@iCrqO
z;vJU`w>(A`NjpjYhbtH&WTpTnHBgc$F@n0y;S%hA0VG4O?gI+tO;oSdUMH9b6y7Ge
z>KticlZ81s1cqxzGu~w11P?SyvW`Z%Zc^u~`fTcQ(|-fT$$(tB)h)#)2pO3^3kZt~
z8t#tpwpx@GDB=#N7KOW<PL`V+9D~3QmI*|Nhn9~YWgqs4{(%Aa!2kAGeq=$kOk@7U
zOh}F){csK>57Iziu0<l|3?aWNT_@8A${(_n{hSIop%0fFEJ+k0q5eRB5yHIWk0K}A
z9)k<~3djU)Sd0&e=j=~Umv#rLyRD3*{KXfOMrgK~`pvY*wy#gBtqFS27oTZBs4Ywk
z&++(9wNFxs0z#ShQujUMsk~x_g`yV$2fLro@OyKnHQc`n5=tt0w-VqY69qJ#{85%I
zj0C_TjW~v2;{>>GO_ts879tY8F##btcp@#ZS5T;-3Mt*`py^5#F_MjrD0(F-P}6<F
zavjqnQJAp~*evNMW`fN7;bcN2z=_jQc_<vMQG_`g90h@2dn5$8GwD>X@begA0EmZ#
zxHRvg>>(*Mv}*%RtoE0gdFUQx=1<4v+HGgG?D16b-+g`AvcSEg<uXkvFo{WoSA6@^
zF(|Pe+<=#De613vgC2iR%0Ti|doPfIgz^|p8iCq~PVWG0Z8eDi=0tT^VX9ZS?1cy*
zRsfuGI3fW7ya*5?X2T>-L{D*`XhIrl1C`?*usP|d5eP*cOdJTX0NFag*s3X%PoTkz
zD5+FRDnf)I2ZR?sda}KfLe1uR4CjXms`ZMauN>V_78x-pTq(#?u>m#U2U`>w?V(BQ
zD->Xe(DOi=1FZ7*iiBiR8Un${79q%C2t~7nh*+{gff1z`G^lD6P(W>lJN8aT{#jnB
zxA$lHR<|*Y7qyad-+Z-9#i;=q2yp`sv)vz?>KZ?Al=?p4G685}AQFSSl2h0RM~1|c
z^*nZxI_MvhM*Zp(5ecMP2^XL%E(dURJAl|tK@MghL#fTd(HvO!#HbMchQ%BEG_P#B
z;NNWoG6_)H<jO>qD}6Q#5{3me5P%`F@>Hat92!~*l>=~bTgVY0j@X3&Z!rR(L^aID
z<&Co_Q&&JYyc{9DSUbUs10{({Jwq_&?;^rw1qwmvm#`F})QD`BF2?~dhaId#5(UO%
zZUp)RDu)Diss(E{S9e&0fX#W<XOnn0ESMMGClEO}3@)ENfz%Za0Y@-S-4|B&pbuE8
zU_u1$FeE*J;g4fc7$N319rDmy3XR9KO(`rOe3!&Pm);pYBq)R;7jgy$y4oD9T%*Fk
z-6k5MQO_OPjKYQHg;U7VJPJU_@fKjUD!?S_1qUpNbJ=mIumVK=(WHNs6e$8o5<xkh
z0c9SNu=f+wEX;XCv$BK=D5O$RL_5e-Bhc+f(rg98qX3BzB18!xG#GjcH3MB=2zVRA
zC7zHnU<0qGAv64((_3E*Oa!FCJu2Qy@rCtFOpI;dZ9oL(0AL#;<b@P-&c=CoiL>=P
znKA}qSeZZ@7zxlcG_kO0HrTICfylt<Sn05JIHOkV8lkKT4wghT72kTGz&uHKp^z!*
zTvX6H0W^{@BE~E@ft$IdP!)5QrLUAX4lB0hgGz4eM@^2y48-RQb^$nYF)W;SqlvuS
zQsZ<O6q)8^d>^m&l&kI{r{fwRug?%xr^150q*v3vhbTCZ1IUVTA|I%R-)xjvB5<9L
zV25bLAqnF`$gJ{9kRM5JJ=?%bf!6|yp#ZXqp8(uIgbIo~08h#G`L37i_pYx)1WNQe
z#S^>AUJMZ_Vu|I~uT|CPV2NIbSfX`x>(zVSRqQZ8hf2~YDDWxn57Hjd_J;%W0zjbi
zJ>eL8sd(Y^VtUKoDa@)m2SBnLrUzBv0Z*Cd0bgWQgg{{d4o|=P!ujy|j`Mfz<`3>T
za{nXfW;_%9+;o9@Acw=kpSC`x{)_*XlDba*ooCzqzP#`MU!zY|0#c}GDkXpV|L6aQ
zeOPMOGc`a;l#;<vOqCIp1Tg!>a^$XDfA1&il%L02YkNmqp7|_z*Hq;yRomac{uYnP
z@NTQ?tJXa)J#)UcpHJLk+34hYr^UI^<L3j;`oD4MZu!;UoXL)?wpF!$x}IkpyYBks
zKP6`MUatA|)$7*JC)O|PUQsW7>vfIbjIS2^@t>;IySA@+)o({#dcR!T=|`KLRr=`i
z>#N(zRd}y8cdcu2ykZOU9OiS2&i5D3a~^iP@2h!iLgvoLy}XX`YS&X;?;ZI)_sn-|
z@@8{q@5^4hj<bvBIO;mLOSG4eTdumU^=_(d)-^9}6KzC!ymH!jo}pdy%RG19^*uax
z@z-&lab^6B*?4LBtIfOR`HbQ^qcKn3j2TbnZ^Ap>tIo5!@^jYjsM+UJu6d5L*3LWK
zKbYP9b*)cNr}T1--aT74?qyd__Pg7xKBo~nk6m@^XL#P%6yosx`tx?Se75SQ4)>f#
zes`s(HOq8)xQ@3qoQl!Q8GiXTzIU6_DfK$F@^`NM&U9;sUE6!MUiGJX-PEWpitC+s
z71y3eTqk|=tL`ytK5u@_cCw?caqS9xp5Fu8m)A#^uQg@9De1F|XHKsC&FiSf&0l-I
z?S8t}y2oAaw};JZojv@Wcdcv7)%;w?Esl2;J?y*rg{r*wyvKaC@f+8kcZ_*_J~2_(
zUJl(X-^^8BE6rPvn#0TI&im%|Gu}JB->lc2Z9g@U5xCRFwyJZFC%HR?=I?uD_q$g2
zlDQatBeh#qIP+a+aol64?%dgmJdOFTb=8&e=Pv$dt6pEqrQ+VR&bscg-!l5|Z_Mp$
zr+xX|Z@WK!V-GghR_aW<`C6TLyj^w7Ipf}UJ$cnz8szt{Ej{CwS6%lHy>}dp+*O#p
zd3Dz@GP%9qobBVAdnq%h-&eDpuDGv<i|3j0e0lH5np-c6M<(lC=WlsD@19#7bJvcd
zW4@yLw^hqw?TNk!rH;9H?>Mw)RQ<#HISSW|+Pd`RUwF28rJ1?wtxfNZ#NkGH8_9_0
zkF!y4AIU}^eckf*Yc5;O;~j2c`p$fXYPVOvoy+6VT8`7I&iwVB;`WFxs&6)fkdI>w
zdhvRkU&~w9o%+wN)_A#MYZK<*RTirAd1E@~tKZHnZ@5~uw7c;uM%PJA9#5TK{N(dD
zwrd&Bc-LvQYk6(onc%#g=R)5xm&W6$p3Y%aM>#t1=Jy77UTB?jl&=C^`P|Oq8u9wI
z^Jm>>i&o{e=WCqno%g$M%gzg1Sl3<oJf-J5K5KWpTdlq)nBM(wtz%wQVr$iP<&5Jy
zON$wudakUqR@b3KC1kyMoM6)RUB)p(opnB@yokWLezfu4F>bp&^BA3cV^;IW!QZR$
zFnPagIK%q&tY6OG71O<ki~FBBoNE2nY+gCd^Q*$&mF$UW-%&|D{JwEo&2^rtI`0<6
zba~RK&T4V1-?y6KILB|N>e<fqR`YtUru*gmQ3d+D`FXp(p7xaUYk7UYTDG*ch_;tm
z*K;))zo+%<$BaaEoZ>IHxo-SW^Xl&z>(t)d>mA3g^Xl5Xyk|Iidvlt8xb~FO7Tz#<
ziRT5pcNu>8=6Btk#&aFMr5WzVxb@!r=X-uuX<o0><Cn_r(U;#Jl~<SDr&4RR)+;;k
zRbA>jvELRSsP7i?+v}O$ui47ARyMCn`M#~!HOsbB_ZZiB@$b%OeP>&~d&<3G=enM^
z-j*=^o%fYbzVWeM`;Qe*n9jTNQEg(Pbh_<py<fZaiOx+gc=FeJ-g<|zQ_%UUoGZbZ
z=bhuL$F5=~{=Inf$eHfjN3J%f#nrdX+qFlS^P1`+%5PJ9z3q&+`K#vD%=>(Ax9h9d
zAhyf*7xPcoQnRgH%&zSfY~PORFRM*shb_0faMhyOgPO&3rf1FY>sz!&XFd99$uF+U
z-_GyfSi70)d(W5V4xc?KiL~l>)$x9J4qhtn&09Uq)b-r;y}s)a&Y!AQ)2-=eT;Gpe
zd~);NeCGRl^RBQiw|Mo}dcTh^>#5DV>v&hsuQAQueMIjg`ki-wSJzft-l^?q!P%Ft
zTRJK^)@_udHRh&jEV`J9+M~^8`_FzWo-KEK+st)7Vy4}1wcDNU1<1ZHX|;4mL%#XR
z#`(_g)+=4#ck#uA=a=nyuHku%`L8hq#x+VSe2Ahi)$^FPd-apEd)?0M-=ci2`oCPY
z=ghsmb3ON6;@WkcziK0_L!62AHtO5)^XC*_r#AZT(TZL5R>Cnyny-1!Rhi^39PcRg
z->h1%tJ|rG^@yCteO$+{SM}@8OrE>*ljY0NU2<1&cU-rrt9QG5-+S)2U3D9K&b;%j
zTHLtyuXnEsqptVNdam==dwIuOwRwzp!aRr0xxX^|)wPG^S5?c#-!Zw`d)W)UcAq`#
zPpwkFcei-&2VA<gIlAw=uDiBwqS&_We>J+kYZmU_a(q#2^SfDh;dk1BT4oIJh<LwT
z#(Pse`HAuOWjA|QeO1hNgWlVkn@^EGdFIq8<v*F5Q~K`*Gm6)XuHwsAi}l|WRQmEO
zx20>7uDR!s{dDur^DvyAcN+69{^HuaVm<dd;jd(OZQlNRnV(vIx_<q1bF1C!*{wZ|
z<8{9>uYJb%wQX;gjd#wqXT|m2H{SIfd6>6W^3zopIn;DNc<UVMA@j_?CtBZC)wR)G
zZj9e|zAw|>Jg!HcM_h{=M~j{HPIm9)VmCK?yy_pSoEXP-QG9u8a~Hnty;?ku(YG^;
zTdix(_Zpn}Yrmb|yXOwN)p<B3tgYe7*PeNWjL#zO{k6N2y5-+H?eb%Gd?)TJ%XOOT
z74M~o%=)Q*yxa0BQ8`hP>HD?!Yj@F$KW|y{*7I7N)8D^dv0BD^j<=h|U#<6SZto{@
zyUf>9m*H+^GiRLN-t(#={bYXq-<^4hzWVRTw|DbCZQb$QcZJ$_)z>`l)4mT{Ui$54
ze*C4LwI0^=W6x90=N4Ey@_O=biPw4E^Nji5dX<Qa&KEbSjZ&j^npww@7}MTiXUunl
zvJ1_%zM1XT`HSN7&DmQTHGaC1_O6RU=Dfbrqc~H|dDKJs2UfnVX!Bf|zgf<-yuTxy
z<@=0A`L8(j=AXQ1e$DxXrRF+*bIfaY*LmMMF`K;Oo_OAF$0s$p-g>R`W+!>?O^Dw;
za@NK7t9j?1t?R3B*RK2{p06vuv+3(zX8NK0o98}`W+R>}b1qT6t4Wtb#ejh#!25&V
ze$-RmjX#o-$e(zJ`^}HMv*cVTG>!-#Y$S)@$N+w{Pp9_*IULeS3J3d@K!h3kci^R=
zpll#fY9Cqo%Q~bfi$LYdt!e|3!+d1>&Ck-qiYHY$C*Hdq#Y8vbs5T4-ffl5SNXHwg
z-aShw2Gje_^B_1?fZ%{oK>{pxLT(ffBs>$4az--=1P&;M$Rr?x&<YUGM5N130lyT`
zNUDJX2Vc!Npnte~X&UQQ2SB2arV1$oe*Z*1Zbp3ET!bScYPAR<26Qf>CTjrvNfrsn
z2(|{qG+ew+i07;o&4C~tGAs$0O$%s99gQi3kp?S}b|GpZ0d0^7S0Dn<NgWpnshOKh
zkla$Ulr&P<p;A#H2{0}}VUh?D)dBFX-!$xq<O26N5eS510x%-QXUqw8nE$ay?*u=~
z#kQ>nz|n#Sxbw0k`NSoN`{zZqD34!@2V(3Oi98Ga?Vx`fXz*jCN-Y{ebQlTcQbX3@
zMwALJ-5j){%nCQF_P{?akT&4oiT$3x)7R=am6QyLrNYW&dg%K9&0Zx*GI)uD_sb6A
zMA-Nf8VW!s#0Nu8ON`t$ETMrP^-nHZF(jG**sO_T>W873pcw()Gx>4IvRqk0Nin53
z!09B1I>Xa~Mm$pSsE{G10i0z~C$;)oH)ec&Ra6|!A0;s8z=6Tt-GaL_gFA#^Avg@~
z?moD?1h?Q2EI{z!9^4_g1`ED?|9#tst<&A-cdDzqUaD?aSKYezA?M^vtH%MqK=ncj
z4h;2_<*{JtGm?o6AyT1z0FG2xYh0i}BuY`w1dSvSm6Y+nmqM9DV01W0S^&l;v=8T3
zpaJp*X+m1_s4wHTXqOnFh_~<$-m4jG%2NGtfH1Kb(e)<Cu-)i`VzDX`dHYpwxkp@?
zWU<}b^qjDDI~yA(Xpv2|`R_h5z7Mu6Gq*Cjn>mI}`HTQ!KrAYg>{q&YF+7oS%DJ~%
zqmS#fh$_4|QB69gWAK)i6lt=F)Fh>9BFKwdWXZKon|dGiUdRtH)2t+Mi;eI5r?Fm5
zs3%!ySY%nO6}YRlQ>=@%bh_?}7Pc*nv%8zz%Xx*yqiX+r(NN=W8_O*TqHlz+v}#sb
zQK}9iwMz}IkU@D8*@HaX!*e0;z@D=Cgbgu=Ngjb}c5>g)8BOOFKtQcq<Y1r!OAz*Y
zZQ>8_mJIEOr<NR_V_H?*HPJ^+rvXMLck>`;Az%`ILnLY-m$b7?G)rz$9r7VTMRat7
z2A)5{<$+U95gQ|d7b8`vDLJQIZId7(-k4JmR0@;!)?rJh*c|(rNfv8ep&*_10rV&8
zMjf3oqOUGw89<6OBNx5Y!HDC$WhRwm4zSj1Qoh=x*HCWJK#F=<aEQ!Ary_@!wAt6?
zgA|9t7=Rh*X@qCPcm>%(5nJ#WebY4jStVTXi(qF!4n~6L`d$koMZ^K;q-0x<Ml^LI
zjeR)uI0uNO8NEbPmZz(^$5$RiFWTc1fg?42&x`b{rz(pn7&sF^5U_HqqE2yT8blrj
zkeLyNGQQFTP__g<z3o`7zEYm}gA7i}#`xIEO5e2Wjyh`U=t>pSvPaWcK2~bJM=bgu
zTeJ+ATe50epCttDH@5<5zX$xeG!nj_bj>{wQq)W>W&ZzP<dbM1Q8;w}|3d%I-H$pK
zb>|Bbj9ruXlaAB`Fb;FFz>Y*M$*!uZs<(|dj`H|t%G+GbpW8yj^KbT8Mt!eX*PdPZ
zI#nwJ9~|j^cI-90x#aBA;+bIYOi**#lBm)E3Cp|{=#mvauub*4YW-)-Hx#*CzS&W~
zY5a1)Ke+odC;D6AI5@K^RJ$E&QbSKR!UZx()7IA3R66p%`bR)RdX~b#^Vm?$d_XG1
z5EB}o{QfpQgI09xvV69r*lr_V+choee9`wR=+X(=*!llLyP3aXca@kSPKW(hR#$Jj
zTK8K(-$m|sSW-aq(R)F9_k31z@R!AoA&n3V>i?chV@p<kL;M`0vw!y#=+|gHZ_>AU
z%$jKXbB?g6>8siFFCEqBs<q1nw*4H?k3T-Ly97$k91`QB+Gn|uw1K}PqB}CMD<Ij1
z7*eHG(falJ3*T57_$N-W5*}CANw%m55_(@a(9B-a7^{Dynrt=|j&+_t#Bh+uIV|i=
z5)dVT35teO1KIaWo>jthlsT5h8U&VkDp9FveSJE$u$2=~xHG~n?uKh*QUTD?a!e6o
zXbG%bZs13t)Rcq*GH0^F>(|k_*Tc3jO%Uk0B#!dBppEi2WE=2?{81*jGUq$Zv@R8l
z$v}|upRzSC4rog{Hc=6tjTo-WPJ^bG7&@b2*GOI;A?-os0sl&r9A>T{Soe}N7IED%
zX02!NXEDVd?K}Pc;0xhn-9upOGsEQ@xhZ6SujWmqI^L&gV?1!P+~o?p>Uye_O!;p>
z;2TFH5PY4sI8bkJV*6Ez^N@vQJaT%c=|(rz<8h7W=awsdjsC&a07sjF!jkUMuceM4
zz38Ifjaj8X2rs@iTV1BHgdL~c)*wlgBwvKe!n%%tD?nb+zp>h<_WSye!JDIvUCdee
zIuW<V65Z4YHDf&Cl`3nr=x8NmFXg8kw`U)6XB~ZWP^bR<5r8E91`4hUe>NwnKt_CP
zG`vH5@evAo4n*|Lq4_|uT(|viMp%M{uJOG$k+7DA?4jUHl~z+xCE&@xORA$v!@~t>
zAcjJi-dW!S-5a70ZXFMb(75M%=%>*d=z(xic66pM$doOxiO`v&uJetb?A0LN?M+-R
z-}}#n@5X)Cl?I4%=xR19v#TNMqsZ@1?*C<8n9Q%a{2BS6+g@Gz=CvQ%>-b;pq3GME
zsTcVJ!SlELz!%}pGjT51dy2o<47_^8knaNvN~22$<j7P<Qm@H=_qWpNy6{%ie20Q}
zJoq0J{4e_RA1IXnmv`_#c=%uRf6?N9xH0-4Zm9l;Ad~+?5I=rE%5?F^kK3vE$jq*+
zq$nXFAtVGCR(4DUQR9p~cOgzl@KHd^7e&T<>|3AkAZ$c)gY(V&AGR&e*Hfa`x&N!L
zfpN0T;rF}0^=#2K>*YmbW|di^)6=_eM_JvF(94f)fzDT49-f~@Sx&#4L`34Pn5E#w
zD{q*2q6fcUj9UkYOlA>QP>T+53rid`(U-QZIf!%$sD0Ai2h0aaz7zc3PgJBvV%JM+
zB6(}c)UVhIdQr-$38(e)Zsaa`T&{V-$_(<N1g^Q8tP_K950k2tuqJ6nDOoyf)`WAn
zB=cHcbFpRt;aw5dTvH@!?C2(=nL;p#ruKJ4#R;tlxjjb>=(su{`*hX3@w*~1v?!XX
zhz#@ey7}!9<mYG0|8H<*cB!STPdLB5`}<>;e?z)=W|ZE4Y0BSruq$99Exv9+&JKKE
zCv<x={_a_Rd-B!ja`UTS?pTZ5RWn0am-;OYEGiP*4{65{HO}yisnDJaG`_*z74#Vs
zXM=@y;shqVs>AuF+&q)2W3hp-u1*-QpRh^-f2TehKLTy{5cMk3&|eLP92_~lV`dT;
zijkCEA7mA&5>faF{0W2K>E^#J*{=c3YJ}_V?P+hpLxSFpuLrrw_8bUdF3eva?n@U|
zzdkV9ph-L6(ppCk(xv9>H&VV1vy|gtk`)im*BAYjWMdO=XDk)61w_SAg1+bnIRLa`
zR@+~pjt*@uD|MgMIQJSJ13wnl`xhzz#g*BlLQ#ndH^4^4q2^fMuEyrpwUw=w9GAk&
zoyYVBE~Sj4>5^%`zM4vIjjk8HH_wz|=jo9FtnI>-Z`UBIM7qG0!pZ_W;viM2(Mhjt
z_{Gfp8R*(&a5`<yy}7dt5lP&hf|w>*X!%iP_3+qHkUC<AEW~#bCr@y{RrrI`6~H&W
zl<i+q$r1JYvYkLo=f8+w%KlR2CjL8Gr(AMf{D(T;BEVxe5!1r#JS4J7L~3EuM<p?j
zIq7Mru_1Y!2Gcv$C7%2=Mx%1GpYbbVuAGyRx6!u(t4@RXo1uGZf`YtZC4x(953^_%
z)2viNE6FVmq`_Zp=!o#K5n%&%VF++;!3_P*@s0fl9?{4E226=%!$NL(JU|mB?jx40
z8oLKIvSFx92$=-V(6c%Pr}jS*>%e+JW2_P}lo`KW!pwY>($*5lu>17gz$I6rWm#V&
zv<-LcENnG+p~OWvcU`elDOM{<rJA(gmjbJ8jfiaEa&9Vf8c`ItqAFN=P?DxF(y4yH
zSW*jHaG2{OzU{loe0buEd(mgn-2{LJ8bm`{&1<0ai}zFP7%;&xqD<!_Upp>hhsF(x
zDh{!|NJbA-NX8oYi;`=5jS)~zl~-pnFY-;Zy4Wkz^*$o|bMP@3CvgYjM;Xiw%jM{q
zUK&~HDjQHk{D~Mfe02`=IrRLyebMpbHomHz;TRqj`&xaY5}nFb6${)$-FtWEUR6}}
z6_Ff4j7!vHzngk>z;7eM3>0L^87yh5yhn;4O%MG@-Rxa4Jy2E1Q(>Zn8ROWTm^W1J
zocs+A3BK~T1>{d;8rc*CX?1CQ*c_4ru)MR`r7Y4P>r3!yGX&(Qh2D_=;;>GhA(a4;
zn$?LPjssnyLQ)*)Lqmh1@BvXFNi0E6SIUS8b2vM<0+2P*P|gX8Ex@;*fvVFZ!Wxz4
zr>l%Ahsy##QX~t+^BJrJ9ldjyXPjE1NoPdc2!uY17n?)Q5&6(6G%K{n<w4$dxV-9u
zpF5anV?ow13nW8=Hf-vUObQ0L+#ADaD=AMjnf0k6DvdNV1d)esS!Ar4(3Vk0t7<q3
zpIM+g`7a~v3wYpm|2Sqs#{n8$nxGRW^%{8sqF<+&L$c&q#BL##0<yFk^MQ^`T#*s=
z)t}KnpVKTS>BcVap1+s@F(B7kTJ_fmA)!QMKPIC+BW+jy;<BIia5X#3?nzRLgj}xB
z-|8q94q5Dhf?!`H#Y`|2MmwK%%*N`IF!DsT#xL7hG4Tr8*Ai$keO)s!{$ff=;<YDe
zq$1LkRUw52BQW<Q(uMROEb^lnHx4(?p|ejPBaxj_{%AG*#&dCRU0aM2;vm;dYkt1H
zWw9@ZaAh%R!4MTxmvnKu$U!;xJ}@j%(ilRgtVqxNUPME41SL+GV}BZQC1Vtkj(Oj!
zgSXkPNOe>ai>?i}lGBv`8wMLhDNxeFKuTERi=@VyZeDRsM>Vorl%3x(S{6b{YKI&W
zTeVAFD6N0FQR@AQi0l!meis?!L!!|IrVn}`c))0jC`vD)BG7?2Cn?r_QE4I)7J>V%
z2d7!DWxU4_oW$qN>eemA$L3J1%q=qf3=jp0<q&`Q8#;`IbF!2(=S9BLFSa{tn_!^7
zP!<}IW%sdXTeWcLmnOrQLUe+yuKqcRPG++CV3AVZ$hNk|zBKl=N~mY#g35?b-q3-Q
zo%-DmBvOJ?!Aw0hX|ktlbRqnoozwEV+nq^+=feEgA|s|d$Q|v}du1Jo#~yh@9JEqv
z33O{8febKko6=8O+S;KuYg79I7d!hjR_;E3MhvYsF3hLxd10LJAorpkwWN*=(yc8I
z#w4f@ooJ{Fk%tHS997M;7Up&3l8?XcgVP~y8V1G&BHO3kDx!Kc@*Zg6US`gVtm!-V
z{R65YXus^nE)jJ|zM4)xuXpdRoPHgP^S0f%t@COx=ajxuU9xjR$&em@faUP;pN4gE
z0qXpSdZzhsf7FU(5wFK(+hjOM3WIopN|u?5Et=YtjUGI}zND<~b9qbfrxXRy!wBT~
za<k`!1a1FQu7{vwtk+Mf(AM3Y;}KK%O8#;=yeC%ZsJA8p#e$KwiA99y$Xv@;r&MM_
zI;4u;71>bC04|na_4QW#39;)09d*U$(Vx0|{-G3yFt^A7<YusVkDP9aIq-(tW=mWh
zu{5^Gi=2zLH*St?$lx!5qJ@d8!SjGd+QN=2HRCI?X$ubwb4nPP8k;(Kd09bee7AwF
z4~lf^dT5M|Dgn?q1BAY>Z_V%2UaKc1CQF6sDln)_6+K~dVvrNYI(BOH9J_Pl7^?`8
z3@ESVLYO64QGiOunOg8WwFlyKNI}Ior~|3xnky)v=Az(5<C#k~Su*6lnUN&<iW06i
zR+4K!oDUYRR7O)M0bi08hAY*_Dv-~xVJMWeDcg~Lh^;QTy2;#PTIsJcD><Pgs%=qa
z!39?K<?@$E!>05F+?XfSJgMrdNkN)uQSi9T*sAzh#HLX{v1O#RKMKJRB>AF^qnz~m
z<-)b|H8UzQffW0bpZ$C*SP)S;QA^sAs|vN9xW6E!MAE@si;j=0hPd}IaWy)xj<wV1
zR_2D?kTmdhIy$9Ztcs5;wyg8@=?@1^9B%CfIJte7=^N}`W@O^9AEG=1-YeVrx9^^G
zlcEc_*sN|6wYyMrMF$1SEg83Mh@Yuae+#9fa$gcNTmQ5bZ?<7I;aC6`;5<w)OD6zP
z|3-24kHc8>VrE{$-$ObFd6`E@;LafrWa7ZLiQSkq+nJrzaynW7v5$$1$P{tI)DuNb
z$&@fHbXd?O5&DNkdW$1&+Q@*Dl>^+)TEo&o7d)aU=D4zbm^T;`gVajHhkuPgOFZg)
zKQaByHvN9|j7y$gm1||Skt0y;gw#_cr>PV<Zr1c1@CZ%fM+o5#b3o=%2|q<J2W$-j
zE22!Is7m;I|EwnB3ZG%>5|+)2j_`^KVRD|L+ID!~Z`)30d@J5#j<sjA@7%a!l;RSL
z3o7NN$8vzL%FWioGA8xP%y(G1yv9J~CHgR(_Pg}yt{O(J)Fh6Fke;+p+r~%3l~#e5
zBi*d19Ff)&UP#3Os0dzKz;Ei}!?;e4aftqr#!;4fCP;P5BLx&DBDabcwoP(%>hA7i
zqe7&jAvR1pFhK?@p_sG-qayLR3Nu?5Dy2vjM7cEQ@HAys?b;I6KS28gt5r}-tG+W^
zB8iT2|AqH$L9t%CcVmO}uf0@-&mn&uJHpQdabtf%r|J$2dRt5QBME*vqRv7HkThD*
zf`^8%$d3f-{@iUIpnjWCf7>~{$#d6<ee2b_yM6sJd-2TY-d=0)bI4&Y*BD`BNeBT}
z(aZjI2?Nu)v*PaI+TIO+%{~)HK1u2%nUIFQfCW-0aXQH=u__H)N23}rM@W1bdCIr}
zTx0EP^imE4ZlF}Z0<vG}!A}XPI%)V)8R|=MPjBOHSl6*zh1^3B3B~~99m2#+Me2Wn
z-|109rPD&0Wdu{+&})$=#hZ$Bafn1AViV{u$Oy2~n>#7*!3|sd<VLJWtUZxpB0AkW
zbYS2l`QtEg5q>-VfQAItyj8#21e@BRW*WvRaJZK}SP@&lv}F^5nujv><tM=%xgUwm
zW6#1lBzY-*Ws4{S1U6(w`%+3PBVi)xy+Rd{h^v3lB{S=Bd$8{{ahq8oLd0ZKP~hqP
zME^c3z`3<IzEWDmAX&&ct*!N=_Z~PL`h$N$5s~h66OJNB#3C;Zbb;7`AA(53K1X!J
z_Cb(BA>(@GE*KfYUEN!cV*IX?6Fd5Yl6j4odeCqsT)se>F~*^*H_Qk?p7Jgn>&8?c
z<EZNu&SO<%8lLiDTuo>P`IUa??+(u81^oO#IJ^vB8#8x&*IaKe%Q*4!64jZ7SU#2^
zO19=5+6MS*C^0}y5HSJZ{40pqP)!ujNk^rf3`#uTwSVL)^SX|IEeYq~q3s+$wv=^}
zMx+8Ae>Wf!<*ABIuj*T1->p+!@_78+PJo503Hs%W-d$ToRL1EA0=~4`%Q-|JPEw3p
zE_-*MM4-41+&ULG$}2dx*@5WlMO^@$#zmPJeWF^lVQc1U##^2Gn(&a5yj*EI691wL
zcRF)QkEn%3KnEHmn3lD1z#Q!oU>Db?9>Ss)hnC*~M^#`a4a0>@XOdv<q@=RRgN-Cx
zaG^v<o&6PP?U+FnoJtg^x^1q43}j66bbMOLa@6*n$2Uw1Cj(VU88Imk=c7(n$&=-#
zGh#YF)tj+@uM)@#iEt^ha)bV>D?ceW{q^6DD*kc$=el;Rec}b;mw%pdH;>3DP+^Hr
zh93&8@4^*(?wrmUm7r|nAG+T<9me>eM=CWK0mp$&#KuMFH2#?$7N#r}lsLeW!6SKf
zIz^i!gO}NJ&{5k%v=NOkU3g6<#K>uSmK7XqrhEY-PXdf;)fIr%YelwN3{+<YD^uUv
zf(sCK$TV3AR5&#>Qze62YCf=l@|%UQ{a62Fsy$k#G{W}**{_$}J@tyAHee33=*=X5
zsxQ|Ra*^0j&m3}y$hxoJ${KMwXv3M+wPw7%6idB+&V+Lb43Cg8skJtQMV4oqxQ6=y
z=NBMc2{hztkx)bw&t)db+E5Q2mc|-Z4a?7@jU_avtYu%zT<-mPI7&|91V%00wqVoH
zOI{$HxS()f<^T}H0kZnd8w>__i8_w9p6c%lX;bdky9Tuadd~mSxFyT~0v(G#1j@6!
zyerROiW_1vGX@-d6eZ0#56eKWFmfLF5ZZmDuYnpCC!JuuZ!`_pK!rv~f+;;PhnmM^
z8r+QVK7)<I@J_UPm%vu3$iv4-B^M_6i;j)D+#F&laB9xgDvJBwjJ{Py*n~z6C|%kQ
zV4#EA+(I2{f}$C5ym1tmtEgPDfCQ*yu=0vlEYc`r7(rQhe||fh4T|xf3!Rvzlivu*
z)JN1S@tnyNNS@0p3}HkvhN`IQrRk(q(xAIM{o5}CR0fqN1-&g+-Zz3MgXb5LYOIlV
zrgk~;eWB5$1(M$I@Ki$GTc%y8py~FjC$TgvgMmxlNj1aKD;ALraqvE>=Upj$vce`H
zv8QGL2>9jXtT_RXiZof?_7|gV?T!Sq9Y~1zWk`hN^gvUAp7$=_ED9)mW&<A-zMlSP
zgvd&;LK-Cl0OHsKim=IJ%X_F>l6UeJeMIYEdXhL%xH~;f@BMb8Kt^Xav%Cz}xaaeS
z`5IZQdjjrJG9@=Cq@56`JFi%|x194)5Go~)DXQuzq>ibCu&Qbhro)&(KwmZx(3-}1
zPgy?&>deVaR1yq`1^$AWT!MfTAzvc1aI2H09VziY&}>{Jz3`v`Dvvs5kvX$vgGf(#
zq?N|e`jJtA);UBFFk>+=cnZ0I%!tj8U{$3sfzn8<za**8zEF3EG*1+BEBI(?@@+LK
z!FGCwG-E(KtX}Td@Rl^U0$pB~`};pYsoy!}A_wlkB^FJ`=dv5!@V{KDhyRl0m7aY!
zRqGg*z3*ia!A-+s_EB^}o&xJm!i32jp}0*m`*t>YbssLtyy6zKQim07YwcQ*@Cyzx
zc&3_x^ECg|yLNxj_6TvVpyY~7$`MK9kedu=`19#d+zNGVQkgLZMTo<&&wzU-)TrRh
zOH~wX<muuK*~LHGSNHy1ELnsG)H|j66yMzNlA>uY|0!WIK+4DlB~AzERYQTfalQ7s
zy^X^kk4#!?k~E`wzWn~!LdVyJSdF*-y=L?mHXu`zQ6d5X812k2mEifXd9X|!1hSRl
zhVK#S5KaXN<-<N>UZX_~iODKfHJ*kl5|AYP$Z;v6*-YawGAjHbhH4(CuSz)(?C2ad
z+`c0dD=n*&mLqHTV+Vz&o)?!65aLCAtSF~rdoxs8WB;H)$%AuL!i(#D)<#NS&vCWy
z{A(@A6chZ@`TTl2SF5aN23{dnndqmFc;E5tR^JZ3AVDF)s-zEhRn@mi=1Z&*1Ygwz
z-hiM&t?j-TC?SB5)EBbdL@qD6AuXBs#rF5vLB@i!S|Nt~#d)EKk16i-Bd-5K$x?`B
zs*$k`Z~=#w8s&W<)%*}81DdYM(1p4J;?MYWDyDG=Hk3vFe7BiUFFMLezGFdhC|hFk
zYpXnqTWn-zjfu*Ol+?mA>f)$2JXkKX$?>)HqXka9)>yqeFhT25RK4fie19`h6<G|o
z`$E}=L7%(dFnl%fqU6ke!yBBY4+aiNzPnG(3v0W7`x@P6p6h8V1!i>NUc%*Ossg!S
zI?Yh^c9KM?Xq6@&9V}KVr4y*m;F^YbCk_L5w58{0o5rW3q*4azs26*7JaZ-&pidzn
z9bCTSM;J7HWXyZpplzRX+PY#b$~di%n5C}jaVAqWcoovnZ`-dP{8fU@Yr~89aqY|d
z<XqGaDlCiz>uVDr7Z9WGwDyl&33Fk$J3qcv2m^tvlpIalJm~W_@YRa74~-Uwa9r53
zyh(!hVy$*HGbBnL!nqz3RS=_^x<(*{tM1~hYs-(^#LGj;+e7uM6IBr@z@J02(1HCv
z-vPl<{sbHM+S6r{TR~A6=W0ce8!LD^GMKONGFb*gDin$frw+5CD*Uj4ha^?l{%6RQ
z5UL_+iZG~4#)!n`i&1PD#$}UA2vgnO^{IHUJ{HB@P*xn(`x|Ygs3UG}!--o!P-`jV
zT`Nxk&ABHC8yWxUDIFH>>By^ZFufGh2KRJw*tY)Y5{6?K`Xe!J3T3_lvr1!*)hB+0
zUexJ>OCG@Go*er3;~J&{T$r@MZ*p#QImC9|+?k)iv+lE&LvyA+hVpS)8Ly;Sqk3|7
z-kQ-QcCQmwb2NUo@zRTko?!itDq(OM_&Mamfb-LzEH*W^UZKh6%vGLVb;cH7I;+!s
zeg>u)4k52@Ss1VWhHB$)>r5@6#2fD6I!V&WntE3?RJDZ<&2ghpGL=gWrAjW~ov}(u
zNtZ+e`fB+8>>YX&UN~c3-oaP6S1a~`d;VtecJUl7d<xG?-=;?YE;?!Uvq{V17TJi*
ztY}F2Qo;<AE|{{azuZ}3UfIlE63R(RQJb%=iBk%7L1jj@A>YFS@JOyfi6RbgmxPzp
z({ItfZQLJCZ<#lCOWimR=SO;G#(zX<;yLNS(&ec>3bB-LDomY(ihd9RO#8sM58k(9
zc|DF&^?45whZTKhx)WS$a6xOMMvv6Z*<|IFt>7h7zq+P~AGWt@I~`A4+61d6;2q7N
zV%eXebr*PkTO*ccvpV{|TB0CBdhys@H}~NF$D%IF*`uPeLsWypK2r=m3Di@nTY^Vq
z4?tnoDA)OQ_8e!yTU!UzXc@&0O8<B6Du$djkd^DGtA#*~*QNm%MhKn_TWS7{VLp7Q
zmG5FtTj;cX7B>i-CXmMdBxxKWO^+1X^EiUWq4KXc%@HfkmHJ<Rr3BR{rK&Wam>lkJ
z<5En+zsrVcqVbU{Wf2g4L5<n2q2gr)_>(k$FokK}Ee0D^T|ur%Je8CSVfM^z!N$a-
zC0R7qKJ_qnhHz(lFn^CTcK<AD5$TQRle}PJ0k3eYrXquu{2SJu;?3aLvR?8W=Q@Ft
zpc8P<vPX9p2LbYlPe#QoC5#&NKG+|qe8W;UpZ-jteo#(p2InsFsnuN^vvj0z5=y6p
zBg|kP9ztKmQu90z@*CATgh4vJ0ilBAR}p8Hyeu0CCMU%OsUJTYZrQ7Dg`Gv`Ajv18
z$vq@8k#S`g*~Ca{N)~9}h)|mFz{f=*w8BWV*Y^%iTV1Otl{Ll`RhF~cR~I5Z*hB18
zd3o28&>TpOkYLNe`Aj>c8VTiIS#_U`k3SJm(D;XbDvTbzR9tMoA+4J~d)%hqpBgb%
zr!xp$Lig7rKMk>*Bd3hQ`T1m&*E8FQ6&!vyspkJXlC)cx^xEUZ$lhz6NLD_-4Ke_(
zwGbOSvaqQrz#pZhA~=m#^I-II#V~Ng3cyLaVp~L2nBB?fHDW>8d4=;T7o*x)7>*W+
zJ)NPt>F%o`mxmUe0M*@zzka)#LbJ_@!IjgFnW3$qE#7j;iF7d;Tx52R5ngk1Pavd3
zo=vHZCajM-la#)Tha!gwSlIR*URolz_xv#+Id#rHq5dIq2e13_3n|Hyty;Evooi1)
zhqFrW2M5g7hJ54&MWdpQN$?EK1zIyzU-nr#?38SU<om~BPn_*alY;lH!~=Br!-nN1
z)BT0gJ-2uoaLot>cp6GwM(V`YhiEa4m(6jlZMi?B8%4e_Tt|DC6LsOhdKTw}9})+g
z{0GEsRvpKY>rLiUzCL6Q2q84nLQ8h(`-Dnc4A{RnZt~c5Eb7=Dx5RzoPGf1|Ygx6o
zZ&@|?6xWiz`X2muR779ot?kVIFV<#nX=ux_wQpVVo7>OdodngRqPnXYIbjWXNfn8`
zC^~>*gDY-$nnG|q)z2ASkc88R&6)BOrlC*VwkXNnx;NwN=?fS!k>Xd*c3EZlntIBB
zzR)NF#6_sIG>AG_UL%ZoYj16zKz~?9R3>C59W)Tet;$Mp(DG^(sqPN*qVhzW!qUWi
zWv()}GfK1gBG>uwP#3W^fJ!ahi_ZfX7duEqAw>JF_?G@u((Jp0{AUgT15uH$f%ZQ3
zyXtyJZA*QcO<ce*H6Fa3SWFfNxo{L%8CXl^E7SQmBtoN4MC*-yX{H)mh9uV9-8y?y
zZ)2w&V`}-q$gp7HXtaL?P6d7bT{moC6ZH}kxYVj+MN+g_(_&{!7lfJqbL>sl?ZYql
zZT>K@(Z58hu-iSuS52>{j0_6adNFxZVV-feGN95*N1_M%BVmQ1TFAfAK$P9oAzv%8
zRMg_wxGAs|O4-C)@i~$x8F3&*ypruwtY-6{G<tlQM7+y)Kx{;f(zs#O(ev!m+wfD*
zE{HF1Ub|pR3~4q5u2?go-k?0b&r*V9fkwD@<OhwQWPd?^VBq5H0ys#D`y{lSe)wyJ
zn$1_!bmU>9pR{`v^<w3jg8q(MPMJydep8VXU%f7UWtEoPDJ=#%iDt5a#&b6o_u+l*
zhhIvMa)8WLFsbH;WHN9gHP>j~@>{6Tz}%hnRjlAIsrHmOp*V1UzRYGmUw9-l@CrNK
zqe!rW==Ba7ftu`7XyHY~fTYCGtSrw*JFb1i95%j3wEuO<8WS^400H!dXhlN~SnoQD
zkL2(UZJQH->?Rv-+m0Dz?(;Y&l}t~N*+=QbvlCdWv^KP+w7UuTauR^g%$=)bJ(TDT
zmH<#U(oXRh5^>^=)?`oi(@PsO=EdSbl>R(2DT?J5BaE;v!yEP~@C||7;6PGuV)O3{
z!qG*8lW!;8XA7pJCDW5RW|%qYBpgU17aqz!<p12Jvs)R>JSU=^W$5^)7>n&8zOa;H
z8J^FsdkEtu#+8WEcBkLFa3N1^j^uGiR)U^0ha<YTVp%|luWX-st84(t0ciDSqk=0%
z`L63p-p2WhZN3@%tYg4*hTRGf+*I~UnnY2MKt<{Rm5p1@#Qe(;qJUN7eSWu@@`?~z
zT&^8E#nX>R%7#u6YR=1z<-FU%%0xY$!(UCXYjkqad=EE~<)aeMwz%J2mq|D+8Y5!@
z`rq>{UWBhd%Li9B=Cmmk^23Cxd~?pd1el%d&`9hLXfj=DSUuv3On<<KOkf6A{xl0Y
z6kf!YLj3~Vc;wxm*qA#kvPYJeGIsMN*>y94NOS{LeFwm5DSi6Bh8y0ClnL$vK!$V_
z<q>`dxwsUhyHBYZP5gf&GM2s^#T--E&q_${*FNx|#b>oAfU?}kz7~izIp<^_m}!Jc
z%`%eXye62^x_Mp;`T=L66GFC8w<kx|P;ZRV2bQ!KIsB~xY$gVlNc3?{^7!?t5(kQi
z+njHdM;L>@m3_DkHDA|?Y)YuE1DypeXPL1Ue1=F!9xi&ctq~7-28`WCtd)cr7FUPQ
z?8OBf%Nn{Fd$mt!ZR#!7aZd#pHvpR#tW+{(R<uNUd_-;?>>R=uLXw1_Dwum*GLd;r
zP_P%z9k@Sbv2dDhaL_bo&V$=4{MaFL5^koZWsX54b;Hf>c5)IuvhqeEPxV=pL{DQT
z=5FIFA}9$}By{XCkk{G!B;R$c?KgQDP4A|eZqK<<sNvV@q?EFfc}y5=`?z1LLxier
zZthniPn@MRsVu@_3UevLwWSiUrNdEkybHgeacK<lg<+te!B%6a(PBiH+uMNC-M4fO
zX0EZk9Y%63x_bLf#rr`22x$7OEMrVh#y)>dbIg<uy+XZGbCS$$y19WmENAe<7=I0f
zkzY}!`lC`p6!_Ceo4$kkGP)_MZLa^UUTksv=wyK?b1(D#P`TO!){tN8T+Bb_o}H&=
zcc3P?OvW)j{&>+{07|PJ=ns$#SjE&h#!N_{?Vs?+oSTtecjQjxT)9qo``+4}{QC4u
ziKneKukS#~V9--PIwSvS1E|R5ldJgGu}dqbPJ}>*btFC`Z8&aKZ)A~$QQWg@tH#0G
z*QzoBb5rk6=k9^`>@Q0*d_RNC$<A+Ljt(*tE0@Ce{gd91=4Lbm#VYeFDggwq+1eg*
z@PxfnU&zrpSPL#Wogat+!pKDgd;lnuAnSshkb;Ib=2ag^R1re=fF4?vBJcoQ)hAZ1
ze?sZQqtTzkhS^oPyf~WADf*WYemrjEuYwNPG0UU2JReBojP=&-Svs{~6Suw2bXe2h
zn;rV?%yo{oCA?j}GHC2~2>QgGkOnL_p2utBYWW;htop`U7WV^K_x&Py^hPSxiw?(|
zSy=tXPH=#8?528mlxrtME9CU^G5H7y<VEfx+qNE=^aZ$fDji=s@JZFW)DVUuh;RJA
zL9&ZxpkOUUdrIH7Nku507;2^Ep$gQswf=P4Qy-q{DtS8L*XOR9nx|zQ@7u>#SDs=a
zUFRqrQlAGx0g}3|h%tHB9g&L4gih~^_TT|_;3S!up)+fC*MZfzK)TxB$Qk-*2r~D`
z134`*(ZBENVodb*MmZ)Iy&V)-3O_CcKRo9^bgBFm)VFd+&N$*He`wenEiTp>c0@!S
zCl;GG6dqWnaD`&SO0?}2iC0SVq6+AfsjmPlp3ZNaAs^Ke{83UQteP_LqRaWeuh2uN
zdk%%+A5pIpwH0_3VR*B!Qart^HxDo}<GpBHN@K?|l1Zh2KhwblQ?yIH*w;?m<l@O{
z*MK3?7bcU09?-ae^6&luQgRfk3b$RS0F=xfDYXF_#$mY^3{jy|4Xt)DCS~i#pJE|8
z*ETeLW2_EHOhot^?0hBVUI!CERfgL?E?b{f2RF4e`#AHEFC|J6q0~rpe%WetfkW)r
zOAdgsuvFjS;7nVQJs)NJ7bUT62)4vWeHacREVGMM4pOZyb{x<g7H~bPxVR=69ACmu
zH>4UhInu2zvHmj{Vr{dkQ(-jgw~SD6yBqJ7i}-<)!5H;MIsuEj{M7-HyuppJytxqF
z`9?YL4;k?A68P;HjtCoH9{WYXOnGzf`MQ(%QDkg9S3aw`d6_rIP~c1LwUTZ6RYiqL
z8vzbvn{wh|G3oYcs(xeZ1&Ji5XX%Nz^1A=9B^=hZfjoCs$&=gkrVse`CNG<?&l>`K
z&AK_XDCvR~|0bdl`)mA><Fwf>LS20%w$xofORHSfz@)oI^>Rx+SlLuE3P{fg&#eA~
znT-Y+C3bqtJ^0ON-&akijO96KnxOwip7agQF3U7f(-dPcyr}Ty)BUF~?<XBi-fxfN
z$>3jbJD(K$81axkF#<5&=rackd+9uIw%<Z~y!17~Lsf~e(`gaXc#Bk|EE*g)eI3!N
z!-#L6`>P(~Hv=o{aJm94cY|<p>>B4QRp={96>XH0Z4^tsGe<XA^PAdOj(q?3eW7ji
zTZ=Xyb4e9*5fbw_?<~p8`I8$@9Kus2i@hdp!nb)V=G}pU$E0J=*V~GSW>y}=9lPn+
zOsho{=6aoEj@#g}R$N6UDtEecN$+~jkCj=8#??Gr1FsxBMc}18ax=olvNfR*eu1CE
z*TA)z(<`W#jW!7^u<bKDs;(uw$S*`YNVN0?d{`BFmVLIPW;(GvfqJUr?oRpo*8Q)k
zKjK;^KX`7_R@$g<_8B*bBqeMP{biBM*}(FgVPO-WCKs_QeDK(b=<Xwc;gX%Q9-fAX
zPj6U}!YvC?mc@;$n?8j~bNY$bxP>ZiT89+j7H%qk&&XuRDlL22M6lC|NbB9KP_+J~
zx?2itGIn2ddv||tZ3ZfIr~o9-AF!EdmfGLa8hL?<_aX#2k!^)Tt&}&IWE+>}ID~&(
zK2~Z36IKx?e5MP{lrsj!=0cVx+jqyEShLqH*^9FbS2GNbvhRiD;%tmnOje6xReh_b
zRt?Vwyt_V5FWQ#{>PwRrZj})5&37yCO~zx2v@yO?HxfgTX&Xk3nyxLenqPZJUvR(f
zJoC;yRTf8Rn7s`#M6hWN57_5%6XS5<0gNU9pln*iVr`Ml*xp;MS)W<NV9M3N_{_0}
z<icubmFO?!eKsuMh%OL^D)zW?0h3sf49A*qk5gS(h6m32t3Gj7{TGcHAe^e~dhjJm
zkZz!~zl4|W$Kbmp4FCE;=`r-SQ7)-M_IaVGjp$q$HA9TGiY<MOf`U!29X!>rG@ITF
z+gEOe&k_;9m*o%x!kf@LY@F0{jqg9tfe_vyyoSAmb5c&6>IQpxOMIqqWP}!J3%G~Q
zI`BX0=K`59JvbUF+Y}d`b9@|LLKsy1XI$alBvVnr*>7*eBq>20p-FDZMeOUqTg<61
zW|}@Q^~qAuH$Ic|R$StKws*Zv0X^V!W<-Q=P$qPdz9U_&KiHIkcpP(c#xui}PK4X!
z`P&-HR+btp0c!FUc7-qylmzEXf~8X?15CXB<2P_?T2Tpqi6IE?rxPEgHa1ov@!%!F
zsD$4!W)ei{+&g?j043vxy=8o!Ona>yex8wVeN&W9Mn|J*YF&SX0I5spXv(c<XhbMM
za2%0?P&Fr@I8i_+4%$|d(g0I~=n1O#bVVx4MUa2~cHR`m#%yxx9v7FbS_Ot-`O;Cv
ztzt*h+1ZlP$ZUGeuq`|(<x`;tesa(>6PK=r0BXGHk0A&bpsa=%>*=q3dNz#PsJ2>J
zZEKK)?pWpy+a46qhAf<&_^ZGzFP&a{7dd^wHT#=ghJziaNi}kT53nzd>$ER{tsb+1
zQuWqJ%v>t*T@+9czJsjI`gkcQa<Y=(G7%L5YUv^S)Pq8sSf+I2b%<5hi+Sm$QQ?XJ
zVkjloO==0up4c#2T;G2N&H^bk4WPdbSr(a<_{|-c*#nPl_0GXZ`$(CWqJ+)tCVn<P
zT(LMZ)Hi8={+;apzQyU%_l|B<F)s$_{3Yvh5&~fc@6b5{$<X&wkkC!mp9|y$ZvHS@
zi4?N|vEfs0pWv}2@4f*QqY$9@^~k6X!eqn2-{e~0HG53=I*iq2N@YQCLA|`NIV5S;
z(-JIRt)m@_X~CI9(|i+N8e=b^pi#{c8DN95UdYS$vy(sH6F$RB6EXFBJ^8O*Z=@9E
z0z8nno~#T9v8j?m<fSyFIXWs>0@EueP9=2Rm^AvL4JO8PKbOkGcb;V>JM9#(ir|j-
zDYKCqTc}GkeWt+57(4jkjSME@0=553>TZA6Z~ErB{07d7><4R_BaixQ3@Z>wCQ${R
z%uHhh%8h#6P=afPLbk7!`|r|U!-BO+AmyorKAr5zs@r3tV!%MbuwOt0DL7-If(~#8
zfJMWqe<iSp;$n`jE;1x0Fu}<U(`?Y{21SUPP7Q9(mKWUZt0`7br-wK=PGeXv+Vces
zgfE_Q^bfGe+&U;|3@1n<3_^lx5@kv<Qwe7uHQVT@Hk2%Xr0D`FQZp`K!!i4BBOHG7
z#HRR{47j(I9hZ6+ME1}Jl09>x!w{+1sAwX={;@vZ!wF6SJmF_h?w0BHsQC_4v$45R
zE%in=^=3uTCxRqce29iA0dIO%74dN#1K}}jxKjm=l+~Zm-J#SlY=y7mY*mISxyi9<
z)8nsox|qUxQ3|3ta;9bS%&|0L%W$n+GZyRRqV^pIFc?cyealZ#EPSB%76nEwbNtyQ
zm_9-B2J7c466F{1VxCUHx~Am`gv}I<JKAJluo2X|{6%Z{%=m7Q1@B-0Ifx5@_-bMi
z$ha$(NaI^@E6ldznfpA96o$u%O%mdd1}ajZ3PU+r`Q`2E25h+S6)3B{+u!%)+>YvW
zDyknQka0s#2b#n7aoIyZp=Jl^n%Fb-m5^uz4a+M)%n`saQwiDjgT*jyyFw5(8Z}kQ
z@pfTvwesblpp7CPf(a;55D~j)xDh+ivCWCGhAK8zOF9bhrnTiak43v5j`{($@{D3A
zGc)o)QIk@2tz}!7dHGNiU%P}26ow#4v){;!os=v{bl!5;o%kkC{WkrC_B?~g8P%#d
zCR1&?nxZj+4>`i4(#&TGtMO@bg<FI_yLpX-zv&$TN-_|#y?<&&yY983ljixutQxZ&
zcvDeu2u2grB^(IfMZh|?iQ(V6`+ENrNwyH6gF^XA-s#P0NKtft`~33ZM@IFToKZog
zb7Pdb)0}>$sMpbO0Us4nmhl`37UQZv$}~fNGpwxK&ufn`n0)D+KA(2Kx&G<B4Zze0
zg=r&8t~os7hu<JRUDyb=;x*%oJAeC5c=J7iQx8^8C%mCGB699=(>oC+*Wx6Jx;4MK
z-nuKID)POg^<;Q99@^Nhi;kMCI_lx@nJiaBn_L*(hl0`3pTiB)lP!;$fmMcrALy;+
zASWg%q)->uON4@hr>a?s<2F7l??RpjY4|wV4^=@9i6Dbh=G8YJTq95@V)>D7vNIXU
zCR3%z52MQOJ0A)2ig?2{B?bpH&vOE!ewb6EA_ZYX?N}`vdRL>Z2-Dt5L4~LFOg?FJ
zmEM-rFualIzY8q2jFcakp)TgR!7x01TyS3mTs2xqN30gz#7Am*`ZMb~xJyLZZE>x!
zqriU3@~N^mYAzKzexM<TmGd{wfSBZE^Ec_<Sn;Xn4isuJE8}u`;PAKeORS#}_cy8T
z43t+>>v?dw*x~S>7q<<`5c0obxh5wTEPd3{y7lY+vw0zs=|4=lhOPcv98-{PAZQlR
znD~<zd3g>3`9TF+05;h8KG&RgiIRrfykpEsS1;BU;hQ~6WPSJ>0N0o)vI@Xl5(W40
zGJ9wQWFp5CMAbm#i^k=}j@6)BHBUEHvY>Tzv~B5ZTqPJVm%8$cc=s;VlA}_d3!Ek@
zJGXhP7D<F@s)paA6y;ZtPZuHgq$05l_CH~|A<4}(!K+HvRgs+`E35<{SOfKYbbC@M
zW!anBXqYUSIq}$N;`5EQY~$;Nneu;L$GkE=yk#QEU1P7XNV9|?AoQFUyn3ObJQE#J
zM>{{YjLR~-sy=4kyS!S9_icjD$f<+jjs4qnk_t3l{eV|Fu-!+S4Z{09En1hiZHFFl
zcr1RDY8=wUk*pDuQ25|rH)(8%3%uDVx*`-iskekcQWg)0OOU+#2PEN4_zgrLshi)R
z#1<<?PcPD<c;Kz=^qUifG5<7(j|H)WAUdQ5r;Wh(QW+_;Xqs|ju27};Wdp1JZcT~f
zS!Hsa$yd#Jz_r@I^;%?NiYd8Z&r6nbP2H|N)h86qxCv4p(jwFNYwpv=59a=PVzq|l
zeyMLqiy3_JvR8Yeo)vnPv!;5r)7iV`7lq$H?0TG#6W@Y0<U&8he4kV0p3Qnufa!tr
zXrf2hOuQ!IBZfO0jZ=ySc4DtF)@}>|vB5Lo6Cvys<(Y92>X!RJ74-Jpw0Vc$IgZ_B
zFLDVdbvlf)yNwq<>0}J&v^otKwh;3S_pub`>9wZjvOJ#<b%l^Tilp_<fIc}pYNGQZ
z(5}#=-fF}51=JhGh>$+N?+nEOq20yKHKrS%JZ+O#RX*V<rJ=?0HZ$b)Kg4`?ZXtjG
zKU=EKo;qz;&fv7y-_DXO1$Wq$jewh}XGfac8LhscS_zZ9U>pHVb^ExY?0w4EDl1Nq
zJP)VzKJ1wNe)LOosribQ7kl|k%4h*Zuetv)5HEn5c-;Og3Oi=Ai_pif;^v`Y9@XL9
z<XHs@wzRvaxu03CK}zy)TO~)<o70IT(Spv%3?4Cve8~JocezjT+3F`)eFFj<ven;L
zWM3eOFN;hv%tBASCmB)$?%~VXh*@zv`Xz{TwRrb>?;OpM16y{>#gWW}43&0yDSQP;
zRQ+NMnPPsFIEjmqtUJV*nLw4jH`??Z&bgI0M7zgw5Bmz6FBm}jP)AO$Fn-XQP~2y$
z5(-kw<0*uersI;2-i<#5oQ_GYE3@TeiJ>Zo{u&4?V8L>WiZ4n>bC~L9Xw~K;zXuQG
zt?axmY5hoQmI;^TMZ3wI*%8R(YNyzWF`?U)UFfotNHo1iz%H$Rv#c&t-++7QMXrD-
zZLMFy)y$BHH8dx^u5;K6bBI*`Y1ENC3#zhxXkX$c@}26_;c{?Sn0wK`ZFXVjmqh-o
z&Xm5D8wNLr8($Gq?YJj-b0O23rX_EmP4v!`gAUpFA$N+n<=ovLCEoE{f91H27k|q4
zyXBz07;74*l31w_qk`ka*zDsyr-8&6q=NC;zsNohWhc<)myjMPd4dCX_{@4~17=Q4
zrohG*#X|$joM#kMU!ap>>Py&UhE8K9<*Q|ONeief>Tc|y60hqY)+$YVo_0oh_6#Fn
zFZbyU=lbk*9fTwo*saNXKTyr-=NrYbQdyq<3(@eX6lyg?>s`Nb3T>D<F3y<i4b9$)
zDF{v~2(z=M1`I(22%dK>56Y~<TsVG+-+W#4X=U|ydof@iSh5TTpE|0#&1Rcg`QXO^
zH%X%fq629GG|nt*#1w?=2)W<aoY*|=+(mqHesh|dz-hn8$XC&(ef;>3&YRd8{kD5N
zuXgc>=pYT9$ehner?&gw*ZzD~9oKlbj@n7X&wtFY=SDcN0=}v3b2-$xY1=>ZOx8E-
zsfo69Do$VJUo1NFU)xexeO}Dfk8@vp_|#(C<-HK!8L#Hk;+SzHvSE5-`|G&!d1s;8
zU{ZNz<MPZ<+p6-?peAd-eRq>FGViBA{&#KzZ8`1T%g>ovRmU+IfdSnn0_RxAUdF1F
zmHhB#_%t5g2KE@*;gR)2Na=JqbevI&bEfh^9|;1?n7jjm(sL8<L|tgmI$o@}BWNoE
zRO***!KM=Q7P$T*C9AMbTVSn}*JIlVjgwQ?8QVGzG-n;y#Xxw}#D!&)byYoZ;rTuo
zC*WXjUSRv8ZJs(C6Gyk)wzyBV<Kd0Uc^3!~et2DJ{VNuv{<3cyGb>i!v50|HjN8T;
z`K94Zna*c-E!#$?TRU<ZFA!QfrR)C>ZXk4CH$tQNg8DRbfD`xmNPIdptX&)ODKoA{
zdV`S072zpvA$9h6Dnf$Oh<$P4iTXhGX!51MU}RtH)P(Wp49a*e<Ie@7Z(5Xq+S6>^
zzmW(Jt~U3F){CNnOWB}fgE9lRVb4`L9WR^T4+%7PO}GBHD5n6sRR^lo$Kl55oOfBk
ziS4ZO<tWVMIlF&6mAnlC-!18P(rId?EK%dfRgg04hoiDTx79}rkazOMg*Ex*4%Rf3
z^h;Zvi!2XIDQ3?97`q)e;_<tk{77li;$$nhX=K&q<`shcXiS{yBPfB~G`1Fo`IkJ6
z>?(1|ilk8!i@4P*UmW9pNy%Hhpr?tNO0l4Fk=r3M5)h`EFbMn9I#!s(UsRfN{($bw
z^$!%H7`J1x#msER6*fUrsmCirZL3<fTXj<Ewkcd~bOpg}hG6MO(!*J3BWY{lc-6|1
z#%%rF{xgj$gtK|$gK9+k!G`BX5AkZK{f6-qTZohKV<iKZ-{^QlPe1(*V}i`Jc*v#@
zDo3X1AIgEo1Q(67;6JE^XZM=1Q~?mFiXiYYGX$iBAcw(i_XTQa0x1E?ppY1^-2Du-
z$0?e@>c0)hMGkK11Wr#%(ds47?gP1swI8#pKhqP1n_vobE&s{m%i}sdyW`+~?0-1;
zAsz~BUgb=v+mq|}Fhs5vn0!Sv@U?7(6a=HX5tEGBQBqvdwoK`1T&;G@l1-zWibu#%
zSL$1t66~0w$iq+LpmosxmAXP@3*sVT`1<E9(_5J_^&i973xqOpj}kygAMyu?w*kL6
zH*M^xc*Twj^+-xS$m@8-Q8&z<D5Vng8Oa@G2ef@uxLqc{q|uF1=tCe-*`D~}(0!5Y
z3Y)9anw_e-^%cN1>TI&l21=QtO4*ih^9E08$6XZ)0I`3G^7FC_KAFOwNQyF-;MPXQ
z>7GdYu3VX4RS+naGe3Y4IY$|SUA2tMiG%Fd=3X-SpZQe4`=SpgxZIMPgGOG`gI`ki
z=Y;Ovd99{reOX|83Ay99Rv-j0L!fpoYO*yWl45%0_9=qD+!&4TGh!Ob!Ttj{xHkd^
z6!mJ!$rjQ4g>s-Bg7rH}7Sg;QO`fPz%d3rnwO3qy3aA@Ql_oz`uRwFD)t(?VGc9E=
zGjv~Mk*2Z<vjGJa*hh!yF#w!2H?pzCM7N&uC$#n$+qI`9aj5EpaVRTr7Zso+(pe&Z
zBp=<BhNq~fQc$k4t|V$wr_xgkwkWSyzwVTgaFoJ7y|l7Vl4C_Z(AOt~si1;ge6}xl
z^-RAeH{%6^x}acPuV4#IuTtJ4@E;1^%#fu{39S#&<}l*mK+@+OK7N7xqF6ZZSn!IA
zC<57BtK<vccWu}k^PB72PVCp8vU|aZ3uqdFIuD0!Or}+9%ETjO!7$9Frq$5Rfc6=g
zM11V+h7>N1zQD<1#}&)qrC++7v_Z`$K%HC+60+Ppafh(b7(H_dew)KGWGB1~H_VfL
zrY87jW2tL9-SjdSswQI{9W*x9#AtNJ(O$$Z2xft=cMuUXZMoNTj2$SgZ=>9Az5lyE
zlcUc_D3@4&EYXaKMTA+;<OhQJ9VaLyBK3n&W{baMVr24@5@Pf~`R3n9G1)}LB@|+H
zBBlQWUO=J0Z@-w6KEu*fPVSMTg+!uUY*Y1KD@I}g&k=dviAFUHBLe}?2uR4$tL-%Q
z`?B69F?{nQq4&VoU^osfS{TomY9iEyKDk_3iQlk4U<Sez{sYWBJtshzqropOOcZnO
z&W1tK8V}_`axg7q5+GCpeCnb7gtbBAkPboQ3it_-3AQOF>ZLwcckcbtI`Y2~u9c$#
z4{6AwOh1tm+`p(kV?r>9qE6000G&g>rJTDjKsL^Ry%Ygp_|O5QYyczx(ERwB4k4E^
z#Tw+uW`s+ag8~2$J`#c)=pAi7G0IK>3bZ>R#QFE-s&K+)-}%Hs^h0IzK$?xXO@YB3
z4hn%978KC~dro|I51JyHggMQ>LHJ#vWgwX$mx;Ba0CrJbzyd=W6poQorr^>AMOD-^
zG|2uZfAR3)w*ctzKfgfjJTO_z+D(IVnGBK13;@MT9UhiwVrd%pmLIN)9|OcbZXgt6
zg`1^>Xq+aoa#eoES}M(OP2@X3OJX`C7@K}ie+xln={_an@R3|K(M`hy>Ai!%s5)UV
zCdUfl8Vk1paNa{Gg9r&sQKrA9)e^yw)O{2!uo=jO5ekACt*?oYCv7$fE`osWJjQ{p
zL@9#T0u^sF{UZZ>gJqC~E>kMhU`IAk5#0;)U^2KSXeZl@0ox$=^=PB!Ec!+2V({gQ
zz2?yocx&3_UaxxFuDYIX(|131fou!lP(tMJU`!_#vBerX5R%|2H`RiGp!@)EJ#E7t
zgVFw=x7YXaMo&{3p4+XTqD)p+R!~Zi@>#KdPj>T1+BKM$ewPujsks7PxU0luH5n;~
zzHCvi^n;@pKbJ#0Cv-(-{OF2o^K(CvVx}&U#dI|u114rMk*TQvaiG-GGmdcJC1DXu
zSZFd72)4D(a!JYjbr{@!CSgJlk&}vt#dA1x*{B@)XuZx6)a~3z7mcp9TtB=phOJIv
zlgf_P#1S>&L3v?XBj{%ffq<ik*G*2Wh2J{n{oB6}I^$Tr>GnU5R$4+EN3P5!abRjL
zG^kBUvPl@(h)hUycR9K6b%tlrk!gF*M;hkGaNL`+Vsg-%!Mr&4q&H<R8C51B1|xcR
zbIi1$;YXe&i)hYH#4_&h8!rBicPWot8_f`3%7`JSMDrHH>&wS@vTTgH>EhQQlp6J6
z%M^pcG|lMfWRq@g_inp9fuNKk*AhgtyJ#?yB~9az@|aRf3=2w2VQQ)upzG_zAtl>N
zZ;E#GHU@O~E#!~99(W%G+R3L-@)|vi^gi-i#%(rJZ<l6+V{o|6p!A95`psv3=4Lv|
zut%`zntU*LgQKQ|+cv?u>~rU$-f^y*x`zYV#3YhV8JT<%X6}YXE_*2&^}}d98sP|h
zw}P<eEaeN3{T`z))FvSI-rDU0bq=t*E*M70;2n^%lW$k_uf>|U^I6CYL3QZc++?Q0
zM7#RX+-gT-D1MD1!b-?zYB+VPKHH56pm`gQC*Vt@$5RgiFFOjum<dCVnIJ?_*^|M-
zk8)MK8UfJsbFidYoi#IGp|^9ux+j+{vn>vK$4@0d{KpnLM^V;%u9Rh({dnkS)Sg|X
zHd(Qf&9cZHGp6qEx;hc<o1vV88<Q>dyW{M>s`p=t-)IU{rBaousqY46ffzIC@bB<)
zQxW1fe`);)zsF4JtPY1S-HsmCnoo?#b*(%6P4~;1IW*@i8%J9q2C&eYh&0lf_RXeg
z>g5qKA$5J%hi1mxCE-`e(csjTk=fRct)#>VWF!uWA2kPVkc(>1>C+l3sdzi{vD5`3
z!@<nBm?1X2FfIz(^SZxt*PGa%y>r&|W4PG-)fP0=npwC>O-ZmcC8S(xe$I{4kXY^x
zS+JT8#B~8FyEkeIMvhFTA1L6^<e>9amZaR&Uni2*9;OG@ims8ej}KT(KWVhwnoLHS
zk~QGkG2IFf?>QvvJe96uqP1PE;hN0QU#IkFYY@_!A08Sq&0|*Kffw>#LveBRY{hUA
zEddC@c9uJ=AD|=N`W(~gn}g{JpFAEgF4?@mQY=^zp{<6pY!loxrg5?9nQ6@1sTWz_
zTh~^@$?CiE8;PWM^Fw$SciOX)JR7NMO)`SUkjPtWCbo|X)EntH$@*;R#MC*FScTky
z==*g@H@|?;cs!7)QwZk~QJ54Jj!OwW2Pr6ygwFa#r1`kYiZIoydqZyp%3qdde^=#e
zTJs;4&HkPDZYky(BR{EHXpMQId2XF~Yo*A3?4}m_yvH}!R`aK;;yQ}%PQ34S@_VgY
zetF_5?@87>^Cd@o>GfBB`R82^<>QgFw|Lik?RCiVZ1|nR>q67po?{kWzAd%9$0FT!
z-Wb``U0U3*o^yfuF}dozo~;pG9JV>GuhQ1`yw4V|%X6df{4@J%<kv&?feHw>PWYM!
zpPs7=10dn%cq9t?Fj~F*LcmaBj(w$uwFfe;bsUYys54qMW^M+ao6K|OXNs8x8aWEh
z0~E+CjRXk*xEzcK8W;``HcJzN8zNSj0g#g5+GgnNGj<M6!t;{MA()mPtY|pF1_UIa
zxXjTAOt@#6cH%!T+fVqBX9XbTH-O56!IWBDM0BJya5iw>)WuL?rsMtG{aim*$^1s?
zmU5V}qKR9_dqGHsX+Li5Sgmm?tSx$vfExdsHrOje$<hy>*S;AtGoH%g=^w!i)9&&<
zXLa4<-?p`9a`qVxB;aCq9EnnYFIsj3AjUijQJ6ua>prizmqIKV0D^Y`SYbkk)|eV2
z_JfB=A-ckdB6=YRkXQt@w`_kO_U=g7VV`e{Pw6;;c05Vn3L-KrC*UN&{H54#F%Qii
zm-JYi(-^t>>#=2z<rHD{%0Yh+h+e3-xAb>uebu=%lV{&9v9o@zsxgpyE*KvO6cLWT
zM<^Z;Bq|f746)C$NhhNstoXn^XS9Bk=zeKe^#{!h`3t)sGLAu&{O}(R;UTn6;mqC(
z7|8HNrGTO+Oq|_X$;yQ6CRr6r&BCD=LN`7BS{-o9Cu;EncH0pHfRtOkC7F6uz_kto
zezdTOQo{M2I&n5FVz{*@5Vh@HHt69R9M`4dX4G|-F@uZPGGxrHT_aqch>tK2sdDS}
z$_j%^D7INzxm_mKEsdtKCWJ^eLeaBD2kSNyvLD4h;Gl*Nj4~T}ZR$yEzq3{IWL9f6
zW;CW_EYg(OH7wdt$_XfC8I&@JN*P21NU#t|kOb^xAx^%vRp|7eY1cLb-OOlb%xz~3
zBMAjH_Kw=gAdzrKT&dJGmKuPYo_%z!9+PiGAs(7U;5!Awb1lcH=1>!Z3emRurWP5K
zQ&1=<DN%(bw$`}Yb@^X%2XQ+%;ehm;sC!qln<KdG9QZX8reQf6m<S(Yh<il=QtIp$
z;VTLpr#Dxe2HGjor<hN`@jvx543`u>(B^~DB{F#Z97nh|gzMybwDSr?eh`>(zfZvm
z_>I>FOz{#IiY@vbR}O2VCp2xan&er2%|O=?7`aC?`U=*>_%L~CqAqijo$L8A$-YbT
zr}yk^sK<|!VvkQ9vT7TqWeRA~P<1rJqnPz<eEWuYbs^EX`<JgelA#bRwn;=3AP3?M
z(5!>2iWBgOFq{v?)Ld~mfvqZJQD9M*SXNs|G_11h*h`}*Cbvvf>zXj&$|Go`8$zUD
zlYre+jUivUXLKkp2;mB_lnPW5$0h5q8|t8g2=(D?i?FgV59E`9vq^}LZHqV1n<N;I
zyQVVD7W?Ai;pkqNY;!s7@!fsuI^)|-vC|?Ptf2`B1Pf`Fl$NzHbeVW|c}(U8n@jNE
zLL7VCf)G<RG$z;^T5~6V0|_t(D_A)gUL}WdD0i}HiMKrKUoI+vxbx!c&_Slo8e$NU
z^A7lCx$44IQH`wH`I{Eb$4G(<Vbl+{2&ga=K!E@uppuvo6y`K=-K}?+9r#utR@jy&
z<S7+zu+HSKz#S6*g%L)I{69wIL+)D#GJXutco(3`B;!JCch>Eg-g~bnnT?Ahvm>2#
zH8pVrwxh`7$#}=1$<{hIO~&uyaS-o}uTQSmkvobHuk0%o_yb=D#5k|HY<*xJs1ka=
z5M4g~5KUdFrJ;WTVCZv`h7#cl*CiAY1_S1mhjb1=l0r8qlmrTs0N54`NC0RZe&dpb
z9=_^gZddQve3N%ikUk%f$;1>GjAR(Wh$1+Wua=Ese&5li2m2aGOi-Y7#S~7>FqC6!
zKa2bn$Hl6uQoW>{E|OV4HmaMp{5$b$7MBorf_3SOE|P$brD>{9m{73Wb9Ve*$T^~T
z(cuL?L_wnd9D{z4H@!`PHU=faNIZ>$*TMcYen4gVkvTwlb%$=3`M@|d(4c=%h_wMg
zdl-rbqHs>=I!FF~(Wp4o0eB@Mbm6;+gO)E9->{y2pjNJ*0S>(fxG3oil|v!OOCV7c
zjAN35#+a%TQWRu9C9VRNF*C$7Z!uYtkVr!$j1chA$XdEu^w!xeZl!YMM4MNQ5=y}s
zav>zR<(pEIf*edCU0k_Ym1wcFrAcZ@CkW58Siv#Dgha^{n1!+-frYErYD%g*2-y@#
z0fpy~<bh1`d1ViHeINm6B!|{>Te5#WpS?0LU<V)P3nn)-OvbPw4{3>DgwNI!ss}G&
ziHe)OD6oECMO)Az)Fq(=g7IcBHwuBM3bBAHz>3}DcNj$JN2CuAfy)%&g*!5jKUp$Q
z*h_^ING!^1<b!^45D6w(1t39z0pxs6*c43x49xt9E=3eV0koZ=kjO^Xh@Yv_zt!%c
zHiTkyYI!}QYzy(r)P@*`+K>tkbQmV4ws^DfAh;!GaQFNSYXQp)>>qANOvN1#=n#&-
zKaRyx-UJE=0nb6;Y*sK=s@ec7)S#~DZhot_S))xO0zb%}Aqz(28i&FFR2V?oBVb_I
zv!9?KdWaO4ga{Fc5I;{0Z>aXE_A9>pqwSEwj}XZG1#EwjLRA@^aMyQ0#_CcF9H0b~
zy`e&r;2lB+EjT?MiEkGSBD`%6HPea06YttaL7oHrtxIocG!%$@sq7P{f<Wq91bW2|
zz(9=TC!wkBQ9Od5`X7eatC)tygcxcx3?M@rS-4;%fcm1;3s8KEA~1<R0oW&~z2F#o
zVJf8c9W+0Vs;H|f2IUDb(X-n{RpR2nyr4_8)No=S8>a%j<z$3}l@PqpE`f`|x(bCe
ze>y&&Fd2%DNJJxE#ViUCgRuy-9>^B+J+EYxi&(m#u<YN=SlB}|v6~4Bh%quYW<nb+
zp-<6zb2Q5%80c}UNPPT2p)Drm>qVEsIEZkpl5G!{6Izxlciw@m{aC(|d(s|LKNv52
zVSJhj?hzBP1cR!?NZ20$NQccxZwjeE6Qa@}VKjl@K%xXJDnY>_8wY}c={S^)5sXMl
z1zI4f%{>Ue-9S+M&IX}@hjunXpzH?F2NHeC6dmXLRGS<~6krxei?C*hcBb+$n3a)J
z;*5^EAtWWWL*@=k0xp&>1s0RNgBBRk-H<*1M@#1%#}lF4S8z62!p3pG8@!banTez1
zAip~YJS)TLNzmhIXA_U_;)OP6O3<>7_Z8g_fmQfKG`sp4gT@HM!h)bl2?z-y0SGFv
zJLp1)jEDk#@Kge_5@ZMzVE{paErqh%0@)S_ihNlE1}g{{F(%S5!PW4>83@3FMwU`}
zqy~xwp^(KZE@Uc5QG}ub$ROL|$V#1l0x^ebP!y4ZvPr@L;X?80+kkP`Ss=hb4-#~U
z|B3lC?Pb*Gs9!<#r6{xKJE|bu5ShkPA6V!xAh3jOG*(Tg#0)@#Avljd=uz9$358st
z)8|gDl~fcQSXgw+Fw}6OM8h13-{2g)1K6j6q4|SeUc<mK+F*0aQ98w{ptvJ^?HV7U
zvedWBpznx##vMzfxJZln(tcqu7!E<J0}|O*8;8s}N1RVY@#+C+Z>hlS9itBjP{>!;
zs1Z?vkaYn4Y#gAog&b)NasvVxV1STdfJKpmb;DZ<g*u=ZfrnBCS3$%Q$YYe~7#&>$
zCb{pfbDeF8cyz*W>r<xegq@+@>Li_5->1u+&Usy{d|Z~7UIu?<w{*WWU+q5w37ws+
zwd97eR4}X{K_Wy5xGtdgM9GL?DBLi$ao!NvX(X~3Rkk1%raANaa$^*js&pWIlK4gI
z*CxF8`Ff_!sx_1vQ)proK!z9|;FzqHhH(7a)zg}Fpy_&usFIDi<UUWl%$B-Pi%B#N
z>`*49D2dqPw#bhuLeQOisiiMau(E#x?Sou-72jEWPfe+jGN*E`Ng66pA&?0Q9C}-=
zl&cR;_p`2$I5zUqhYn6fK6Jb-tfAMNbyvWjlY!VnSGWQfq^23<_}g2|!{2-m?~pOp
z*~k-ymd<OtwWkbmgCY~2JLfGbfQTG#M!iUKku|R<1jtA<(hh|=W8OK@L*RGZK+gm+
zOdabp5tz)f9FVk}Gz)A3hX!)!aR(s034rdz=ll85@;dJU=!ZeEf`U{LlMkjGSmp`2
ziqm+Pg5Vjvhh!H>T+$^21G{85We;BANg#=>_}SkEk!LnbT?+z;v&V{E(j60tu>dj>
z0uP<soX}FXEKxeM6IVv1l~Wy@=PA-di3`XgLa?bl9-b$5k|$*$whrNOz`mP=@x!3)
z=n4r6#vb0O5#(oEyj}`4q**+@mqW6ZVp}>UG2Prl2cb>`W=X?%eL2kZ=fy8GG~A*T
zTA~yg=)+8S(q63&A2MNpGDL@l3l1Te2tD=}7M3E9EXa&85I4tkqrkSD?()$Ulbkyx
z$wm$wA>5n`s}D#1Pv7i3rN^SlqF4HA0=G?Kf9pGT8UjI_L9z~pQk3DaYLZh01ETzT
zI2^OFJ08Qn6LW)I1p>O{ur!_fub<V_-E+8T&mUK_gq%92>a(70U7MR&lpk%d@_FXj
z1fuNC5eUsgOF9EI?AbB6lBe}eV)$^K4&?y@j`YhkfLL7~ggOEk4*dS>O*E6-x>@Vj
zbl{wYX?om4Pj)c+Sb2$!aFMN(m+-zU`YXD<NkyDwIPIIw%b(vLA&}MO0;2f~m@TB@
zQASJ}Id@uylZ-J0KFebmB1x?dy~yl}dl|szCJ`=A`x2LQt5KF`Kf7Rtku_)iTDPzS
zWE>hph&B^l|2OrXAH3{=mHduoAbJmM7~kc1FFg(i!TA$2-@C^iqN*nR?j}xeHr!sP
zt8QCx&rSIIx0UCeG@G&AR5MG<=V1uIIy-d72H5}Rs9WO*t&X^YCDgds8HyZ3#dK6<
zXw;LXP{k7R4^fKD9}z7T@*$NH$3p~72QWq%u<<4jQTx3yN!fKB9eo-JMP#`&IFXQq
zXwX6&Jo0|WuEg}Me&@UC-R(Qd-_Xq*r|YN_BPO;WL3DANN;njbwb02T4xPJZcgW{s
zY-;S%2=^1wld~tQCNO6woDkSOqS&n+mRYO3QF`>{{m%#*a>S`;O>bra2<o`{8P6T@
z9;>`s+`XsOb>FSwH%XnOZ$?w;tecZ_#?vxuh0$+N`7F(_lv(sZjF&p&MdBm;16XY;
zJ$NA6cvvULAeqqA&2v-Nvdsy!GUy*im7IHy&gxi|u-HO6z~;@I(K}n~k!74>>o)7!
zW3Ia{H?zS!ac=Q7LxjI}B-m0s2Sc6O*AU}qd+Vb(2}k3}m!@ji@i}&M3!aS^2~2t$
z#TL<~)%vshe+xHDgO~Khm5LE?lsh+l9iBP9cRRiM_q@%!?)WSsLG*MoR&ff(TW-@w
zM#j02vLd5mt{#lDP+l93L&`zEqs`lT<(CP|ftd3dF)`;?UR+E|^ij*E?jUW2k<$*h
zC9hsQ0lDPIS4~K>G;oOC;CjC8&SlRG5xYKTB*!fBXpG^S@R;|%eIA4sM}tSVd0Q@Q
zvy_3&;3XV=lvrhVemK?_FtT)M2Zk3ypJQR|=*i&LGJdeY(xSz&7~o!9?0!9ZuGxz!
z8b(XMV_<fC8P`N-Jm<e&`u?rz2613CH<{piMzIcB+7!D?9RrQJ_WsbxmrhOWaP$(5
zvsa_hYj@&jO=8ML=qVi-!#2Xbwa6=$Fm;I8xWtT}PYM&@(n~YfB>7-F(Fe1GdLI!-
zuP29w!uSeD8Pj(ywk2@JnV+EE8tJ`*rpCQv(#GZUK0kc9>|~w2*qAJ4!F&?UpzR%T
z#~P^3vRwnA!O_z-u$qSPja>t!9Wc|%F*qp&ix@58WEdpTIk^JhiA=qCM6?T_MO$XO
z%Tj9edevz0(-lb?8ku#tX=|p8cXsl7j+A%SYuBTCb~KK6=*MLNa>yU3bGr}S(8y@0
zC`2DdU6diuaOmS~WVlgTxYX9V8%;^Qw&Su7N3thPpmc2VJ>omFGE!Ox3nSUc@XMww
z&YA;#Df5B@go(L_&o9-hTgQ=W2NB((pVpe@ZFk_(X+3&)1f*`a!_<ui6Ap_VKceQ}
z@&qJ&|L$Y$FqBDm;OP4K<Ab!kr&}COO`^p&<(MVn9Tr2`%P0IbSfN;Q^B+E-z3yJ)
ziQ&*jQAauDH*f*MB>7E;7P!M4vVA*V=DMAeo9K13@fZ9mKMSkN&*jBO-%t5Vb&hqN
zc4Ir$`zo!Ay<a$5oJ~E>?cvU=Q<v|%b&>S<w>#3wWu0j}a^%-n%fpe~me%<*+wJ@A
zw|%OzuQ#(wWo)tM6s+gR>NCDW>sz#E$nP=a;<s-5tl!T2*1XcIdEWZ-G2M4t@4q)S
z9c+H>)pNb?%vBv7T&n9|W<955G6JW~`qiqT1V_#Z51)3k*i*zeTd_%DpwO;#PcV6C
z)B@`xk)hBGh(z%4(6h{wMHoS{A@GSsj;9jvXNg6F2ZN|lrk)|DU@_UzDIYk|lh<3m
z<8A>1W-+6!FufZi%{M6f%|eGlf^qxKVS$_Ec@%U)jjSRZ9FBm&n35b*8NBJf0M~Fx
z94vK?s$j%g2a@c#0vX0ApjLql<=k1L!PieCL7W&E;}FJnQ;q>`Yy+SIK)4$op`K@|
z9v7?ZTy5xaf#=_7nTM99juF2fM%7d_b8wDM(9FLxOvsofwC+ulhg~Lfrfi+I6L-u}
zJML%oTdmt2bT^oHI{kO;p)<U`Pv9)p5Sep=d`$4e-nSRDOPMU<UIxEUf}3>I%G`{@
zdHzr1!S|I!f`UF|`$8-FU;;Ouwg<F6^Y6)@UzxBbie`{26>fflC8I^sG!Ph&!00=$
z3SdYEAh2|wP(;`<mAvj_V-`d-&WUqO$Q66ipLUyGx(>zGYN9s+hf^o)m$^_sO<I1C
z-P9s%MKIwoR}A9LCFVb~kkFl-@~&B;rUm?V9*BnI?OC1S5}Oe#4k15$(7<Gi3gE~$
zZ{1WK&{G^|)T8V{fEz*X5YP03zHwv<N5uUD;2y6f`QMg%lixk%-@>owG5NPJnI=Af
z*!l10+vuU<Ha!JlpQ)!CO=Q(S-Tq{nYeq>52}J}a6$od?P}WT59qs6;jv1YP-S(pk
z)9+gA)qe@ukm)msTnI!$-^4R`XyY<EV{_585H$K`@5<wbJ3I8Fs(WEkJR($NAW{3D
zS8#`+$kcOYX2emAS?dfh)+UCsk@23Vln_v$WeJ-d1Fyyt0!51uvG_R1UyGr)1z3zA
ztk)mLYiQv3^UGVbx#itHq7UCK(r@Uuwq-8=E|@}QVns)hT?xxeTn8cC;#Q84<<9b0
z@2c&c2ef&eyZ|hD28)0y2EqfKDlhXQ{qhkm2y_lG;W!G8V~wiC&2`xAJ2}DEvBoA6
zKM%mIght$V2<#~uJ7`Uk4o*+N?U^029K~hCV01NyKdHlO4{yVf*LmglpbvlsF}CS7
z;jgOXAarcgHN982hJ@3=!JRX1l4=nNqm?ixiAhXgNXb!Dmsg}ny2JUzPQ(>Z6Ja8Y
z2q7XMz=#Ba?E1V%=7BK^fy$7=i2xX)P(T)uNCK=QkZhn8Wyq98GNsaz046MhO^L=6
zeU?eu0>Fkykx)cr3VH&`MH6+5w`ADpY<Z}(l7i7eB7og}$r;>vjQ(X43UeW3bXbi)
zKQF;GCtGI{BE!*g2Dnlq3Q^ws{F+&pua;rH0eX(_&R4HJJxz0~><^Y<Fpz*sY~M`E
z9g;N}I&P8P6$)C9!|D%lsRl#oB9uUn$R!&E6ut7M-NsLe%4QJm@Aw{RAWq=$YRZ*W
zSp@X*Q4XEG^X>N)3PQi&*G<Z1>Z`&A*RKxi%VgR#ZHp=t&6XrlO=XIdv|`86)V!N-
zzU%SU^R@%p56*nyXQ7Y41mf^u|FUBd00{zpaD-k_`^X2_ZAUcnu$R9(3J?kJ8YD$Q
zNhjz@2Eg|b1Lx?V#O~S@?8)QE^pGbB`dE*kKJb3z?cflQ{gu4PzL~uK-^!&S`)@0j
z&C|rGOEg)_zid_)IZ$!2K~uKLL9M8;=XL;eDIp3<V2enRAofuHV+Y6g1frHAd_RAJ
zfRQ>GK<XVJuxav9D1G7{>!K++(i_}41y!Avqr!J~758S3Z`a+KiMJNZqHdKFPS^z3
z{<<Kq&Uq`VktqM39Wl3V0c2RGMzBp##Dqi1Em{=bnFw#(Vd*5Lf2mmk(2%Wcgiz4O
z?nEWbj}H9gmYkNA0PKS)1iFEz7>tFq<<Tf$(ixs#6yrR&%?go{T2W7kwcRSKMJAS#
zakojxK69k7<au6la6K90p;cHc6->jLccSwUOD3RzbgmHOyH@6lqQ#cD$ZB3->4ixZ
zB~?{t2XUU$CUVxP{a4zO&8(D`rxPJ*XdN(IwOpX=mjACm$#PY=zDld<sxlsDah-X(
zEDs1ua{jBdJcfpq`YghDy)I|^KkD_KT}FKDJWJy3u1x;U{ar9uMCew%#U{hPmcZFh
z79QU&`N69JwvQi&(D5^GoqKmF;hJF=bb6chPF|zO7qiCdZ2`cn418$!;8A3W2w<6#
zc~MnPs&EBoX*)lXcpJUudN<xMDI;jbf~(QI2TBt@5dqR5PEi>X8O2#e7WlNRp1rC3
zop4TqjATyF0)hpLD_Ll0f6gFT(1+WwWbYPWkr`+ZPC+T{&nz8~$gx;6%Amh-_8))h
z{Pp@od=<QmJB*N*v79hO_QTNzqu_iHXo(4k%J!H^4l*}`PC6IxonQQBPL6S#ZDh|A
z)sN`0LgtZkAGmX|knXFX<+RS57}!c>+zJuTNL~*dMC$K4>CB<GNY=UrA{=)chjIN~
z_Wp4BQCfu*iOR#;kK2JyjR+)nHax+Eh<R)&0Ux*Xf9$BP7SuHW_5}6fs-6Hp8&hGR
zF6jC&*d!Uej=xQ>Ymur#C*^{cv?MN;vaZH??YPW^w|(|GeH0nSzCcn6vLqsD609J?
zHTkIO%*}fWc&x-Z*h*iT&EjDas1ky(G2t2=86(k13Ho&w$agZZ{TlQOdG#S-Zlu1@
z>(YfkSM{r?`XeXnB91}|q0%~@A>43BmsK%>M*{`}VUO#>V8^^M`aG79yt#m$(#ji)
zP_J{`A9>nPX#=XKobUi0pf&;?rJVO;m?yl4D2x#Pg%~B?>mTO>zmY@!SNUECm7e}x
zIoP6_j<lRW`4|d20w-h;Hlxtk|0^0fz)y}mQY#WF(lRiGd#fIO5ITY+4{-ifpcfH%
zBvYVbz50!Zy!L9n5V&py&(lMC>U^Ll!=Zm6sU3P4Fn5&;EaQhodcZueNX^Qj6W&6G
z)rmGuTV7i$rK-HG&82m^ooTP3+E~`V(VK0?GPV7imzR}XL`~lDiOe{HbG1#S#te^}
zMF7ic{V7XtytHqFy(x6M$Mz}^2_pcIHLgO3btkSmCqks7Q1{Sa)$I7mnK4bf=I;fV
zPc}?Gs>uqyFjlgX85|M{Qb>`)>t*JRf;uKJZX5ti&hT@<4v2pNP}o19re`qzD~<)#
zBr5**ULmk^1H#-agwxe-%l#x<4@E+}p^#Y%0>&~VLJ)$HLLqN*dlHcA;`3m>>zISz
ze@h8+^iV~IiM<oC6pR=0h9I4Yx(R2L9zpU%=mr7_O)W!1qx&IBM1X3Kd_%K+P(U&}
zSNnf}_iObZPxhR>S7qOz)GHX2yN{IMaKWIu)2VDjG62#;<($Y$N|PYRNn;9-cU$Pb
zUn8TCxc}bG)INH<x`vF?Z*vS0tF$m|OfjxKpGG3)uim8d8pyk%$_!#UH{F2H6a#?o
z)kIBx`M(_R%Y(>l<bl@1q9jbjHPdAYiU~bK1Cq!SCR={9yz+*|8Se?2ozoDDVLB~P
z^zPub9#SE#T=a*!OKK%&m}VS)9<#UqCFzZ1$`+}(1_9Tt%2+-G>>)4$K)gMU3wSu8
zqih#j1mcsHkeped?e@xGu&x1Zmg!F@h-!v{8W^NEiq=Q;TF^0C6X^kDKxirkLkWm`
z!vqP8xI1Q~XWe7ccDkm+x&%5C4krqO+NfzN)}h|T?q8?OV!!79BzLQ1j<Wlux0tt6
z)#_!;_4#OtD@eyJVoIpXZDMb7OC(CuhnBuXE=N+_FTB`{zPFpUW|^@r+pNx^4`KMV
zQ_Sy25fcT5+holJQELzrPIFwMLv&*x#C=KHK~_LG^l<dj+wwe0KvAjTB`_}Bz=6cq
z5O*1d6%5^Es!h2&2z?jX@;S^MNZC8PQB1=eObp*>c86jKE}O3_d=?RLIGpPd)!fJ=
z_yrGzZ>B|!9n?_$Q<6t!qMor~RMVui($3K@gN0GKzrRZNldHs)r!6w&D1@s^N=kU$
zrKQU*+SaoX)2^heWU&u`dM(gTfr}VUA(ry!lS~8(l^2H9P<Et3w4s&4G$eAGA5>i~
z^cf0dVS&rrV-!d<mS!5ounrejfE9}~+t;E7vH(Qd@7uZ0V_|_E-OpHiSSBz7Gc;Uv
zA2QB^X`D=4a|Pt=k<6=J8O1RJGnv6ffv;31Z6dL4@&dC~QoT^stL5^%y-!;+MM2kH
z1jvV3q(CUFXkdk*86+!LkxyR7)4vm<(Iq)~iDcrcDy)zy1Sux2ILoxRDP%`2DWaTd
za7d*f+zw<D4DX;BUqS4wUBZhyLmo3bkUVe<8Xm0nCtQLvlPaSY`)y>vkw~B_A>BQN
zJRo#t9@On*j}mD}@Bvm~v#r=`rb6LVF4kwbLe4fB9bgJ$CZ+@-u1aRGFs0CQECK;a
z8KtnDy`HZOOO{K=xI@G`L6zvM%a#PKXkd%T5iH$Ivix7(8tT0#B^=2iq+L6VcKP@d
zKv{p`aOFBHp30OIcWrF=zj_~m5mLjl_`}qiAlOSgvt`^wBEWp^=dr#zoHGxA)!$z_
zXeim(2HYNw8VWD}g~9MU;lprycC4X2k2FC5<CZ!JW<I3PL$&nm#++z?^|tu%9>R74
ztXVH)9URe*nG$aAa0HKoBc9M<k$yOv(~MbkqKPAgIDul=nP5F0IF>s2`1s|whhWMM
zfslB=FCB_Gc=xAZ*O6wBj+}-Qdp)xkxh|Vd+Rw}jg_}|XgENVS;>`}?;xx<W=RM%4
z<y*gCI9QGNV6$1m<=O1vWC?be*((P73bpfd-uBpSyJI*xkY;|n4rA)9Zd~R3nm2EF
zXO67Ub|%SckD7Z2Zno@`5+(%6vZ!~I#r*L}(a~@q<;S|pA=u>hTS1#_NC<nwdy5c1
z2X_icx+qoD5vLCOewfgl#I4#$3UxPPoC?*Yv#(wpw7M3CI3Z)Mx19B)7tHK{IucB1
z;2?0+A=yYU&~@-iBiWd}+TYR7bOrT)UaYxj5aiCN=*vL4e0(WUcx+!|3ff}D9`-$x
zHbv5Az=<v=9Npn(TfN&;+uN|@Tc@QqC@BW2+{F@LsEenUG`VQVH%?XlLkctJTw^7C
zS=RxynDU2oF!*+|)x(6o8k~W~Ov#MglL|}F(;pCL+mgnVYb?eU5n(>;@onLZWe<{f
z8YXI<vdLQa8{s2Ti0jbP4zMM=)r^4CAj2+!6YLjAnz3dZ3A?{F@fg@LCz-|hFL(m+
zaUK|DPE*0QUOdaMiL{%sb>C)vI6c!Z@He9C*8Oxranm&;3jE^pyL@KG8!%9r&xSQ(
z!B%mR$oXqum-d_61^p1s2#qImw=i7c0qMt~B<{H#raE`-&!INgSp#rj?(d>hnQ)hB
zCX>pt>6$^%*&h9i5DwKtsacgQy(W-wqM8XOJ!wp!>&F{T6<QZ)JNbQ{4}oZ+#TW`T
zZ)Yu0TRAMwt_VYH*hjWwN3QMNn%Z$+prme?J_|?yLGf^r2v_Sz3SlDXP1D_6NcO#4
zF+xoz{@+^JZQfhqhH<<TQub(Y8q|iPV7w1tJQJbZSpnL_6&vOISnHzN!?v;4O~mxX
zTg%ub-l>cxb+W}ZtqP*@L|CVVHp@M3(Ua0KhrS_LcI!r>=DI&l_!J?}p09v|sJznY
z$}wjst)*6#J5FAhGCbN}sn$Nc>G8N5I5BRas6yGHGc+hl!6KJ)&G+0|{_mZ))U!2N
zoCoT}%-lzgQ4z})d4}nRX2yd^wTZTu!pFI+A?+=CVb#)nl3g}TZf8swf(&)5$W7+9
z!c7r0iYJYz5W@h0%re+nvfwPTno`Uf=>LJkY?<)0Uka?tz6Lk*da<dThhDwc$lk3)
zejXoxOlJ<oc#x7vMv&~1WXUL5QZOk}9*?U{nnH%m3CbD*Ai+(RC6d6!1f;RiqZn`}
zT?M@E5G;sCYXqIPoM>WP!FLnrcg>uZwYn{6Fi|!O`Iv;!H9WY`6>>0>SZ2Omn8;)(
zYimGAa4G`kVGP+d1763)!+0(n)fhO5@r*h5Fx!DqPIFDD->D@Ec!$(;HZKqOZX?R;
z5^%8PHbGxoE~%d1czjmigH+eEv#F&UC>)=H#;{zwSX2mc#B!N=3^`6`1?63#wK}}k
z>biy^#f+p7B%R-ao&3)gZ*dbBScqD&m2e|P%U<AKWQ)_Pm};kG!lBV(YG}>}zdE@b
zEc=VIqiRwUK^TE25O(0`!}u%nHakyJ^qEZbxg9~(%iwpKUC1X(qqom2@EJ{&*^R)`
zS=P8`HFC}lL#yV~dbTC+dW*<Qn0*|2tC)F#K;2+?OnCQ;RJ6)md36O8;^nYBM#|u&
zlVD6H+io9!v;7|=5fn4>#|j<$ZZmPD6;Gm00GKw&i<40WH)Q(Hy}w0ugF2m)#l+s$
zQHpWdgv>~S+rr?}-QBR6UDzOu1QYQ!EaD~voQrVNG-RF(W2#U=;dVORj^7-3z9NSx
zm^0r4t40in5Bd*~I03M|<YkD12$RVQ%Su)>wFZ`;((|c|W>#rz%@v6DI`*$)q8&q-
zE$!rTD|eui23lrq3mt=zNugFv1D240A_r^&k>Il!rn@VS&KNQ+0qAoO4%sn}Qj10X
z#R*q#x{h8e1vJmqSn9-avBric%wLh3W;R^2v1zDNNj&P+ISd3&Bn!x`F|(1~VE9$d
zl1U1+7vDR&cOBi_teYzeva~VfXwvWRf4#mwbVcI^F!#=J(xS@MY-d=~!IhlnInFco
zX4%&Q!x+e&nWO274hV31v65wQU<wtW>l!bx?&M@JBp$$ff}W@mry<7lCsqbI@#bs?
zd5~HHA%`=-{`>cMjfOz{V^tHo_>uE3@yy7!FhJX1>%$gX|55#?_LROIF^qRF!O`Rr
z5k0+}y*%!v-@J9N%x;?@#5<`y2MQ!@3!RNkh!SMET*DCJI|@~5;yXY-;D0;`0e+ER
znGp|}AHb%ll_L=Uf8A&FmlGhSgT(HH;0)&(V2oREVsQyW$qP7{smFE7nL&qbV<!qy
zAJzQRfxzHHFsXT@OVF%Zy974gha@iO^annE9cuadbPFA?kZ2X)c^cYcU__{H?@LcR
z3exiRN4!3PPDclejT}jU2dumb%|~OF+Bipf$<AS2IgNPHy%L$l^JpnJwepLmGg|(0
zk|G!+1Bmb;%$WCV+o9{Qq(InaR_0uH8>c^P+xLvpd-i+<@kRNk+7j6)AF@XDJO1ZK
zMg2sYVplYFOk8cUSey&3n>2gcHKDUqSB<3ITNv&-w!7C+%J1X5dOkCO%GQXO7ePqd
z1E9xqw=64TQZCKnShmgMh9PKbytzkDpgIp0FrQ`#*G5j}zTx*I5Fr4PObI6t=fVN8
z+33c;AoZ3hZekt?L4mqr7i>j3X!#N0k^2u+GBXkKO!)lQg(22^#NX#0yL|Tkx6Qnk
z2}Be%iXT0fypN%?efiK?9S~)Bgfoq?xEDlgC1ZbY`v>Ah^~P-s`q3>3x#Ks$di7_6
z;P!OQ?$m6%IS3v3v$I|WBU`zYDLyIum{#U{zb)X<+)c5il)myySu^7!VW~F<nZX>v
z5w7e>HyXoS>rF|gqLfa39lax?1WA2i{ODLGj&Sj%Gn$0P%(&WD(-u-ujR<5w=Uv_F
zyueBvZ%qlYqm##DcRD+_kC^f8*&D~M`@!X-&h>5Yob+U|Il(24>`9K>39cOwn<d{l
zI(xO#VVM)WVaDvRdJ&af8M8RFyoF9duWHV{3Mm|eUtvR9CMB(SQYbSe)%~8~d?6BN
zKMsTBSjd9QUXeMljpcjl+?#CHw~gUW187*mYD|YTDQZkV7UMc(;BeH{c)G@L9W7@*
zPGiM+ojX@GxwEnWQ_QL9<uR_iH(flpMD^LZvO*S^ve~B&43cr?OPh|*0nsMeqp|dc
z`6UNKLgZ6YY~OL7vANbAPOgK=3Z^|<hBQ_0<J-pLQfIR=ItfQbc0Z(ihfVCPd)PWL
zgV^4Bd=57pwejjTJ~L+CJdV=6yHaR-JQ-%mR>(s%bUYn|N@32-3&5n*{qWHvdm$#I
zWN$2KL|Lqw@G9p~yK`|qdg&@Z7QeDaLPa|=C=qjcEH`rnr?JMnSu?dA5`qlB9^puK
zfwpI%py5}u$E9RgI&Wq}D7M*<+npCA$?rlq7em>hH<}1TnU7%|ozG81Y6`=>#+B*D
zk33K2dg))5@3(z+`5?10o#=~>TA*qpp^(XD<7{k)8!4hC+EYh<s!=Vwy8VtFsn1Ow
zrl9cea&A`&M<|52G9BB>+=CcDmr%uW?(#U7^RxGv&fbcADd}|u(RZRZ`g44xqVCCL
z^!gEGhloyI){R>6#PME}ZmJpa)yGznEh;9@9HQJFO<mx<F8Y>Mdd4A|@Uh%&Zorc>
zQ(9moL&@J=&uQ#Aaqe?7GLl?YF@|II%qa)mLIaV88~LKO{OA6E`5F%|Kw84N(u5FV
zBg353NesZW*}s=hKP=(W&T~D9b67e2{XE*5c0K(LR;rYf-9;AHO$u#usi&&gt6cKO
z$DUU=TkFa1ORlC<?_2VB)JA-#y?N)6j8$V9<k~f#A@ko`j=b)#sLj&fFU}7=PCN3a
zUTQnb+Ew9e&iu?JzO8jH;a*zT&8rcbF8JoRT+CKCir1Q1e;<?P*E!7E*UjNQX59;W
zu1TG8Z{$yP&i($c+JOl@lu;CrPUwR9dl^gOOHqJ!zD9TUW!Do~<$K~|SeLPp=(Z6t
z+Y0VS7)C-9+8GG-BJ-aSa)!+^QX^r4bLxjTo&tkW$_#*3tk*W!DX_yCZrb2b5+FlP
z#3>p_l)B699ib4#7{&*gq&Wm%B4wXFmkJpMb~#sBFJ_dINpQq549Mw@!#9xc42D48
zBM8YDoZRIOWF$k9UDq41G>(v7enSob;xs2jB0_-Y#d#OV-DseMOky0iM*&$9TnBs9
zF-n*VB4>pZn$g|3)~Fl<B?jTYVmxF-(_K84f^A|3rcP!TY&)#fJ;BVvZX;;rjciRJ
zb~uEAt~tg9losv+;tK@@xtrHVK*Z*1&|?ZH(4nYVDN^JNC`=$pN)L_Cb%<_(hiwQC
z6Emug@^Z@fj$@e}gM&aFoY^IFH}rAQz(~NoqK7GEffK+z@bDm=G+M4Eba>@e>kk-u
z8G)16xbAxzrK8!bN}BfuAW-fybTRDf&mwB$He&CH8?&nL{iH`gkaRbxbT_YtRHMsv
zKJk6}nD_A9)`Z*Y+$ir&NvMYZgnFmB;J<qY_w7G4DBONTN<cd~!iUTW5n#wql~Ok%
z;`P?`Pg8FcTJ@2uETLs6EA^Azre;b&6d@4;eFr{kpcf32&Z+>|As{K@WHFrF<GTF&
zhVL4#^C%Y|O+b(kNDvAlLLuZ8N<WFnN$jeCzd`#TQ3$7xM5R6PO<*CmPcs4qx(5S|
ztwl`IS>b{B%qa*OEt7JQIQWNmsP!2hXI|ux@k*W^4w#tZ&e*ye^s7Jb2`It)uycJJ
zY2qh{WXBKQSM0+xrX(E~6S>B3*v){HX`9u#)@ME1)NXQ1HYx9}bU~D7ZDi2R#%StK
z8b;$X>N(S4G!iza(V5CQL!F8@)nj4Z+MS(3!u?QIyWbCots(xA&m!sR7RLSuWe$g7
z;pZ4vZB&yY6fp1ysiB%VQV7bLTvsDx<lB)XR8Fv*ATX2<H|52R{(%VRs@1af%lBLs
z67^vHf7X%^fe1&_4B{b!9tweZJU=G!fzK*CK8!nfiqO^Dd)E^7qxvJci0n?$x*NDR
z9)3_DLJWWrh)6JiNFPw1#lG(!{5!?Veub1ZqW$2n{2&F}qIG8GDE6Kr9>N8l^JKS^
z{?6VVn?D8+Fl5d!rNW(23}kVrSXETG1>OJ*#ahWOgESaVdc@+8p%h443Ma4(en=82
z2?*xiE&WbGufre3hX@(#3hD?Ps4!kbmu&w`z8#MLsCKd!TxhaBGWGZVPYT7Y@3)P6
zMWWovCzQpJD3sP5Z$WbTAku<0<KiXkmP%#i_fb)*yRpCX`B4J427-#6A5_6!xd%?+
zA$DTo_%c2fuFP5wfiYy4wb{*IG*}C!eV9kVe?mtvv4(XxXMx8a0hn7J-kPPmL0pza
zgmL(}Z>{|u$<6C|=kvC`sTDi47yEmh+@zTT3yvGeUiJn;V6t|4fIsZ@G(POZF(a0$
z<b1eXW?(M43SxV`$F<YDZig7KWuL~mUb4l+G<Z-!@F1a_t)nAh;8ba#Xu>(}Y%Ypt
zF7EyB;<Aii(YJ(U4COpSjYz5l?CQFzJs0n;%o1uq$EPHooOl^GXB4ys<`Z<7%~<%B
zq0@DKWW!gU7QTv09ULZInD};dbXtU(HId63ZV=LOJ51XVZ;8ECL%yK1Tiljoe?ep|
zp&Y_)%p-6oiS{qY;nU?W@LRtV?R=)b8avzhPq>RRSqem0i2ie>!}$i-yu6>w#w8|{
zU_6bOJ$3!jl0&s7lV)e9z<D`-1R~`$Do|<)PBP8Ud8G!p$l&F0#I_U4^3t7fzUgJA
z$HY1ZK%<3NQ(@*S&}^J$K;(^N9)!Flj)2N?2H@d`fb@JLRvm|7=I`+uJL;==#PU~_
zC}}E(yJ6z-GZLj~g()>n;s-h$>Cxfk(yM=E7A!qOy%X37Z9x5`x30GRXged?A^HII
zexKY1&7v7!q_TTx5|4lWpDr6n2s{M<Lr$GJ@M?o#-6IPn<rP8PA`elL6Mt(d(kM~X
zBv+KCavF$<F+_XoIfhWIs7MI-+&q0kD>b(xD2l2NES=&T|LKjgTWVTvs{W>p{QxnO
zW<#_*E1@&*Q!QlKf0wX{5&iGk{HNL%+Birev85&b%nkxVri7kn)N(h@X7R|#@3jJ1
z<8h#~16Z{V_4zJlusa%$4$?5&Ip!UblBtp>*g=deC&(Y5Apf`pSySfvAN>#Tzd`tZ
zyQ?Z=B>ozo%+&miYw{~M!ssea3KvvpU70-RySeOsp+4ag%nFEY>)zcSL`QaZ5<5=y
z<~wBWksv@Gq?)GcMDKc`+ko-3fehhD$z!uJ<u1oTlQE~vCOR78M$4JJ@tNDe$~<nn
zADE{Wwdauf@y!2~Gb{o;%u&lFwS6E7gL-)vmZQqDu%I}*qu7ccreSz<<)4mt*xvpu
zABZpKyez07cR;G3pz~_}=qWpM@`~p`fJ0(^5H{t;(W$6g_VaX?ZB(hLBo$*4LYPvp
zz>$p<WR&{O0Np&Qz5*E3n^93lw!o%}7(muTOdzg->z_~w`T(){&Ar8^^6S%rn0R?(
zWrx?|E~<g}yhEsK_v3ki%2AKc1ggMT4nDN}yRU_vKJOG3KnKN_u+v6Dks*w%QY!@t
z&e;;cfCx#7Oc#t6phH&=5+`VVA6G*l@(3h~i3l(VCsgbrw*l~fU_gF>@Hu1@Hdy&J
zbpu^#)X_V`{BzrnfOA-_Jz@2c7&C2OWPy;a0)zs@2OolJwNSY~*-JG2{cNJE1&FA|
zJAt*9q)}x7y8)(!fWpL8gUV5muQjS-RgFxsSfbQczRO<-Sy;-9XdQrvaD&dcT&$zP
z;{t)v0fi%rh<Q<(w5w7?fEF2t<_bs?27#d^-5VhHjj5{?c{JoXEx~t|undBZVB7#w
z?k9tjGN4}YqJg8Kz(0}v`f&vOIno^%Ml6azi6Ds}tD=u6fyq_!1AHm;EILA&CriR|
zfuMte#d$f2K@&WzL#!XdFXaT*38+CFMxg+Q2nt1n1n~By*9FxsYHw!r>z7hNH%y;T
zMVt^)K4^st)GbAVh$jF`FO|S)dV$x#qze#}*n!xHz?5N-qCo6;!ePE=p|Dus)&OWl
zY9Po)8{~d+@RD^NkRS6#MfrGOY$EysdL#SO0@Mf}kan}Wwz{~aPQuqA#5!#oeZX9(
z69pEQWc3oWyC^vkI1%qYIKjoJPwNjTEU|JH#Ecy){P7HKnQlWnS@V-Y%Hnj?Faeho
zR7L<;@=k0D4)Dh)d=Uv55D)1E83jWkZwWh94^p4;Ab9_;+s|Tc=l_Tr`SfWue75?(
zUG`N`T7uDrFg!fq+rLFdPG>vqdntgP0|OT_A?v@l5Imp~C`hg;MbrBJsxvNi^!E4`
zy~4N@`pk;QZ>AIE6<-&Vj?U_SMul&t5TX)}GR9Vy3n&lD?+MZA2edWUxqQ8)pb17n
z03q4|IC+^v{|RU^@9QPKwy0-!87Z~t$+TG|FybT>C?cl|C{uxoK(>vdsbF+K#q}nm
zm{=2=HZn^?`R_Cog9V3lX<^kZq_qhtl)#hZt8Jsy1y^cM+AX=9$pfSb1CuC?s;#x}
zbv`QaG$j-k=%;7(5ib-6=?GvSY4PvOE*hD$v&U`cjzXVvbn|JbCy}@syFMUZ>3h%-
zf!rn0`S|g8!d$tC<N~f*h|z;L3Si^D&L8uFn-B!``{Moa{w71hNG7lpsK~G;!K3UC
zsIYT77&ah~ge(*=g@g(Q!otl!zz~QVK}3;6ZxlqtME6!NG(US8<E;v#uwo?OQBK#i
zLJ_5z(~eyi1g$iYlNoVtm9R#aI2IS@t{5Tb^zwWX^3`VQ;+^bcdwbkEy<Lo$0O0Is
z9S7zGkQVA7{GbMAY-@dJkTzw^h=b9ZlW8Ulp(fNb-!G9fGr5deY4A|wlG($8^5c0!
zUmd}gCBG2Xf&tvfbk?e7MKmUL)3c248y=RCRti$Aoa0%dT5dC_F>)dUXn0p&xjQ7v
z>}t*4L}k6>XL<)s&k7yH5rdV-eQw;Ku{R?Y3oK}ylaN#%0Qh;LDd=SG#%^@^o0e@7
zUL`#;Ni{Ym;H1h6h{Iy`W|n)nPTkXH3XxafTc~J|hA^duyc>ikOzM_Ha%-tdO*xtv
za{^b@rmpbAlW{VR$R-A)$&SOA!YPIcM0o^p5F-LHBhPY+9R?-{ECLv!gwf1VFzqcM
zs+cFCK9Jy;QAMOhDPe%V8`K@4?RzFC1TceYEWwfnpu~|(8c;5h$Z(tjA;LI-zK3AC
zEGE!~qfizJ9!rfBr8q)xb+ZO2O$w!#byziML=F&OK~bdvH4n*biY2MV2zE@)FB8(D
z_Am?+E|T`{ms~=8Tv&6qxWz}Mz%VzvG>mXz*#dsOPW=jEM06-DK@g?gkf2t(;J-Sl
zHBkUgK(W7i5Q!ELqAdz0R4<(=vg|eFt2yB~iwbh;byURMa@w4oiV8$DAUYZ&gL0Gu
zb0rQXDCh(T1&s->2)a;FZZ$a4nZv!q31EcCn9zhxvahTTtIX|Qp_F(J9fN?AASS1~
zsRt{wl~a^z7J?s&WNKnWN)h7*5ez~FQq&MJ*~YWewrHiA1wm#_;-}GDKt6~vAa`?C
zthM$BK<a^_7B@b}V`G;S&EA-HggRxj-cq;OLXsc{pnu&00I^j_L+-&3Bu>2Y=5Od)
zeg4<)g!I4XM}APyMsTJvBtN`tRYj@K!{fOMZByumPp4Z?pESIWL+LLtHk+YI!7T&!
z!whZxbU%0>sUb!{s#C+#Ji!6wJl{vZ^71jP{9+Y*v0>ZRFBUf!aVz-mSY8n>Cu{^S
zHXpi9`XE3K`S#Gn{RBNROsN1J7%<UIIckoWIHXNR5E$`7G=cK&2C&p}BkLm4YGBv%
z!F@1_zsYIkOrSGU3HC%BvhgK@WUi*5O8|N>B@v?{2tSTHx7(7I=0rG*68d;K#`P9L
zRA)?LC7oe7oz9Y6#S9jjAlQrZHoE?U9l3(k_*K^T>@Vc|UE5jdx7c+hpf$$j{oV0J
zh`Q@R(bC9Lur|5ZCDGYzBYM-r_%XeIH=FZe)&?`8Z0^Em!SLA+B*@f3+k10E#ZB+L
z=%0x%U~3DZ3*&q{m)-LgFyFU9EX+2j69yP?7D74-<O+H_8nN@z%$fG=$3pPEqlFy2
z_3FPasJxze)&oyzw(rYXYtWKQbL&9pIoL<i$qIJj$|ib*r3<89BF@2ltZt0Of?I`V
zW1#Ew2c2pL<Dys-K*$k4K#2SfLYgoXh&{+tNFTKbED;!lgdma&2q@tc!Qz+d9H9Aq
znP3ofrkCK|wO>-cchpT8rEcvzx>kWfg<y%CFqI~8Ju#3I1++p15*$K=(2%kOpf(ba
z;rk%8t^n3kUnji$56wm^@T|6d_sekH2t-4occAs5g-2k48cFa!+*!5RA!36tH6x`t
zzS9MzuB{3Yfe}JFDg!7|EF1<YF)WklaF7@TVnW7b2&@ISi`qM@m3Hv*?qg><3O=-Q
z8O(ChWnU~3Kn3QIJ&<A#U{QZ6RsurOepXD3W?=GxQb<oGBe+WvMHWUdiy$d?<^kw>
zjngV7pSYpNFe^Gqt|%BVtvcFnXCIrBA#~}&JhO><;pUu%@MG7%AQQhMsw_CqArA)v
zsTMJVTRCY5x>iK<3B34t{(cxFI~A!VV-ggyk}*3Iwn!9JK~aaBFqt`h#(_N3<UUE@
zL_ey~k|IEn)m2F)o&bE3#ELLrjAGOZQp%XmIaHMzskE-P)ithU!2*e+Q*1SpW(0`P
z!I~jWLX%`rnGr$)nIZ|Kl0lG@P)(-N>DCGfmJ-lfT9A+-At5Z-bq<13m^=Qzp#U`%
zL#QF3co5^jYT#1g&p-Gl>h~_--qCm-zikT7j?qb0j50K{(L;elf<!rAl967(>W9s<
zkXJuFErq8e^<WD9G$l_cYX?HSVPq$!Bw*DP7%VrTA5eRLd`k?Q5bIZEMGi135Q482
zQ3~)xWC2D*43n^TNQXUjNeFt#Xq?nh=(_q4;*n4D{!|I&!c`?Sq!^_}FcJ|?=o!r_
zxQeLe1fr5E)@<8q>1}N(wW>>%bk+J@skN_m>6)ghW~)k+d!A3k1VnI<@leUIFWg-e
z!ZbE=uVt^{QuXSkUlq33(O89yQD#`wTPdto*4|qDwC%CBDtbUVon)q<v_PYhB^+Xb
zXds<@DMzN~xvCl<mlC0A77=71MA-YT5n=)ealayz$o`;C@S>a+T;CqHu}@m{n)GCd
z#>)3i0{|{YhAb=qS23sY09B=bjZ!%btsn0RpfHU4r6~+kKzs=Z(sHBnl<Nxn$jC4`
z&<ZsXnKZ)?rtk|zy(xE2yIoZ%y=JjpQ9u*SJAYo^iKdF`!g0<{3HK1jDvB}&qzS@&
zW8<<?xy&;yva(KsJ-?|yBm#*DJIl0vkuhq&J;%LILNDq2s?3A{gaR=Ev{=FVp!|pG
zJ-`9}NAmjX>#Ki&|2x&M^oO(?h0*~6EM@9l&LQxMQwI<e_DTL!Kj9R;xlK1Mg&dg6
z!bUVxAM!17_ee^~cfe{We~eJqR4EEGF>#`03kaZ5(4a0aHzIYz!>)8R3Ms0qrEPDq
zZEd>*wP`g_5ke^ifCNZH01k3Z$^`SE5Z5hm5mz)^lizO=X!^>pN-N$`j|_<B5aa%}
zx+3!;g%B<f4)Pd=fmH%9B`<E0C`J>pJ2n6~!KDF&hYO1f*HCQaI95oyUmC}c26mv+
zSvxx0hB6vVP`;g%%!jC!D#$vp(#cgaLkR$~1`-Yx&9*K`p*ldADPiLj$YPd2tyD!}
zS-|DU$c4NyOA;X5%`%G=>!jz_EXgqh;F**m1^{~j3&E&a3J`$=;v1Q4(;-qVT_cUd
zHy{&2$<j{3!kjBY2q1+)83>341VSjqo{+Oy-Ukpkfp{q;I(O-(`~MHi{rbJ{ACKpp
z=Bl%t=YGzHD*}=iw!66s$ar=*_my){oD|s31(m}A0f|eQ2thdU*OqkR>K3oydE<q%
zs}n2&{Qu6w3^mlYwAvXmFNPiFb@||#)=4DOEdRh$vM?YI*gjMTaFGNwfD{G9P6Oe?
zG6T@B<NA+SV!c9o7|;EUM3(X}*DpPC)WwXDtlJd=$JA?xnOtf-A5R0*3}fT7CmM6Y
zodQA`AqU#6pV_CG=e?CV9HFdg2IyqHUUY4pGn<0Yxu|9rhYRW#h1Y*@b{)V_q#dbL
zp;E)q*zCudyMJ!RBiL~@Or>6M6z(0=s&NYloJRPa3bl!197q}pW;s%+pjbrEb$N!c
zqbbO|3z8Xt<T%i#VPO+7<I9e<pD?aNu{)e#o78s>d%}ccgGYYx^6<?Y*uJFM^HVpD
zu0O!OKG%bP4r4|u;p2?f>^6O|cR=Wafe8CW!cpIiVYbg+7t<NA*8_vF0Pr5_N(hJ>
z!Jt#TX-B|wfT0ru;f+mrR30Y=?#nFTqqya$P>HDUHG#}`_QN@Ci@nA>7O-zo+&XUx
z5jT$$hP*3dKGUAdh;LEcIPVG(D-uST2^G!PXG$Uz2`WK^5Tr+EaiNBG457cV;h&$6
zN5-cr{e1mi(Sxq;EaZZ!M#*-B*02;3gobva777a;wc5#_AqdzyIAnO?rZ^B`*d2sa
z>>aEWB6bcY<6d2fQ(Oz)#)Dg1$CI2}L>X<cNwuKi1T7M=AhDJu;vcRV8yW`~V?%rN
zSJY-sBg&x~wW?5xG#vE`5j7rV@Lt1Xqq;O1jyeShnh5PQ38_M@ci^?*rOq(F3|%SO
zBy$o2hHzY^79B5m@d_c()Giu@L#X0stRDa#@$IB2APWIb;qM$+P>ExchP=&tLnjDq
zH_#|V(0KFPey3pIa5bw!VH2U8b8i~da@-UmZXM2f);o5cq%#}n6e4InyY~+*xKqG&
z!nvF1ICcPW0AvA>S9Y;6E*-?6-=V~5!Z{E1^TfVyT%O(aF4AXb+KMCNz@aEoDBnYS
zNv#8RG?xiOByJ=n4wHHh_>J&KR(J6EVpYvEKP55M7};q;W##?6HN~29LKb2E2r68u
zJ(7av&%KUm`Y?go3z;6U|1rnVY4g5ECN-#?-@9(-njEEZ4l?StNeDQ2G>JiPg**$R
zOgbEBHL^2U<Ieg9@X&HO9G*c=!SAJ@fGh<(2JFFa3i1pc3h9*Clh??G$IZ#n@_d>v
zI4V8hw`BE_2DLbcK4lW)KV{>?0>WbjAo~g;)1N^|`rTo2w)Hal-Sr`)*P?<^YnEwE
zVgbnYl8I*5q7P-HE{hws3cJ8UH>P3{@E=51vqm}|z6IED+YqAjhe$>(*+V)SzE62M
zmnqT{LwnJ4*&6v949W;Wf$pzkqO-4s>$_XjTh61bkJcRz)0YuWSZcuDH<E`~=^X{o
z{gc3?20I8uR+yAKA->R4w0o(bf`J51@rM2LuJfMc9GreR;IP+oH+#KdkAZlG_8_uq
zD2n<zENr9`gl1D8OxX!$?Z^4UH_^ke(lU5QsBV|no7QjFUH66WzgJ$pW=>N#M@Fx^
zXoMa?7#pM9QD$3-e3zz9i@?{W%#sf+POf8%JPzZ)@)_*S^3Aj2;pvMiJ{hulD-b|J
zB=lNfYGkDrai*|(LT(%OSq85k56D~k9y#Gb2+%qzA5i&>_r3Y%R<vovnY7zYi4#*w
zZFjCa3U{2ez9Yfb&hfHZH8UrVj~J}lPQt$LDvmh}w9McnQ4Fqyv^mXQS3${^GSf=q
z2@;Ldt<bKek&df;y#6X*SL<Eod#>sxBDMD|uPs*IVmrL!irqqvyz_O)p0;`1cu8{a
zj&5&v&R12{xOZ;eW1Vj>`s%GuT=T16efPWK`PI7J^X4mg&t=T-soLC~X53y|e11Q0
z{dS<0)aG*i^sCO()9GUoSiNF5sm$Wo>p{{NgU)q2U_JmsLO{#{|6_pc9}qDJ_XQMv
za4x9Fu7SxJXi}9je(D<&3>Uq!Cr$@pvE|FZWxs*iV*|N(TLR{vh>R7Sl1JThB#?p%
zGh?Qt)gcIy)XkX%_f3vlkY5W}PP2`>-L{$rxe14~clfkJ<nKW2$wO{q=N_ju>x}cO
z^ED#n%ymQhB31eSdDVW+wHDagji|Q9v};Dx)%vzsvugRQSu6T!tA4r;73o1uc^4q%
z%R_VV6{Z^!2G-6+gz2f33aC2cH{o%vp7xRt%uL$p3X8?v#=PKHgRr_Pi7|-ZcZj}c
zo$B`Qkj~gnILM31;Ujhu`fDcgMwasLsBD_LV=0|=9!ckcD08herg1PjlM`nDIjkUp
zC{S8jsv_A?{aUp-P|_wv1ANHP5ce^RVDIiCQ*;nw^#4rn_l6Q9CqvIi+qBov-Xt<C
zj<b(OPg~()41}W4QgIhUN@rDdzIHzuL20%2S+8;?h2W{@1#%c0a}vtSlQjpuINT6Y
zB8ty2Bq;+5S{ek@nVKSr-Pe7sb6qT8IpR5wSqFGt9pEQ&b@sj#L7Z2);O~>OLw9A)
zX=$3~V}6Crj=|^>5!_!oF?a$#2|@7bhk1UD3VzO!;7^j{D(j_MT8(ww-(A~z_~%d|
zvYc_hcwD(|n}F!;?mReaPXh=Ug+kWH7)b{nJyA!a^c|-z(|E&Csab~zSFd*FC-#NT
z49t8@Z)=+NaylBVj-%{Z3JmF-CM@}KG4u4zryB}iR(KmnypDYq?`F-HEtkgO)7p8L
zwLdsBoIs_-4vA}!JxK8i1AhdhwI-=ZrXsq$FBS@WhY1K=B8Id0Ti|Ivoi%VWjuD}#
zNcLK6%(jHr4~VorQUoH5g5-=Kd*B7dRU`{i1yrF;Ef>4EpaQiHlo}ugjC|ihFc%ON
zX`&fMgY9Ud1cMkwQUW90zY`ue9rPNG5{+YdKmGr^{OS7ZkN9h9wT>w{b8s5@#xWfZ
zL{};hg0PPf;&BxHLw>V`u`BiTLm?r{5`wyPHwCk!vAbL{f(FfvqwV)D%xnKU8`rL_
z-@DXz<~n8$j)8^=K>^z?Be2$-izqH1hf&35^Xa0;Rm3yjSLt{*+UHHHu+s{GKs?qe
zb^ryVdUGaWXiB$rgnE{%Y84L}Bv6ET`Ssuf5~6dUpiyi`!595ec#q1#uUh^vKIY$9
zUs6?oZXZHR6gsC^gdl~-<dFLe66Omc1zst0<|;1qONGhFkRV$Ax-XnKpI<{S`@<#N
zl1P0)3eE&&6Y=4CFmUcr-O>7CN=0Byg(*g$pb=JIMgNYw>HrV|02Go*2_)LOhNX2j
z0|y4x3<7=gL_3zck>6-ircQJ?g&&3!TsnVeYat;CBqg2^#}<+ssMhrcp#MQ2&@C%g
zO$gk{_-?A|dpC983Y&1r0dGNOAQ((uw1-4Y9?N?bl^lN%ZPG)G-5AnN`C%}WpE3XY
z;NR1IHDe`vORAy|F>p}HL>ln(@vyK6$lPiWtqTI+br1E<f?rh92c1x{?+3{X*bmzZ
zP^$Zmi$&rPUxCK*T_xHN6g6B0oH-r3pTU{vqIxxI0Hla2vMNF>7z{cW9({X2u?y#A
z!ae5#qI{a>x>mo=**z?l@>;o9q}2yP00qTG;R}k4A_0uR$+E5+5egu^3W8LfJCt<Y
zpC3?UVTA@ghiW~ah;h4-ge1@lj>8Uz!=8ZP!ZTHM4*>jw8P$gNErqx$n*tG#_l18-
zrTMk*kihLoJ?t=uVnxu&>QxsmqnQeY=_!P1)~o_7BCx{{<`BdH!Ka1P$g1%2rF-%y
zNBe`mD<CYAScOYQ9&mXB+hrvR$lpWU%Z3FQr0zhbvY|kC(JKBtCq1PTA=-H|^~RDg
z|7!u%h;Bg;?9!c>8i*zPJM1~k`fKTikvtEWAQ}M!iJAziFAv?5%&~HOI3vrGAV`PX
z5cz`%Nw1G_=T5E`0saA0tpp0c2fTp0!~Ywqot>-k_i|Tz|9l?=fIv1V>~sbD=g2<e
zpOilNEe^xTFd<=47xlC{4#I)DHMD7Af)wCTm+}EhdrkpJ*p0%N1VQG0YInd^)_m6D
z$-+vhESC;*K)lFI_y~6h{9HdQ0)M!-=V5{7SBzidFkqPpR8%sD$vxUx>?oo^rZ9cM
z5**92RS8MHY2&~y<Xn|n!M=7=+tyDyckV3UDccaUq{!(nSIN4-;MG=hrc8kf>dd!{
zCLCU)91=urpRy(kF=CX!+8knGjYQrmewe<PCd6c&vUJ322p&!l3V?_c)q&DrNDLyR
z$xY0`4@Ak53IcJ6g+L6DM}$Xa9I=yBm}MOc9@Sa+U^Y^~qkV1Az@tmCNlkTSWFT91
zOJ?DMdstse5>z^ZF9r~(ah%eN?O~m`g1pH{tJ$nBLZvd9puE*3Ymg+aOeJd*6Nbx9
z8J1@50UOo{q@wE+pziC9>i{~Wf#=ChdJJ6*Fw{dpcCfUO6C(-|H_A=rNp9b6m<$yn
zAaLMXVBuLf1_tkN!GQ{Z4s(y0K^uay10X7Q4^q;^1m_V+6coU@pbVI$L;3}g%A-bL
zgGk1}$-Y3sI1m;(fDuJBMujLEL+;}+(gR$}8Quuml?>_mr}AJ|Ru)YoWHO}0?J_1{
zI>0dHprtTGq5<^mA5f-*QVUu@36h$P3g804v&hw?h!WGdLM0^-Ns__Y?dELBdM|}z
z3^sEL_**$L4sibKXL`}L`(PZ;TxA!KIl)a}vK8Cz2?vPnsHBNCQf;B@F2i3}tBzfA
z?D_2S&Ib_Z@@gGO+<^%K5oC)289wk@BE~r^jL2OI6icx)Ah3!6q*$QS<UpaKL}D@n
zILawVP+=k@;|ZgJRzhK;DGNYKT!Am!$w4&v<pPAUs_Go-PjnzBIuA{X40*Ljmq6We
z`~T<OcWE$54zUk2bQ866P$Lt%3RLg`%mlip98}l{h;cp<ZN@3+WV6W${%R+O-?}*N
zq19j)6EzBLHl#-pTboLbGFb%)GdPFPCj{&Cn23EuDR>vfcpkm39X}f=djoliMTp3d
ziy;J&kRL&e8l@I2SpfE7-pCS3ooIOpTxdzE25g}5Nl2n-1y<peM|_?PfCe$4+IE_9
zP~C|jNDv~$k^58pqAsAIr$|4_28YrVY_r4QSRN&{4=0*1>Hu7|jwqf<_>lXer~5#u
zYRIxw8;35C`urVB8mlV-564WH2PGb8*sH1pSOj2r5`x*{zedIS;=mY?2_zbwc%3)t
z<V{8nO@7t+%<%(mX-6dLdf`fg?jf8S31kX7izJv<(pW%Q3R0n(m0A@7lKt~Y7(y^)
z5rBvZ9Lolx$_jFnk~W%$FtKn!jp~A23x}iW;60@&2#CJSMOValbvsdn4Ef;ufHJZi
zCjsM`NCt?Q592Vpu_HmX6IrJ|U|<L%z$^jG0;P!QMqquA45)s>P~$SLK4@ZOiHNU9
z&ry>rB@!blL!?Ay8BfGhYCSL)IC^lVwBtU8VHp=BFD08)tZBUnOL#_w76_%hb(U4O
z!x-8F1fY<!X-JwUAw3d9pyy%U1H>(5282%lm6^R;O#v5=o6|Y$pk(2-&@2yS;Nd(P
z_74j)hj`{Vb9M<TN=Wa%2I^4;Y%(%3@UCSv%lb4hpezv)6OjRK99g6cWSWPVc4VZe
zijrmJ&9ea2{y8orNrtF_)j<&TU}TX1jC7t3gOLnSodxKKbs@<NAZcYN7oz}d7N+6x
z;5as&&)=X>mY+~}hn&BRfkbW|Tt{?9Jx8=PG7^7ogF@LOAqYi;7(n&W`Qj*ZA%G$?
z=_nlCNB?LXPBB;!BNA6CErb?9Z9X=TR3#6dD(ZHh;6-)`jaCBrLK*?61vNGH)8kwF
z&9Q7&g2u-FU2Fa;pglwUfc6O>4+MMzP{(oSc$_-<7@Xc=e;)gM2JR+edn6_~Yl(}A
z_8rQG;gN`jlV9>>wHsRkYbL8jqi*Y~MOfJ}s#4mL(Q8prC94*K(V4Af-L|@ICed1x
zXiRO2qO5F{8%0?yjZ$jHtZk7<L;_Cu09-CL*c5HRH*%MMX@`qBfE?m{AehH-#V`h9
zV2olIN}zaasb8T~Fi9(6n_rUIn;``Xh+m{}p=bPFp+=7ot>8q42U+Cwl?fmx#kGa3
zR!A}bYz*Boa5G+*TTHMuSpp1L10XC2I_Xhl3{XmRhF4i<-%H90NmwXD_zMVRgf-P;
z6#8SO$q556U^UP<r_$rtVxhl~^43q-A2>xkZ7~Eor$Gs3$6)}BG${Cmjsxhy|DK4W
zsgVPV>ZDD|%Sx0;g+(M%hM*&{1`zKC{jn5^X=MvyDoAOYLR)1D8f{HVjim`_qDDYF
z!62JtJ!7$k;x9ubzO%5gJAsc-Dg2MvVZ(?W1t~&r$$)i%6i18b!Gx%fv03qeXXd|M
z4nYb;OA$#F3JTctiNa4$LXPthkYooizlBe`BX5X+bK-IVInpPpCasVRK#V$vYWuxi
zvPmZ_fNZq3+h|oSqek0OwN-6S;RY13G^YZ1_YejEcjJLO@G7eCs;ZR=s6t3;fMZ+R
z3$L17;DDM2L4d|M4=sT^DE=i^?I2Y93aH?r%g>A7l<Ck<I6x<Bk~K^>w#%iWLIh$&
zQBjE*1WD<Cr0AjlKmRVb{wdJFT*g_drr`yF1!NA&GF+KjA!h>>63QHW%tGmDaqkdQ
zx(c2kUI9b#f=Gy`$|2`ZxY1As^dB&ChxT7&Sw4nJM(Y?plMY2q9@2v(P?3aI0Tn2Q
zjfWE%-s_4RK`<nPWCj$|0t7n3v5qW!F!9?TOb=@yyb2@^Kew3t)qi(K;h|T8hmuRK
z+e<G$r6Onn^&4twf-`~1I^Qt0ohd6j8R9siUzd?hldJ$A5kF~U{uCen96#)7z!7#i
z(1uMZ!3$D?aLGwS&!z*&Djx!QbNTpt-xrxtMWxs*<3oj_nw8^D7K(C}<NQ2?rvtj8
z2zWoSpifvpI;R7OMEU|A_JFYvU*lcf)r@0}>(&R#;s;<|6O>6L0un<SppgpN&5DkD
zc43!mjMzW4<|nvO;xI&@eS8B!54H*Bn8i<$bu3J*6z3r*9){L+FDrJf?ApdPf~c#^
z*4y4uM1)lgSW$ygl%fN!g(9YeMcrDWpoOqE2#e;1+B&d9LkjA?B?N{dhU1C^{uwti
zM&y7V0p<bsXm~f7;>a<G{hl9xUmT4LDqH>bKh+8YQ@Haq2smT#3{*(MW<sp`gLZxE
zL^;*Q9}@*FlnJK8G>EToSgi{9h-Cihw}@I=P)3xH{_6FQ3cEM~*}ym|h93V&YboAh
z0%GBX!3wr9EPeJVBtcgq1cnBMn@Yme5U8pLrz9hf*wFNR0tylCG1#!i`oL&p%_Hn_
zj^%)S(@|>-@H<f!_WyZ;t#Y=%6bM|~fEO%1q9AsjAO?^GNda{TB7G16gb>y!f&Y+$
zwK5CdA>r8P{o3>31APy)OXgEW5ol!$K<pw1T#^59A4j|O`n=1M2buYNEK5D-c|1A~
zSO9cGwlxqren9%}kWL(nhm2rtgfut=ib+R^K*v_3C1pB(8I@}VD>&{@rTNVy*y@wS
z!4BJU_*XZw+ZNvnUQ)4Cn`;mOhA13C;}a|b@H6**(+&h9f(-fC7fCEwr>^ul#AL{+
zYZ6gKD2Yzd#ta+jMTU^6oKW6}c>OVHHNe_|xKY7@1DXG$Om;3q<5y>O1gZtpl#5Cr
zNE{AU7l;(A)`rx=56501xm}SewYlv8IIkNUA8(!5$3Xg`WoD7Gx~jZGTrfB7Ylr{c
zA5XyyGRPsDj~Ur=@5|lsY@v~sdkWn{XoKqbCxtYWNQ7U4b_R~1CIK>?@B(mw<;5h9
zV?nrGG};sI2&WRKJXypE995AzPjT?PV(}_4esdEbuj`mSLLwX>s2}&9NERpSBEP07
zafDLhHx-~DGAybZVhDjV2q{D%SWF}{3@803>nRfvL+^?ovL(b!kkSN5lN2~00)|2H
zWWq^0Nrp)>+5tqPITrDYn$cL?qe)$Kw`!uZFuI)}Zc++E^(35D92vyvA*~%rh7o|6
z7z{}=5_SyX!h(=G6@X?=hE5Ff5JZ8(A~8c4l?Xr(s27UbGAU8iLsTya5fF>{!1RvS
zC`H5o&-m$UKq?9nCL+}0$I~1@!!rV)Vi?KSAZQt4h<NSHTK%rJ4@bodL3V&QJ$hJP
zN!iU5dOd^-Dy#g&9~8;7D5$`a6$Tz4CQ2uoIS}G&hu(1tLDJ-gO1{8f)KM8FC8Csq
zz-<D+kX;5L9D_m^j9?qYf}foBmxKfK#0u9^5gDofVkroL;cylo*+B@=Ce(qFYYRXE
zF@q2wgZyF?s*F`6MN$a{BqD@4hOaJV!A!?w1G9K9dxCsW<PXXJPs4d%iLe^LQuqdt
zBJC`Ng)Hug(gBFLBASFz`P2D%1>FIighByiiiz%)fvHCt0kEu6pyFOBAR+gOU@FBX
zy59XnI!9yk`c2@CkdRNVTuKPsmqS#@J*ty#Oe=ier~X9*AP+Lb%Mm$+twjViuPPp5
zC-FW9$3HM(XK--c1wWKPI59{TQX_ByJC4Bf+QkDUBh2<0tKtQ?iG(2pgdEoo-S7`c
zA)<P@QPLO?%~W`Wr+!ng%JhhAK}--`)PvhEyrtqH0JIc@RlEQyD|**d^qc)f(o19l
zlh6ih=kWm3RUD~DQqUU_c$3cN5Q7#mV;?ZAy<#j3*^+V~LK(YN9bX83x9L<ce!5T^
z1NM*~?TN9se5k<+f;U6){Ak%Ef#^bQ`pPW}7~r=P@rDR~qCc$CjOK_-qOcF&^_M1u
zLzabqN%Egh$T|<J5>-_%eNr+b2nZ`7JyzL#sZ*2yqptiE;v@_(0O|TEWc(oyk%tl8
z45h%3AzvC0s-^vQ90L)?7j?LQkABj3hk-{fz$k#P#tgr}u|W>Q0JtaGi)8mnKXko$
zEPYKiw$t^aiHssCsYja3ya+}VOi~cRiXo3Z><}y<!2RgtOF9Nzq+1|yuq+C9-{k(T
zQJx@p4r}67L=aF>K~BP$0Xv-QVUb?R8L>J#$Agn2;w(tue*lJXAjtd!Y>mQy(CSH;
zh-NQE2#SoNaxowWn<^J3)Hi>to$m!tUqgpYcs_!d&%-Nj=u;kuFBd0|bNle+zpT_)
z!qbrntqNLsU~k*YRqg$k5AIXY&xjF;jZ4A(^W&0EBXC>_)H1%kzJHfDxhJbh8>kzJ
z?R{EH7L-?=mY3{uf(mB@JI|_=h}-JyQ40mtvoJm`q)&_~Y8-h!K6;$1Cw2Y9=G4@h
zmq;u@)E#u}WbKc5Fw8FgBL)aixh^_m3If4SQ*CDG4*QU)%Qn<P%=SxBG8`w6*E`eM
z?;H%}(Vq$fiHcfGTZrVmmW1pv0xtF&hG--i7YAR(V>-YyRm;i*nQ00NRumA2$Ohkc
z%B6t4$D};-(p483N4{BUQjzh17DL`d&|~rYPikleEeN(2G^OUn_yjc>{)wjoLz835
zAwYd~uF{HYf2Gf`4_|x&p(4TnK<=af;20+Os~{r?1K!SpOSNR}3VSggJW4PO%cUy$
zZ^!Si8NZd88kw|Ff+GcrL23s;kKrV*(f%Fj(bX|h2ak0tIQd3RY7rJE`btVMlZ6m$
z7=nUyl2o2UAwXf>Iy9_eEq7fI-oK)D@nZgo1zjUay|%mNZ$3G7)-+B0{Z}a<ul25m
z%uGkBZm*K&*RtH&iJlY5-iLt38SQ86G(A{E)<yDar39uj5pQw07vfL=mGg;0NEfA}
z?M9)43J5O`Iswqj9>O4=A>5_(IZyC|rr&Sl(aQkEP!M($H7Q*}05TvDMg#B7sc6U{
z78+<2*&YZ75OEPiu|pnmAx4g?L?YiH)UUTWjEs=a<bmxUYX}G`z=H^&7X#sqCls%|
zuqgd!iSwK}oRW&N9Uy$<8;l;u+nPvt9jHRc1y*t-kiG971Hu)IIB3O@&rc<3O?sDF
z%q8@xnX36z;E?b-z1HC&puQ0xO4tuGZ<)6iRHih3izs6Fli(nJ!{!Bwuuv8sq)E(M
zmp0j|MQa;lRxKa4oF;3lOIJ0FTb0eZw%3}(vAk;1R%P{9Tehpo)V55P#@d-u!zRdL
zxuac}kn(Woq!}aZ&D>}vNYGRuz=cS81QXv56QG|zBV89f0E~kQPq9zzBgkRx;`9pr
z<Efw}0pKJ6>gu1;eMaGKN(w9o`7ll-L-8xP4`%RS1W>Rp+m2ZOg$T;7^$Rfg{5pd&
z?fC)aJCvy?`qHpfN2EGR<q8slMUX|x=K*AYLC_t=AK3y$O^%0uk3v3_1s}BZ<M6$V
zN{i((5lXd#$WIue@rtuFRvJU^2h-n<brFyG@E+jC*(ltqYX$=Yl@F?=3RkfQu>-bM
z8rST$`?702ugUxF5hnZk-$kd8V2CF%vVCN~g9IqZg2Y&;>1?r4s%d2?+f8QD%R)<S
zDq1v|qgur+H7jMN%_C?l&a0Nu3PnMRz#j-vPIepu2MT*3J`?B<UTE9e*T-FDf4Ta8
zsS%pQNh(Po2`0x-&mq9f5`GF}lma`#hKs@BpbCD&&vm~J$R@hjw2X><$Cw39p=d9~
z0ia}q@UD&wINFGWISH{96O-=u)_vgnM1Nf|hwiq}DQ&kOQahb+>vOi{guVdaa)C=i
zogC-XL)MaRb%;mw+zDwM9C^e(Ty$8dqw*gN#JXbe;c_^8DBtvA_P$;Sb`YP-WRj;x
zT9tZeu|B)FLfLnX>oY!e6@2hYofEgUd_0JlrjhQ_AbvNN1G@$4uh|qoD1|^qs(=&N
zCO!ecHb8L3L=V;|haeL{4!{KGRiD?^KI8TugWMeCXkA%LueY2UQw7^4{U@hKNrXHJ
zl<2k|m;CtrTd?yA2m*yIcPT`sc6?Y=!xEW+5>aP2cZ`M}!yk`^Lnk9k5tzj@X4YUr
z%Rwk6(6Iu-y&-ME&sz-0d3SO`uT%;+A&w9`G^Hw#)TLOaEVkIe;gZB*Z5hr*%<9f`
z#~dkOsPVypKTPPsAe}_)K;i<f5aF(3XpB+|0fit!fF!X48-*`4LlA2biry=oz&-*c
zj)Gta1w@2Ec*Imcti7G|$OFCt`@XJj<PX&W0t*}f2nqV4ZUos1j0i}Z%0h#eZ&4%y
zK*$Q4o&oCZOcXN%U@Z4bgOUC=LgN-BMi7z^4)KWz4m2&2Fikj|z+**qWJBFj8%niC
zpwu7|0Dw8MLE0byvO+Kv`GT-h+a{#~=3;%LR2#5{mXMU>88kE+A#8-Qa5PII0SIXX
zAVfkDM@R^OZlxema~X`QCDKBJgVcmX4#uBhCqZ#_EA`!qr^ZJgAQ~+|WN+pOr^l=r
z2@0>j+a#af9)m?BN7-_bL-u<7{2zFEA!CuMr|)&SX(HQEwO2J1IYbLW%VdxQ1W{kg
zA0M;kJpMdG>z4=Ep$ZS;{|w|o*ZKY$V{#D5`}pix@jQ^nn1umH;3IBw4E}L+2ttQY
z;G1Dzc>snzJj3XT_Q&B15hN#fJ00tSQ5jR0Q$y=GRPgLjG6f<m^J^HZ4i;8gce)HE
z;pJt8vkpopvhg?`Iwct6yObqP90UEjbdbWf^?=l-?Uqh|-A)Oj4_BiFURrQqf>R-P
zf+-3y@jQS7C>S8-AWX^v(*Xi=3}o}CBO^4F>dZ4V+nn4C<@qor)Tb<j=?o|^s8o4E
zamfGRKpIWSWOTd;XuyPZ12g->Hf;)Z1)YI*4{-ZI0R#jPL*F}}T25O$XkQ?GCzzZN
z3dkr?kr)*uR7ukSrs>S(k_Og8i4xdY@)wFTRF~bud(<{5+6YwCsv{C07z{yd3U;WZ
zN+SmXG!h^L6oLr^<qs=P5cu>D0HN5!r34a<s7MrQe_ZfW^<YCJJ-ct{Cj?C41k6Mf
zx#swm-P;00Ae_oc5P=bdB&HI$?qLR@jPN6h3YU`Lu!6g$fVl#gC9kL3_TBnm?868L
z+kvwL1nZ6i$T$MAeENxpJ(P5U*${?iLzR68Jl-<s<TfBt+w>kA35YW~l_BkzJpN;Y
z@1KlbFa!KxTmOwK|BN&t74iHN#5f(tI>>-Xl21w#HzEh6lgG)%sGh3r>Lq*zWB_=e
zdW#*5BS8ZR2uN1McO24V#Luq<XhO+rNW>_^+1W~m0g;KVfx(iHEdk&G_ybOXGB%^?
z&)AN;%@0yq7ARFj%n<o{^b@4$v}GCTDT&T{+vNl5D1|#i-DWQ?-p&?s<D1ouZbaj}
zg+~^$2zt}7$L5C#Q{GaG(b2I^K&FqLF}(YlcLP(9e7lAJ<{nq39tQes-B2jin-gOi
zLgfl>%#a_fhGdS@BQz32xilp*a!PGSnw+<nn1nekF{h1KVwd(~b}->nVnXvt&Lb}=
zs1y>>t$}t6lyxYB6nl&-Jn-|J;FM+%JdH1DMj#>ArSGfIAdi<me0KSF)~I#~;M5qw
z<3j6#(Lz-f*rf91hXzX-$_WWCoF4nK2W;s(H7cMm;mpo(#}7;7p~UjBs$DMxb*l;r
zW0E-u6v-&)Md^(rK<PkGM+}5WCWR)sD$UFa_L>=S1JD>wyNrP>WcL>G!-l>2Ui&R>
zVQJnI6kg>5c#TVvm=s*Jmv@3%&%ioxptY!+%!=iPCInRv10kiHLi?&A+zN*$41${p
z<TnaIu)HRAX2%*~RcLEFsn>g)nwyqhP0h&ibDPVvki@6A!kXSA(}y&43W7XkXd=)+
zLO@XUhGA(VAtA7+Krw`O-+^>n+gnk-5=>FNy2e8UE`_+bA&}vn*fr3H0m3wv7%_0b
zH({{0KxV6fw#Tw%SupGxg(W)&BG%c2ikTo5Qh~;Yb_Oj@C>jZcFdM|%WZ+{CfEaZh
zfZexYlNZo5a~sXg4qS_cwpgaV6F|}q!xa`ScW7BQYQb<pcK8G2ctEPl<ECT7{g8l0
z`hB7&-30|ZQObe$y+$H(c$>2({6oMB-5$W5ZYN{S0{^hcxSv2s`{=knp`1JSpr#b`
zK#?u8w8#b%kggMxps0{EP|8R}L5u=upBNFhd*TodYCX<jySvQ9BH9EkMvo()MiY`A
zXT0z>!25?B<p9c$@hL#ANPC%vQ~U6xEhRlXu!)ib4*qZsgaJGR78y=1=N}5p#fE~K
zpg<%REi_V*Bj9DIv7xG|DPbrIq(KlX3GZaXATk}aQ6-$F_E|<hMI}K8{VWHgfMM>*
z4v_FC;p#nFt~wru6h%Isr5#F>npFf2uUhW~1?h(jSw4UO#dtI-6@=qp3DQg#Xu*KN
zK5;yN&=CWnp%VbcFMKHqCzTHfb<x&^R8$ARr$9dA_>^p2MvcDWkLX+Z17izv3gNf_
zkm=Kzv2Y{?(Rqh7%^2B)P>jK7jRCc`1YQ{%ZR6S@xdabfgkc!SMMy<wyz9NHRK$G~
zaZuowd;$Pidxi>+YI|;<Um=Gj85oup#?)vC1TGXQ_i5%>)o17);Qqn^AWyWC3HI~@
z2Rj7?z1LtFsGur)L@qnU0YIoXPgr)eSV{h{%y42E2-189K%lvX(+o7_DO0xoTMxb0
zgLoVW3d8U4Kj8z+oh17K{AZ3TtnQS4v+(qKe}lZ}J+!S0So;vqTca-#-Tg)2c!ciL
zzdgE3%h#o^f%FeCJ2L`~d?y&!_a;VWSd{VQ;5vsxI#8q7gKcc3zY1^WXetUJ)SU%_
z;Q&zQKi&5Cx)Zx~`T+d@i*KW;*KL|fCdka2_Fc^(Bn}`{h>X8(D~1v1rGf&_lp#qB
z2doZ*48X*%pPHTZPZ$(I7trRI3PiaGgd+&Gpmi|IIQbi)r^Rf;n#n8)Uf?C2H%0g`
zVh{o-|Dp<YMcj(QAp#MQf)VkcUgt)Z5hD^ovGWpeJXoCYcOGx%JBtbq<7@z@uj=O!
zSpL`;9aK(|3UKTPwF8nPfO@A_=z!g)58h7x@1t|o6dve`5-1=iV11$6Bt#L5BBST0
zmyXdiIrr$sDJ6Ke9-;=DJ~mPTAqXsiB8xpc5>Y?O^vqXY{_}>wL%##>!qzt4FN{}B
zPF=st+%2H@9#1j`=Ln!G?fA*>eQ)B3z%hkohfZS^f^Q05Z`)v^!Cguc)?_@Yfq_Tj
zshpO}j$?<@_fvbnN#z5FC>0@H0gBp?rAZ3$C$p3fBrss{0tzGb;7u^X3Fl9kWIQUb
z;t9yoC%lE2i4#gbe}&><u+TC2r70rjhH#f=F(8OCOoC8iSj12n#G#o+2%`oJFv41y
z*@Z~4PLrTRg9C`Z8#&$Tg3cL`P-u6Qgqu|nhfIQVU~LXhTatbc+uYK3-2x0r<K_x^
zL<7zVQ?#kzp+Rr^pe3ORaAc`LD2jeP=a|Eg<Ad{f<7k!db+4n#ZAwwKGg#5a>Y<`M
z;A5~)s`^DzIqC-@0R!NQzM(m{To7fTCqO)d1t<m9ZuUq;6z-|$_IRQmjHcs79*lJo
z_0mL9-<|$#55`Yn_zD1RoJ1g!5P=j37zdui;C=UBAs++<gjk4wm+>HmzWU%l7>mQ6
zhY3x@d~#XB()PV~y?8N*imETnz@i9@J1Jza@n9ZGD4%HLkmfkKf-3OjC4g>AC}<PI
zzhh*FhrK9hkSwQwG&&9(Rxwrrgc3y1i3CX!k!EooI9U0g7w8C(xMmw{-yH|9FwyzU
z4)sbcWTB!0NF<Bu0#^Ks^EOqPyQY_IE}Y!iO0r}(wc37Zn28|;2q&EMBwj(Gh@^YK
zKLDbVpeml(roMe7e>&P#h6zatZVn5SIsbm2-5iOSFGElEWDE)L2!Ld>xn;eq4)@#W
zxTnMj4{_@3dmZHP3w$W$$(8r~RiBx7CsrIfDbqBlMKcSB!RLniDyyoVgXRhzV(LNs
z1Ta+NfM+E5b=J<eYV>suj*qF}9p73=Krd{E>4K3V@b(E%0E-wv6JoRy{q3gU2MdEl
z6aUbRRsb%^JO_r#048KTp-PE(hzEc<3=j@_kLP6$LVK8mhz6?KDq<f%p0)&Hdp!vP
zKF?rtJ9(e0qWH(t&I}|W6J<Z_eWbNm`h8QvoIR4D(;<qa`LEPLW>=Kd?qcr=-0B=q
zT!4wHBvQz6&?R@sK!q@VmY66*(~hrt3dCo8+q&2)wofkLOvoIEEjNmGVf9MFjBrxn
z;C-H4KQs7kK;pW}Fs*Sa><2)Bo1mAPnAazgBOG{}88j~xFRCL(3P^gjnZ|N59;1uq
z*9)vQC^+m9lI}CStiyF+VLXA33MbjO<o(;eNWGrWrjX?(0_6~xHc-J~F^w!u%gJ|2
z<^il%H<(x)0l`;;Y4`_Y_tNR6``Np+PTMTuD^hXo!+B~s8&IrnV*p{2_0EZ;GfPTo
zdkQ<X$U+2xn&6rcQ4FaQ1cmK#^|O6~^%^?sQPA9t8Ko*Qb_!`JVFM=#07eAMH59B4
zK$~jo@L%M-!Ad5&k2-ksr>)b|&bQb~X(Z~Zs(C)bls4va>}7Wfry&HQg2PaO0s#XG
z14EXF0>I!21Q-J%5G4FSABnI(ehQ_BMu$W(_m?3{anf&Y2U5&cFg>Q|>0^ojfkb-l
z1{VlnO;qSL)y*L(6E2Ckb0{4!L^5E~_8|inE|JqxjNl3#wZ-fj*rl5r1W?EO(*esx
zq7yFB)NF9791NL%K=Obu5(i*F2H_Pg1lQ~BHUsR7)3Si{iC}Cp2SNn1?mvb>KZTnx
z@N||^6;V7(b`J0we5Qd>k$`{et#tPf&$)sgaRXyqKa}x_espC6IDc{UmV}lZkLQ~t
zgolFPgg>teoq<3&k7-Wcpp1J}KT>p_WE7UU>&SK>SU!*gtOO{rJf|Z!Bdq!1aK(f~
zW`L*FIKUq=OmuI<LUwvm3YBEcj4Se9`+KtdcXfJKG1QX%K+=AqNlUY2KoR~U*Vjiq
zjp?)*3OY%V<P^YqhN~a+3`evy9zAQeJ-@<zL4&;tJUk4_3IK61hSTosb$i}sWFihT
zskO0QMF;M>8|3q{w6Dq<O)*Y^p)yz$O#CGiN<y{#uWzWOUzB;of7*F^f{)IukLMVT
zK>{Zp{W~&42pIl}!Nh_2VjRb)o&b1-6l7XZ6r>1fXLRrJ)O^!&<{7ybL=)yHafiGP
z@ZMb#=ypeC@@9mchE!z2bFuwYCLnf-e7_{|?&ccR8LgZnI>kRHaJ_P{v6Z7`5T5bu
z<s~fyvW+U%q&n9$XxuWzN-J3A?!CNZYn<7er6oyjoaGXgZtm1mMVd@kWv*=~gi^AR
z5lR7A5gIR-j-k=f(gE0n#CMPkhMDYzKGU+uA{0Hflek-yyc3&HxUz)>WbF__(^@tl
z*3O#42pAj~tbsse^Lxypp#>w@f9nv`0C+^mZXLCM^Cpt2<#nS85cfb$7!qaIQXTV9
z{yvpe7_d|CoT3T|7<5=2a)p%Ukzttg_t|**Z#?k7P;lM(X)uc9w4ugXVM3$=ME*sq
zFh4+maok;kVENDUzGU}K=kT_t(M3qrLa2!bLO8Z8hv7dKj2OTK!XP36q4t6)1_GuI
zyg~d6K2@JCp5<)X!r3-{CI^U1j2okce5lU`y@Bh+I0u)uiY2I`RZ+E}^)d_5_H%<2
zC)ipll~{9AsT&TN3Un5fEh%j(G%6JY;Be$P*uDwG!=(NvD_ub`o`woSL|-9+gV?na
zvwyI7JYZ-(!0mZZgD{ef1yb!0R41anp3FRWoC+W?och2nASXvgRu2_LM6{-0QeM#O
z_(8Ab$&qX_9?0@;Rykr}3yd%+foXJxLd^jLfs$bPJ~|5t@{ehr!zU%{Y2IIqAJOFV
zLS&`$KsF%H<%`~`iY{9+UO>pA$#|4Lp$NL{6_oDnI=%sFm!8@L4jOsQ$R~l3vtAm?
zm{a|M0MXDAkwZvG$tGf&sFweu>KyLJ3F~Tri1}5nFrjYz{gejKE)PhKGRm*X-Dary
zokm%)l`_<&jTH73HmYi@B6aT%=~&yV-ZbX{N5>KMzz+YQ(NPOXqc{e9OYV{(7)6AU
z2tp)cndBS-lESE`m8)WXf+6l2VYEDIm*^!$kqaRHrO-YQAz@F660oXx2ppX;V#X&&
zCs6R6rfTYH8VF}nfG7(F_+bYZrMbYqp1}hzkH?G@q!YPp3N#g<N)aHH3KE(MPxH}{
zaA!c$&@itcu3!Bn-+GM@7`Yw)E;WETAPx@-MklQg;r-6Qd;k-)Hymetz=8XIqsMuH
zL@~J2dZXD@39x>#J*g2qfZ${ci7p;?;QLmfDow;Yd6?T65F*iyj_aav=<PwUDQr%&
zh-KPDgc1<_$57nlqHg_%%nz*Y4#Lz!2#^BQn4#s-f(HU0B1yNwzRr9eG`E$p0V$G(
z*r22}AY)6*I>$khdprNycAu~#l+o3ud?6~X3MK<sC}LbfiB4+uuW>ydqG5x~>wcY-
zPYFppK4F0<NC3D6&?r%Nvgoi22jQ^fGz=UOLj^-oDi{;b6|+jF2YFQ<nuPb`djsD?
zps5b67a)v>ykd@<J#L(oka2G)bj1`Hsrl}(GZdO$q&jD^c742^A>k30&ljc8@lE1R
z2f*Z_Ghgs%Y)Ulp-Qvk39!~>SGp@BQ1YlKkZPwgK?O`rC&m*p&OcS|F5rjxx-a)Vz
zh(k#g7!wsnDgs%X6Vbr&B5s<&HYj)3Jal8Br5V{q3LIvk4&t#b3{g<qi%3XNn(`7u
zIYbOv1~YWfFIYUW*GETGK{3u*Gzwt~2P{IA;5=YGHBOM}ua^UdZwlDn?+&jD%bZEb
zZDbPC>Bu1=!9)po@fk2+<r$<FRNx}FYI2!DA0`!0Pb(>lB?pf*DF?7BlY(QjN?;e9
zICGM6USKHmn~WEnqRj@JIZIv#21_`@bsEhX3zW&R+P_m}2uKJTMMbEHhOsDh6R@f(
zjp9avl<+Q+;UI8B7X%0;*fAmmG_f~o1}cak0;){jOqt0kFiaifq{$3bN=ssX-s{R2
zjU#Sjw#C_;{*u6`$gGP9lj-`cESPK#HB-{E*$&7+g@*gU<P?o4X#jBCC24lAG@1US
zG%qkJMr|(XnTbPsr1K6%f$|fffC{|~M0s{HZF99VwGvV~R3CscAc7PSp(s#+LQoLR
z3=$qW!{DDch;73ah?-zu{PPMZrUi^Yu#k312_vxVBp|~Bp;N;|^-CbA#Sh9`7-p5I
zAxd#EGVDPwLlQ_iA_w|41D&`1M}cvuxnOrm$3yq~sK70sEr8o5!A=TbyDV}9b`Ze(
z#*}EVbppZ8jXCzjvf?h3LZ}^hnb};?11Km<E+*d7f2zNh{{8W3X=IZjlYi&0!`p8%
zh(17iPnrSjAlRhE8hgM?aHA!|jaq1o(5eGyU@Ss}p?pHXSh*x*WC=}l`c^wsqo=)F
zHfZnVg~HJ6U||SRsPsfChuVioYel3G@!q&Q5*mL`JKwaxiRt_TLQl|vx(`7*m{#=x
z8xyiAL0D~6sDyyOAOsKj1QfF^*fYR14@hLaAqW~ZQHj+&iaN`PCXi{(3L`lwP%k!?
zTx|maplt`hJ|j^f63tk7NTyv_6uCsvi=ql|Tfm4iW;HbmEPy<P7h;I!mP;rjSx%Tq
zMoe22NqV@{p_3s5XHi=0x)ohwQ%+p8ZPc~MlcIzv7bQSO0q$fwMl%k_M!nl>(^l;p
z%2!VYL2l?)l_NT~OD>5<&}pnAMgo$ul924Ulc_mMMoNGnGKDNeX@N|Md19QvQGymI
zm<6Eskx`RnDAhXN{nXaJzq<U3{r0cdB!?MT1#}ZcM68Gee}LALkN9YEqKa0@OBNxR
zqbM;e)tUk)V!$0jG!Uc&X`Dz9jNwhtw4{Nc9Nd5sA<6>)vOf%0s)XSt6kN6FF+Of7
z`C&rDghC2JE3LC_DrFO4RS;t#5j3on%~dv;q?T#`m;xmet3L2(RZ=2D!a~4;yae{E
zeaV55)SPb8dxI3JW>FMWldA-fa4k$oUKJIwm;v{lw6C<+G*?5^W{;wwfNH-EA<=n}
zi9t;;kb<ltf{>6RW)u*QReYh1VZJr>_Y+QmV#Nm$SA$rU1d=DWgq5&qU!U&da$bWl
z_WQg*L-Vi@f4_ADU-#d)iYOdU1KQd463?{lRXAG;kxgwINVT;4Ay2zl>Oo%4?l?pt
zID2KkM_a(z{a!LAp!gU3FyPrrTpH2)<yBOv^kq9V6Wi(vQb&hpnW6lwgrmoSs8JC`
z59wt&ACL3{Z~_A5kLfALChSq%CKI4lc93~vGH|{1Op~%=%m8vgjlWgdq<w=$J_eBf
zL?1aYpq&g0nLy*x6(=Y2^lp!S@Eq<6Ve(Ks2*LpZ5P*upC^1A+>=vz8RIHlcomJUv
zma{h2G?*-smPn~InM~M8r7BgHnWC9=)!LRZvSwnL%W~L>k_KdwV@0YNRT)gFw#0*M
zm9$!xT9K}6a{`S(Y9N(VqX+~@q5BvW8&OY~3bt6)9#|B>7^!ptA|;BgSZ-J!FTd*4
zHpwKCgL_iQKOw>IJe^A*aDg1Vo`M*B3ijSvA%pB}L^1?r!iAu1@OtPZq>?N?C{zJp
zK^YKylH`mchDR|83Ren!H-iv>nn0*22r2T&k`V`qGY~Qw#M0kvBq5+-P_+fpQXw><
z5|01bkda{$F(d@gieyJhI0d7NS8x)^5Fk9WOldnJuJ7Dl->Yv2xcA^uC)-qv)NE`c
zD2oL(3gi_>Fv9YWoPpv~BnYY=0Hgqe{b;-_uB=6hv0sE?ECD@((K`NFeQze;q-@JY
z5v*vnx6?yXDsmVmo=Rd_F*lX`2zHVY2*ODFf>OXu!iVo6=by90U%=PYb@<HHYD4TH
zTuLb9QdEUgfO}BSp-K6k@%E56uoI)%jv9Z+b$Uw9g}0;&H$$co7>SZb0m&a&K<A8U
z3INbFEXV|6Btjz+5pt6#>sP@+T&0L+mlUiSrV3dguvkTe1V2d0NF`u;>@t3T9kM<T
z79eI(k^rKqDGI=Bs5CV!(nPkZRA|V4_=uz}V#Gv5$fgV>H7uG^h}nvqxHFB33d~l)
zErk^bE~-m&b5(M!$hJh$TEfc<5)ni|C|e+!k`$s?!GmZ*pm-iKK*-A4C9RQ2EwGeZ
zyLxl0&E?~C)0+&~)(Udv+?SHP$~L)FrMFvXr7ALzV8l=Y44rXHIPpqL%v8ptG|Ukt
zNQE9W)CYs098{yp069!WSXyD)mY~`P1E4l|7Rk}j3<8oy0udu57|G&=i4q3@LKwJ(
zSYQe1*I4UNEbuG@2yVim$aGB=fFKlMQ6RvuDODg^PMF3(&fB)lNv(}z8(A$&Ev?A5
z0tXNxq5?o<Iu4@9ZirC9NoW?SXre?h3J`KYg1}0^z!HLiR)@WaFo>)Wf|x`ZA##Zs
z2t=ts>xIDd3!rG~Jjg(gVWK7Doy-Wb1Si0cYGW>h%49kcJSLKAP?VCz6|{xk4si60
zcc1`ZJ40+t1qFm?_^JWQkar3p2?+<Fd3`~i57^D&p%o9XARhnA#5jh=N7vW1J%mZh
zl&BFPUprdWjQ9~tL=T6$(=eXOQEFu}kV9~Wp@g$s6U~9dHW7pvz5WCk|H#FqEQtOB
z@Bg)UtR^_efHvOv=WKQY1OtHzf*}h5#tDE%@jQeK65$H!K<5Q;e#5%X*d~T)Dk5tX
zKI_uhigbZQp8}QX9r40&oT8kdxX#0kFEb+iamx|k6})5tgp|{IIgOef14Cm0sRL3k
z2bp1NbHPT$As!4de7wAGF3K96C;R7QM<N~b4oo1z#UMz#MKqXApz?`np&X6{EzE;1
zH*w=jiWcp+@`@HA2#7$u{)bDY;F(3K&vg$%H&ZfD5)`S<zsCv@IadU8Fmgcb;Y@l^
z$DM)5AYHISaMu7+9Ki>iT>2?~NT_7oprQdOqNp9j48Ry235#HBKu0apf|vULFL0s~
zi@Uo3(A|SHBeq@gloKhE2>68sc>)Cl1h9ep&{gt;0E+=)5J5g52v7q+0;K{6Do{na
z5EQ%=NCOaL7>q$-1)CiV@b(+wE?McIA{~+vU9|t}KshYMwlslY`u0Et6+noQ!NHiA
zArMX3#(`0Dqj!NS8X9zL3}j~r5{D)_ghnh#;So%F888(r%j8fNaSU#->VkePi3w!A
zhESA36o*Zy5Nu(g+Nb*n^^h14QV~c&c^MQ6P@~6@qM^vSf^Uw{uqX3BzmWcLWQ-Jj
ziHHG?pO3ramMM!Kv{N7~go;FrBzlCRMFJ2I@F0mnkcx@RKx+yhcfk=P1T7IlAV7oU
zQ&52rx_7D6qch0+<yFxiqk=>OxybUM!Z5Wx9dDoSuQHmJYA?rAbNwppywc)oJF4i^
zvE;iWB{ZQZ)i3bQ(yWk{ih}hmy9z}qM9Y=dS+hzp5>!nikci`~0}KBF;gvKXA?Zsh
z`l95)L)fF~5iXGuqJkfb6bez&DiMeWoD2u%ls`p3VKkpJM#KQW_Z{P~{H%h)$CRY`
zQ5pO_hbK=1?LweHZT-=bM<u0pk+-QJH5vJ=lA%5{R7n^@e>ip))0jVaoC6<ld&D9S
zz`@;AhOkR3{5(uKf$GYEg!k92bCdd%SAVvJTG@|tWJ|zMv=CdY0H_7xP}+{MZDfz*
zR6-DB4(bolh_?GW2cr+P1NuQ1vx=Xx0ConySVA1XBY?L|U|9^FiM|G|l}`C&X$lHL
z5-<=Lu^DMi^o7K>8Vn{xgoy~_1Ahn>705o*StjJ6qu_U!AqMm_-qi_{B|fW2ayr~o
ziX4au%xVhL$WNH`GT1dWO{g<7T^J{9pn(KF+Mt63N`Xj;?WdI~P>1Pc1DiXuge4Iq
z85%UU+E^em3@1#1B(v6Xu*<{U|9v5LOt!T};WX-K<0GZ<CQQ`|Ff|U8ydXu0gc2hl
z2H{km+o1wMAr%;`wd*oO7)41DNE`}Jgc8R8pm$5c|LnCygv?4+fQ%w}B%if1K&2>V
zO03M5F>-CPR5npYHdb$&w`FVsLO~%RjqG`NMPUPtLYqN71O$r*ShPS6KtMEvb`M;l
zAXx(#iOvrq1PBA@fS%CFOM<8}Fl|38Y&aMSIL`oxSCfbqj^s)nKx%eG`Wsx?rnTqR
zsid=2^XF3>vG@#rJW=@p?SgNqD9%2%${|zxphMHwEs#Set-oqt!02WmJ|q+*AVFjm
zOJ-G3rlq#ZR{v`FtJ1c`KnVmEqTw6w5v1$-<cQ%p?1$=zmkap9k@KA2w0Th<IIhqK
z$pY@4v8jKK)*Dy5R??OAEw<{)fU$@nAV{a9YCAjv*YzLdeqzJktt0RC1M|bj6XVCT
zkDu3(ohqM|G>2+Y0!aXY0?<6N#K8lzz%>+hh?oZ_M>I&t1b{{@NfWpqnji*GN%52h
z7gVP<1s6j|Pto@2u4-h>G>eT~#aL<?117!TcuKMSkpCKky+O!6fcF)=9x4i{XfIll
zQU<VwVMiYDu|c!~>2$$(jlRRznWm+GWhff><Y1NyVzK+2zL+U=>_4GSza$X&!ou8G
zv0|hod;%2jN=U{=3D_JDz_?Fmf4mqBf|3BJKo%$J0q{qc)d?JeP*X=CuuwPZ;Uf~D
z2>b!R7QC`WmJ{e;#5{xb-nT(hp*|>Nk{~jF0(4@)i_kEsSqsWRPRW}p+Yu7oY&nZF
z55UNIu;?Bi9ij~J)7F(T5~qinlJyS~8U|v>iPPwvp)wpymf6@R21k}~LZp)n0N}!~
z<HXH~R=-~*J%LI}9p(yY>qBacChLAa1yv$>q2fsCs06Wc5*85yxC1G`k%9z1W%|)S
zID$8ez&v8ep4vU$0^mD=%k3+i2yM_C@;8C}FX>L;W>V7lm!KJz4!5-o%M2A^O{Nag
z2S6!0WCG&Cz(gXs2dnDO#aso&la6P|QhJOhIWOvH2?}M-&;vm-=8tSar~^R-DMP3q
zH3O)`5P{jzPQnOx7Iy`nf4k<NVdwS=Qie3f&B+QCZGypvyOIak3?m|e`_iirv<MX$
z6T1eGghmWN;Yle=sx4A1hzI9OQ3wI)z!dS_N+Y6R$dHFQB@!`{k+i192Y>Pk0@5S`
z&r*IrFIW>uQ&BS|tbWgb&<}o2c&>kz+S-1`7L4+gRbIn*4v|73>Lc(1S@Jw`YDg2E
zB}AwnwY~cNc9RKeHuS$+oULy&Z#1=J6yt~hhjvgI2@btYK=KLF214Tr79?PwxTMdW
zW}7>M(k39#jKFhz&s$%EtOyZV3S;FM>=<`MfN=tpT~yR3U?_A0IK#!~_kZsaMHoa3
zwAxFrUq8*=ySbKewfh>r<*rwM4{$55o8J9e_-HU+uI_2FS+Giy5~V#>^3~<vri^n?
zgk)4Bz@$*9qva7AgNmvl-P4C#xDX^Kz!m)(@q7FD7C#7wNx9qd<?JJ1VKB4>JoA4+
zg(?#0DEcO(32Z~?`xshnAKJsz^a3@kxLho|xe_hzC;9{IC>-da_d##{f4e5(3{*8c
zlwT9yLi7j+sx1+L5Zwk^gGWL>FeO*Y)VQgSiS6$oR7e?7OZmj9dZD7K8^~GxMLX&o
zldmAx2SJx@27)Zwg&fY06t<j!nF-L65dAOhfXfQ0K|&NX2uj}tBcMPc=ugLyLt!EW
zfSzGzw_v2cK_Hz04nbBS^(i|9L+mK`+#3-(#i1%xK@tHGNT~!^5l9e5K?#adsQunw
z>wi+f+-}1|a1`hOUIPgqX0|>i6!P49bbBwi)wrQ9WGO@SE#6$cn+ZyV5gN71a72B|
zw5<r<XdUKMF$YF3d9rPN8R(KnXA=HO3P2N<By!A+VUq!$bu05XA;4Cp3h%wn6P>en
z-N1M?aQx8lX^vS6f$t9@(Jm>@i%F_@B^fbcMiLqw9Hx<+lxg(NOo~~ZlUP#@$d@S)
z5h6cB2P5JSbdSw{w)TRM@sQv)#|-{=<MQ|}doGetT+A<WA5d0p8~mUNmjhO^iXGEz
zn1snHBGy#YLhGg@@b6=oB50<eRtmu4AZF}?u>%JACA#BS!Px!%W&?r@_NZ@z*n%mq
z#p0fsf{8y8LKr|vbGZTpd;j+7zu2NcDmxG%5POUAwB3Q4M9F1v2ta}cU1mIh?bLBI
zV8D_<bTkIQ3(SK=Oa=mwAP}ISiD8qVzR=%$9@CNkD195&cGfMmM$)5fzCbhKPdiI#
zYKkyp#o=8aMoZ5*Nu9vr1*ic65D1Qh54jkY7Xwf%ObZkuDF7iJwH}zr3NX~b7`N=0
z)i2V&B}FV+6#kUiLG_DN`}L9xa`5ct9hjEL*n2P0!4v`PX<nO$3tsKh0D*&bX<=9*
z78hbUjk6^mL1v)%_gJ6@10!9FxY!A51{~1HH<`<eg3y>UZD?K7fC@(iS|+utX>$lt
zgwRaZFb1x2#RDEg*Wz|!icxDNe@(U9)>2abmDSCwt?lmvUAhMmFO$q6K^G#`1Lu5f
zi6Kl0832-)2$2)KQ;>BBBDA3n+6o}VgZ)9jJ9Z%D>TN}-1T`QR1Vmtst(4ypC&51P
z(b!C$Ezs~$Pvc;^dud39ewV+&JuUvmhS;6aAa~L~;l_+&8*(w5C6v&6pj0G*fZbO%
zpU}WDhK)`N`_b`162i$PF?&NjfmFK?Sd3GYr`*HXYXt!EiVyn<gYRj;A(<{5LK=08
zLSFZxrL+othcCl$JA;CFZqzkTGoQoY1-}?b$jJOadjbGrYe9GrK=>ikFM@}AX`lm&
z0b!}Ypd*Y)7DSqs-82jDN4(l<wjM}^Fo{m4P;4X+_`4`_4jk!2Mxl!<YHdN2N=itC
z;o|Sea~gIrJC!>r<SdkEx%5mr02L2WvKTBtbl5a0NHKCuEr!?(WDIIsp>)!^-6Nnw
zZ2E|Pb5d}95XmC@OdddjdVxyw2d^kFBTyfP6Nd)yEOjBKj>N`<e}mh#(WSKBnsT=p
z!?ir{V~ND$Oa0zG_@VU=_^^az04|?Lr?n3-xV4o*V91CnBE%DV{5M?!#85$~b+7G#
z=@<|gDtthRP#(tWK`j{-Acwd(f$)R~!UBB4$R4*+B4{DVAMnrvRe}+LB0+*0nrj#j
z_rxg01RcYX$&C}`y*^FTW9W7F8-S~+n=n{FqEks1&P5M;8rMfjnTY%30NKePrpL)2
zxj+&hM?wQ)!=KcEcm~866e;(VCl27}eWxTKK(Z6IfDVZNXGqOYH?E$8l*mAd?)Msy
z(DCq~=gd>=BSubo2lMuAA@=H-STKZOY83*O&)`5PxcGB~1KrWKWI8t?kS0Dd%K`ky
z;b*X)o(c*mDuWBV2tf3h9SZhqbz$cV`HqvyCle3>H$7taXi9bELr^hwb1+YB=GQPj
z8ip;*CJ7|v!F>;v0dt8YqqGNiP&*5Xc2Hx$Ap=|xkc^yVCD;h`1bP8eoK}R$_~Df^
zkCgg>L%9Fwf&HGuc<M-=J|FB+7(X%NfFA%rV4qP!C)S23O)!9iwV>d%_JfA)G(HE$
zPMHb$=LSxopi18R(eC7zAw2`Ivh4vv1dv@S<_1VP3VjDa(9qJ&UIDU|83H5%5h4M~
zKSWr&yR0iq)}E32Ao>;V;QVLPCd2^O!k3vv{nTDU&me@0PA3AB5|5MXA-tiY6$&g^
z^?>LQ6WE8bWEh|3PahjIR9mZN&kHNER{XNst8qQgkydbfOxF|$IPe|*XE1%f;-2XJ
z5$Ur}qy&hE*8+i55s)|}v?)6Tp^(CpaCnQi)}5Jw#G-)Kj~W^+d7x55r&<g{f_@#T
zd#Zg&2B3T*ANWN(FeNC?Z~gQ;{#hupN3*OP)I<;5fnTkepTfzKOxNSzXM&jeDGv&&
zpI9g1Qfhb0y?1n-%dP+b00mW5Ra<Y-ewTT(J-l4i6jz<<jpv=$I0AZb0Rayj80Erq
zySk3{ueWNu;@I0)Lc0`>YCs}bVi=HYMtW5hKp<Jth*%!Tfk00{Sp@8ec^1GZSxO^U
z-%KvnUxk!7KK6$E+~8==ANA~I^%;nuZ#Pj2tj?515ZY^K9qFGXC7i<+b65b6mnGN1
zaR&#8T6qcJ;2jIpcs?C<lZ3S9Fz7PmafwD@j3+mcJfQP}77;T<fTQMx0|g3=qaMEj
zT#bvy9kBJo9sx!e1*HK%7;Fj!h(Kmdc^8k_NCu{=g&MppLXsh2@*LWPGKbAbW~u8x
ze2hPtLR5ZF+Hnh*5fH)|;t&!60HWan@jXCYL-Fnb-QM$uZub4P_gKI+xLC;hkU{y8
z6Yd9$Jno#KoWXU_SH@`(sN{_h5~K5xXvJayZjB*vvf1PY%--3fY}9OhyzbB^2sDxT
zp+<_-T23dT`DAyRXLU<0dXXaqZYudqY}CEWK@p>fWeQg<1fgoGH%PQYE-7A`6svhu
zOE9VM*gAFN4<jfi|H;5Y^axP5=a`lU4~Q7L6sJ=bULqPLF1Bf5jcRJ(Ww2sbCz}9~
zMgi3W>p@>iMg#;8@8E3#h>vu?tSsmQdr#O01W%y`(0GhL&A`F1Z5o7*LA_pvm;nM2
z#h@r5?(OKg-7p55fzl8d^eGC8Q4o@XiZ!~_mfYJGyQ{ZQuu&RIDU>p$yJp*~MX0M#
zf-FKorYKjvV4_f63Je8LxDTvglg`SKWcDSrD<y8QKeYP!rq*ReX_o%ichu+dC)>u}
zDAEWFA|n`^6U@MDSRxSX5`|(gDE;$M48owKKtduP8dwitP&iM`fB=v(8Am9vY@h?U
zc@TscK-6j&5}xz55U~ts13-xMES#X^LzEZySp=>^>|rDW8_>uXN~2N~4w%o-YM4+m
z5F!VhoC|`-$X2}5ytpTIhs>l1<+9eHh$dSoY9wa}ev|n;KVffE%fV%978R1P6%_!W
zkWluaH;NuYZz9gqu;jo5&2GDnl(&yLu;!lp!oZ~7DMG~%$vQEBMNcwM4y70+7>oeF
z?Z*jG8)JMe$hEIq+gq;JZFZQJmOzZMz$lPL7BURtVG#mp4qYL{ZHOTxlM57Bi3UAF
zHps&TAABmvLWYtfLBKSX!-jXpkkdNd8LNnQ!ii5x)ed^Mp%`wa^cP_t4^j?O5lNK(
z1w{klLTG*oiy&n!ezm2H;!tIrV9>bJflIv(6v8_+Tj}gZ=G$E~{to55*@~{|OxVbJ
zJTXCv0*8laSwfXWVP?5*Si0^dnmJtCoU*+%)`bOP3PUo%ju5?tELD*?XB-Ozt8AGv
zsW2AW!X0+qOB!TM(vvg^GsRq_yk3`xmT0_dgd=w?j9+DkZixtoidDt!A~P~0X%5iF
zur{FZwcxnD5hm2;8DkRLBPx~_BSuOf&bACiii%2d>~l4pdR<N3u5C=b>7=^o)iGjZ
z-6|<IHzv_CT`AjZshrL&I_L`+1-=5@Btwj&1WtL1Ss5T?`OAbeGaM7LHbFkPY6HSa
z2L-P(%UkP~-=Tc%?ycLY(ukJ$Zlpoo&v6veb;`a-QJo2cx=1NbOE?UN5@UdMFwRp~
znpRHP!wRP@m?9gjo-8^KQit;}hCnA&x6$+4T(^6e!sL`WqZ!<^`eTAS!O1Lygrr0Y
z6c7a`$&jQ-BRQ$W7EfnVr)99<Iv~h;vT#_4&U0gU;p5Y@bRCJL!#u1gFi=yZ<_bLe
zY{}{AVeI;7u}1j@ww;nODz@7NQKGaf0R<=v;9)2_CGs5#3PO$=howBvVLeXy**Ryl
z=N%}Ff<!EhWu;Y-ljgP&7#$HT1ol-0+_6paFmg<2EpVg`rbQw_^npU^XhIaKNT#Gy
z!Ukd-u|PN=TM(cVX=q5uNr;dG)(|<x@B@mN8q;VYe1Q)F0hC0KFyKJ1(0DLiVg}Y1
z*S;93sgs=43P6w`QjRRXUsm$bjW_}60NQO$Sv#>oJ33tLnztQp1dxFod3YvE#5@$|
zNz@hN(8aT6R~)YnxvjFf6iU>u9pjOE-SB)k>Vzg{TdUUWPnjq@LP#T!{~5>yTLyWN
zAd|$U0@ad;R2ax4NSrAsAye8!uquX#a)q#7F?o-P8eER$p;|SfkRXAq7LpMN84yFx
z3reRUNKu?ec>@s$8BsvMfFOu4A@M?oePN3c7g}|F0g#O6CIiGs9fAiL45CdV(oO~f
z?OGwn2K}CdDdK3lutDM^Sg-?$1cZ=`i#QiYGunG>2Eq>zIVD3wJqwGXQ~(Q*2Z|(s
zLIi!Yq(RmA1&2Bhaq@)*FflaoQ@o0>ioG6@DG%<9ijKjnuzBg@E4btH!|~)ISKHa)
z+gq}!R!O#HYtRa-`wPui-F^t*(Bijmz7_4E4q?m!K!i|`BtY373{K<T0i4Z)VjaP`
zQXeb|3|8O*1(?lE>KzEkj7Y*NSAZAweX|^I4}4B*w~IQV=K5QGlrOQ#-Ly8g9;s=r
z2QyDavWZuhnw>P-88Upe>f0uG#nh&xcO^h>5ns9PACxuNJ4K|`J)A4v9>h4n0K_|r
zdsIAPQDX{3>NY5%5JDK&g<M#Y5b8k$6cgtuBm$U=+6;thj{z{L$E)ief!_#_ApnXH
zgknTUBXa>&PO!QXtaO1wZsY+IJs!f*y4U?E3Psfd5R&UbOb`i^Mrxbkt@2{LN>-ZG
zs%ilcWJZ_-7^jg71;EtiTnBBm6w1DyK~a!}qoQsRswqfH2qP%Z3?%*z1ow%oXn}j!
zq832*JarJ|D9fppHA_O<fuHN^22M*MY1db9J-uxMg|;;|WiHTJg9xS8rF9Vk)<o7}
z0X3L%>~4_bUTendG!_=@R4oON)ay!zOrR!VUQ(8oYYPRHA=aBh+gOT+2J3GMm8MH=
zNNQQ-c&{fa@o34Qo5s%rWmkF_4s=380OvJO&D`P^nz#%WD<LO~eA^+<0ATG7a!@MJ
zmPShuX(ZNwKRXcJIe-x(@`W7;)R5#%5CY#-iDVlHqzaO|lh;Bt;3?E#h2&1+8X9Oi
zDTPn#B9ugaXu)J^Qv=!uKtVTi@X<EGNO!M5U>$w_lOg_1B*66r_eWg{v_dCFsbGYF
zTDMpasvmq}s-IQ+-uR~vtXoQT&AHYn+84kuvis3A%}uvc@;*WkJV+7?OeBy5PxI(Q
zAfd6@%*`DIT|!WA8{LBvPT??BG8YnXptbBEqnIRIfhvUhs2{gIjOz@b=K^7tFrdno
zT3n3Zfk&f$$QD48sL~aaNH7UqvXE!!Q9*0u7{zB=5d0WCFh!H{dh`-{iH?OvuaHzX
z%V6OXlA@k`<3k|Nz+zdcqnm`TeAKg)3=iTO2~*4zE_CxvKizYDkus`x%n1R|l=qt@
zc%;Zo&JWiKae5lJuyYXpyH`3Wfg;fcF=Rv^AR_TQ;yF4+oX-0Lckc8FjS(3=#U6?R
zd_$17;1pJL3L*v7C;>7dKtu)@JpU@Q7YaJqD8(dLq10aRjLSQaIfd}53_-O}V3I&d
z44lWffZAV-%f}%=X%ps%I%)^CB+ySJN_;`VwpsXy{$P4oBEc9yk8*5Kb5B_*JBhFF
ztmniRoRIdx5TXDC0zvc`T#3DHDgpT@SbC($8IpUA4&W}d=P+K5XaRd5P?><^$l|98
z|Kh@>YM%>1hp2`Ua2xoiWWol-*^a?u2*ge>KY#o`v;QFG1sq|x2B4kZ&T4WXu!y{m
z6tlNb&6L2Na#XNM1PW-NH^Dd63~Ce|Ahba!hS#AB!a;6U1(AA32%xaMp?+j}g4^9_
z6JE;YXu9s(UfEvi19E5+aG>qCVjDmLB}6Jfi3H-oc7Ra@Fc_sa!SOimA)YWSEqjtA
zM8pXcAilG-xp0NVhk}nv8bC6$<V2{c7=aXlQK|>r*ijYvh`uBO#K}Xn8(W`Vm<;^?
zJXHz?MLt#`Po&jV#R+=mp%o!epeRwQ1d&ko&~QT4{;(IJ7)wX|#F`H*=Mj-JkL?MW
zX!MC+-7fZ|G3^7Q5yT8K4n$T!3kM*fs}IX?s+)j<YE;}NOFvI&FG2(|8u$zll0gw~
zR0k-B(kJ@}LJ)|k9Y6@uL4uQO<5envpx9JJ+={PiiT*GN7DXfgkdZ)8)GdpQLJ@ha
z5U#?7iBgOKVFpHxMGxnIS=@wDeth4gOLt&2kS=tZ1M1NXQt%`SLUkzy0x%;$_JMt;
z5Ht{(0+tDsf-bW#EE%0FxG4dkz$xTX*1a^%A+1Yhtx{^5QDOkaU(>`gz`$Su149Mz
ziPSU126vJ%Ho6K96i~*YXv<mYKg;syctl|pV8KM*AD&649%tCNHAp(j2n!(K?nO<4
zXpmRhg5d#>SMrp>f*+VbsThF71ex|HL(kWbu<rcn{9|DDMBK3_$RE?F03FC*JnNJ{
zwL8iOikNc}Kz*_HTqSA(gRB$>)N&J3L{FiRC2VguteA&@Y6mz5_lBnM_Ib#T6xp6t
z-*&6+nE<qzk+rmK5umB6%6}JXzW*y$>c`8ulp+E|3V?JGgkScAKuRX*K{V{brK*rz
z0T6&@d&s6Zre5QQ6#(QqheAVOxb}~d0oahSiv<+ar&ZTn>#mb*%S5u*wKRkUgi=80
zD4#8g7TGO~Sp{qHcJG(Bmb_GABxWMzbf#q6sWR=F_Stf#Xq4Kh$q52jV%Ci!g9*<$
z)Za*w6_8t`2FFf6VIPe(j`4MX6{|v(13_<Z&2OX6HC(nvLS|CaORkuuDM|_p2tkVm
zNlG*-Hp@+}>(t&hEewlMHH>*-D8vQ_*fs-zu%b|GkYI2nmI!|+At;h^Ft9+dJQycY
zHwvlx3TXj70DNDR-HN1GY3d#0o<dm)2t+C2$oL#Qg#}n4*c*sLa9)(4I^0zX(NO<z
z>bw3YI2i$vu@BsJ?7n731Q!v66qKl5fdmWY7_{yFx-a#~8hQ?g%tgYm0P_SAnLuKK
z%QPtXFtC#kC-0u-b3f@7tW9-z8xUY`W+K`YYxsp@4oOlP;5MpDHj8#`qljMw&Q2{D
z8?sZP=v~>r!uHtxnz*~Y@Ne|-^fT!B@6D<9^M<R%wNi4n5wkilckt<%I40_62FrwR
zIXEDnjJH-bY^ENJb)k>lz)?)HB1R-e41$QM1Uyi_B_UGQfQ@EBw9qPqBB=$4!G&V=
zA?!h4-322GxQQdCKiu*XM+}~TWIZX>){yF~ddL0QI+aw(XclxgibvfNETIqlciAfi
zqvOBZ26>3y9*P|EU)vbrVDJ`ypHPA{$Tp4BHlp{aKhrOT-Y@uvU2Gv`>(O9^5+_Ie
z^mu*&(K5{15=%o|W1a-$K{AXM3PE5<ZWPji1_QO6rzL2Vamh_dgZr!*xN5iVf|t#0
z+1Y@G5kfQ?zo|Y16DgR=)I3QSe;j!c|5jYO$FHo;=Ahd_)9#7N$IIFJ%p>U;S0^7*
z_nz+9!8iYWVj8g#KGUM+A~O>*yy_B@)Ha>s)pJ^$S^ePmhM)Ou9`y>fXpYoPqfrv)
z_rlj^2@&`++90&zo+T2F2k1FM1rr^Nc2QnL%hQf$@L-8w6R?}W<@5eow))d&C89?a
zj^5_#i}&t0cDt@_US1h@g6%y)%;EF!jmcsY*kT6|1vVJ|_vfph7%~tYEH+Ph{LWx9
z4{{S56R2ln*oJC}(2@5j*=c|}wpQ`h3@m$bQaoQiMtQsgVKDTWvzY<Uq%*3++UJD`
zf>?p98r8Hl<cktnd{50YJ>2!Igt$sfn4{4#GCxt2)oIv~H-Tc(K?vx#Q$j;gqXU?y
z(7(-anEaNkrLT<rzfEH-c5(_ykVGUXZx(0OJf{(4)SzFUh_LRQ1{pXbg1VEqr}g)^
z%`NK$Kx64<a>QKpJKQm09mSCW>M(xXO#>Mj6?dp}(j^N{N7NU``E1t{2gSJ}B!nAY
z(UQA>m1M`|+qQl+9y?sAkEd*|WPn+}iH_4IwD!{sEqy<8CI26%pLBLM3Jx;~>?Rub
zpsDrYd{|@N4C2Igaa=3iKQ#0kK45DS$V~2sHy4-Nm`ICDISO9myL<`}hmsgME@1*d
zlMLHpD6zN#7o_TJp3oh3_1oMq^DZ-d0t%OGb)j&vi*p>mnOM1JC5UWdB5`YkSg~OO
zvVuKNqrySQob>b(3f7t_rTbx+TS>r$nF&=m?Zb^z=3<%L(=(bY6AaX(M1_4AlJpiF
z=ny=7Wr=1Re(9Kk=hp}L3Ba3M3OI6((zBk6oPoX;pyUz>phGqU+i85+zJn*l0g@XK
zK!+8*>lbgEIEv99FDQ!B=Br?_2^1_2;DXLD=vpjlE^K-5FSuvrzNT9H6VdGFb8!|J
z$=Hse>8?ShX?P+>f-87}(uyF>>e3z@ff{-=ce0lLJrDEa>8C@T_Uv^wBiNA7UB60!
zK9lt5hbB`O&If$WS7QT+10rsw{7-9X%0rbf*g(U2WLbJ|VS9lJ;;f+VLLG`^JS^mO
zpf>Avbii=zvC&JG1G^cE1Q;=L#DflInjE+*i4eZkWbZ@{yWh#%;%aomg3yKP4~ZWN
z{RBJ?SaQ&fyzGmYy*MPMFLr09r(dy6znFI);dEZccI?Go-pCG|Ni-`+S9SLN4sM!V
zCC5(rwTU`LtK;!{@mbp4NIbp-z>(PCJ4y#kn`+EH$j!=6d-Ob0$3~Y2rJ=rdd$@Jo
zhl&)Pkl%{*d%)1F>^lkEL$`RmWhG|Yjhh%etGejoam4NWV)1I}ExO+BclB)9bMbbt
zCTVB8ne2|T=Ma-*{H+jF9Lqg)b8R;TXR!jDOvs0-JqW#z)psE^%bh5K<xNe!PjEY+
z#sWtp#)m&5&jmL+KDW~}b<h&BVEK?!%i9AW(1T={s5X0x$R`T{*~ukPz?e+L$U6K2
zH|ssy*+!a4fPcgb8LDSI&5^;$M>~-?@QG8jU6W`%ZFO=P>al$ejAF1^dnc?@k)<^~
zYGO2MixtX_c}~ouz|bsO-@tU~R83V=wL>_m$b~f$DsrJ!TrfAydOK#hp^Gt$q$IBG
z`KMFsVQ_+jjP!{2!E5q*Fe(^8Ex!2ab8K1!fhh`w+SJwR!w%RCpzk{e0ht3J06}m-
z@DvmoU?Q3j0A6I&5a<=4Zgap<z#RaHZgLbZiUJhp2x90ypRT>LwTIw?{%8mLAOU@`
z2dEGaIHcv+XFY|v?#_EC_bNWZ7X@FCkHy{`xSCnw8?_2J=S$~yCQB=!(<O2*2jrSn
z?fu0t^LcX9DjI4;?BxDY`Nav|%PRFYeLYO@cTOJ{%(Bhkd?kW}M7pwT7C|V4f#Eov
zI*WS>6jK~qE(6G%1z>mItugRxf&0Qw(D{Ez)tPi&BMFBWWwJ8pc*NN^zPmn2-L`?M
zY&BrBYZ$#G6xO&oP<oul{nvA^X|95M8-S0!>=Tg3WFp1z?C9Cc&T}xGp%WlXk7I-;
zY~2K)xf9b!_Pq>z0WBwV#W9hJhPx$bS(G)grYlyttOU>usgU82G&LPt)YKws1%=~?
zSQPCe10kY@m@1r>Wi?EO4%`N|8Cz7<IDLwKagB_nAe6p6n%LW0_gCurtN8z4txQ8w
zDGAhbJ$M62aUdEQ34iheIYH_z#JButG5xY)S|12E7(?$Hx`JE-<=>{U?$ZEu3~z-n
zp8&{u_#SV-ikib%2=xm9WE<OwVYx`<#W*Bll+YgX6zIDZ0>r3AJZKmC1J(*cg9zty
z<+4H$=o}C~52p{5kVs?0hvqW>%xXIt2Cz8Fg&_Iw)|&?k^^X8jfPkmpR6rx4<YYrA
zCQzuaQX*plfG<i0U@$%gn2Vh>(pd~Bu}C3dG43O+th(@I$cGD`z#%F^AH*aBq?obZ
z#uIz$6sH331Ejh#1#2A@7#U=H;irV+>p0f}4@Kgbp&0SAr^bdG(s#UU5GC#%#vKTW
z(`B+85c4(kXCe$tf`>&)5feypD0*rWhai%)@qoidijQ)fFEpqIAh-+^w{`pa;5_j<
z45VuIgo5n}O_2_b;)}bzzvf|b-<+|okbWAeR1gD)WT0)7#-leVXh>v(sD)A+BHSAL
zX0ETl>b&s%IR-FUHYmhWSAk_`mzT54FyKzm>_5?hP+Mh%g;Vf_yYSVxVl4#X2dd05
zhiz&=`Hd~Ft$rC+)&2Tal(xyXq|Bru5m+#DF+LvoW07$%F9GH}d{UV}n1AO2{;CXZ
z7rF<1bomFZCQ8u+kqQq_xY>>hTWZ2WEQKhrc!6e1v_;c*O>=#n(NZE`uewY^1R;W|
z9yC?!P&xL6C&H)<EM62IJb+#-j6g^8`7U5V#f3-Aq?g4)<<zqU+35NTxowz*#gk8q
z6?_4+f=p=f0wMfQ5y)fJWJ4?rB_X5=10@&;X$cgNa{#z-h%Q`Eha(|h<~f{g9X6oY
zE(=dEw`f&`7ZRYH0{oYPBo=oCFo{r75PyPp3c-B{`P}!1QjQTamJ3?r{zKt!pP-*d
zsG*4p2$jsSKwt``MHE#&0X88V0U0XG+mw)yjoj%y1ATlB=CL$WKx$DJK32Qy%+tHI
zT{AuJkT8Rx&Onqk>V?9?h4G1KhzGrefd?1j1@B-Jls^BHLwbitbox<>eI=5xq5%S=
zVj>@>pDYUSFsqjkt(ndWpQr+rPKs-^>E>sRf@j4{Mh`-LK@r-;=;~#hF@eglkO)qI
z>`?+EWFqH^g0xr%`WTP=<gwDsf^4T6;RD+PAcA;yze<_$3#Ew(L827z!U-YV;H>Z<
z32K8q)=`0o$qPZ05ZI>n5V?&zjMb$4zOM7BW?R$;o4d{IK6^}0PdPGY22k?INe?Uv
zC6swhrU~9GK1`pTtkafxTvqnUcqK28<kOpQeGU~+!gMv-U)Q^gKP(ifx5C?GH2==5
zkCPOZMACGY0oR9@4oKc<g!hB(8R1b$MQ8mzX$(PRidGgd5Krl}1|VB!zK14-8lRL?
z;&;!#7w6mav`v~ckWcEmirp(osb)>Gy{fPBcDC_osbvt5K1?U<@HreIDXwtlc+-xW
z8k+3CJX|BNaZd+-!O@P*)kZRQF=Xj!Vbv&Ze!jSL&a|e88>7Y);rp$J3C&q(DJS}V
zoM;@E`*Gwaz3D4G{oV>-Nnngb!b2*1h%|<wG4d`h867w~Bw@RIkQ@soA)sL~4;cvc
zG{LC?qcKUUoO^)Yd<Vd&FG~3S7!?n-h{%caVR&(qok<B#jaG#OJ;GTG6sM(yUWBAj
zd4%^IIXGhmbb;NaEQ~>#1qcKVy3oSf;3N+~LqlH7`&2aynh|8z<Ey`H)$2`DYxt40
zYKprxt;|$f-Fn<nU8N@98*P{BPn~O<5(BTu2isyDVy;mY$kxZ$8jjQyK(%+)T|)a2
zU|2DO)CADU$XtxRa!E$8hiNWY8GBd=EKJ$3aW_EqG!A}G;tM~Jf-4V&v5;8>rZOW6
zJJG(;17WyXs{@e~-tId>$ZY}O@rm`C_vl|-1ArM35}+C8LEYz}L1g;3!?C*VgM<*<
zhwnOElz2b0Y}QSs5-(^K;0mk&1MVKm3LYv9qzAE%Ynnr}=SG1ci4JWjTBe_U9n*0x
z;@5OJLh*0tM>(|NBD3H2$%E2++K1?C3ekiSDpZ9+Q)@0M4=mn*UUScwfsyQ(qw+UA
z<m{{N%Wu&Ao^bk)P{*n?!KM?qu%gi0VLYMg1$w(q2%O3&EZM#%;IfF83;?N+xkWBn
z^MOpTegR2iBN?C<NRJawhf;g~Z^<!%l8FWRCK2*#@DrDeF}Z!*q&sJZOf~r+K|q|0
z4nK(sF-|pu;k2n`5Ez{>zE&e5GLi@+y^#}5d@F19)$3hv+xq@Kzi(*PUJ4Y&H3@b)
z$gl|IdjWMw3rP|X55iGIWZJ>zzidxOlHapRrl_i-#DgaU_a><S7WAH=(4N?$%hz%R
zIgo>tLpZpH=myruG82c1sAhaXF$XgzzL3iw1R_+Jl2l}kfU*od{fEY{TxcQQoyzu=
zofPhz<j-?hlORPvMcJ5oEfrR$Da%BFn1T=>jE4m7CmLP?4|9#<FF<l#E<1VJbEuC<
zc9#wb%_?9HbZ~%h;|n_uJ@N;FL5CO|K!HZ35S1guIB0fYsS3!jM+RiGr<;VFY04F_
zwMbPrQIkDP*^;X!N<xo#YF1>nbcP#CQeK5?B8ZXfuz7KSGL{592`CKAh{7QNijh<<
zz&sA~;+}kiw8eAW6t+ffTHdZ3h@?~_*JLrC<go{-q90g2Abddp4=sh6OP6tjrcY*-
zJo!_KKS*)YP6ViP?3M@6aGfHkI9Mn}Djdep=UmWlfoWE>3aUysByzBI`5zCj#LHpQ
zw~aa{0E`%0+69J)&<UcQVb@q_>~^Is;)%YNWW``j;5+G|1i<>f?STqp#%(mS*PMB2
zMB#{e;H9^}L6d8SOwp3GWUU!1MoQ6=v}Ch_k>n%d-{3_x?(K153N;iJ6;)MfY2CvE
z2nseky6Bs5>eaTaRkqt&FobGbWNOr4TDC}oEugqcI*VqtWWbWh%WQ2a8YKmcU?Xgl
zN>ZS+uDYcx=Ne<Un(E}?*CAl6iN-4rd07tOu5*CEz(gh631sjm1rgz3A}Msn)=zFc
zn0A7XV-AT**vMiDB_JfX{09Ip>+p0siNg2}bAaIxj0&CtfKo~JU5Y-)L||L_?fb7a
zQ;nRk+8%7c$Fy1`N6DTBRE2O)G9>G3XU%4;0tQe#M4(DTKHCDoAbJPUd;JxKkgY!f
z1H5oRutZN_L68_CjlQ1h%ckQ|gKLte%2bgEN_XX`8@^kNfK3MYx42ZIQvsG>`bbgD
zt~!BT&>kp80p}>T(wH7_C?c$cpwT3H@$-b~K9jFTmAmhUsJ|pghO0y#panTE>>4aj
zL5k3-=K$B#Lxhr(OauE?h9*W|yXNFM$c+%FGw>8J<S&5=4Cp}OAsGn~vJ|yc5h$q_
z{@?54mCyd?|M~bzy|QmuaT19}RP~h8Z8T<fG!SbY3o0Lx#}Mh6D_`RhvLnT!r6h$%
zu`rAoXjrJg$k}18ht=O)0TYN&>tI!wma54VB5X^DNkOPhU34d>Hw(>;t+v}OE{VR5
zMKP#ZYhl337TH!&qhK&BkHW*(oIH2eDj#BD1|3qXAC9UI%F#H;T9mC1mOfuDiPyP3
ztKSL{jEt2YT?5aX6lFp(d+j*{sDmTyUKqcVjX}tzUjE`j5<XIzz;1jZ`$q)cqs4GU
zC`k8v5aH~|=@>u=5MU7?Mk^2lXi*hNkwuQsH%EC|*oTc4f#7=zganZ=hVg&4B?j9d
zbYdd?IdMMlvVK%kGb2PK3w~w%r<PcQzg@&C6i^tQ1gr`Va5s6{l}DabNVG+95x9^K
z&)sWrT@R3oN<8~#Pcq~>De8+%Oj5KXx{P?iKCn8bzpuOlN9w+2ny+YRKF9OE+~B-~
z8fYX6YmwK1;2HAG2u2Vf`gqm@k(d-5kGEcrXeY(1oXI9~h@^(NV}zzgnsJ0k1EGNX
zc7%=EeILfGReOPLixvk7_NQlW&>r#cuIc7)3|%v!k|j4+vN3~kB;7fB(`sg%d5`bL
zOm(mJZ&xhIGGOaVtTQ13K+MYY95Gf2NhFkl2P786G_*QeI=-c=Q#Z_MOz!cA`I**8
z``S)~@4^K=EEERc5ZOj>c!AkHs{;d2hOlO>AJ=&?HrsJAB4-fjWFYJu&7WnLouXOe
zPMkrjOp?4OSIvUV@4ZH>@Kf2*hj*BZSaL1YSUuQ`v!35v9z_bJP6&iTU2-Lnu-6!;
zti>4VAx=vPkTkcKfE~brVK*14O~6TZ{#Gw`@*M0m3vLjw2K|Wkt&1*)3z9quF#TYd
z1!uZ!x<LqMP%Qw+i&}4MK<3^r!udDmSZ{Y6SR91UZt`m!+*))~L^|iN$G6V=eT9ak
z?%<()4rWU-V#NcGYYHf2qDLBtEl<a$hS<rbnYWa;g9uHgESgc;2@(w3PYl-JJn~)%
zVd@;Z5m^Z57<RL2nhtqdSzu;ltmESQds}1GLtQAMOX=RNC9frkHrBox@Yi=TT!5_Y
zOB4nA8DPnR_TkeZiwws@GFUT{nJv3?%FMuuHa&%quYjE8-?a!R!U{KE912UC$lUOa
z*#((|)*RNY;Vohg1^b2)dlxN1y0o^N$L%yF<@U|Y20B8B*SFCa`+DZAoP>ME34@U{
zVnJ7qvB|UNDR@X8Ep>YU(rD#~yagGVjEhRcy6NMj)s`%Ctp<=v6*+J)I1r1t&t{?6
z@K=f+8XHhqh|Nq$p@d+zWIM}UNn+W%XS8ss*}Bs)BPImG7zMWm5SS8YamIau5->gc
zl9o`7y9_#p2m$kn43;U7*d9=s0&J93$-!fT$C7yK(CG*WgcObQ+5&ndfQvIIa|6Ax
zlU8j6o+8<H%jA~M@*2hTJ_ly$tPZnNBi`B)Ycc}FM^AQGy^*XgTOrSnImbLg%ySAy
zBwK=9QlL~y8sVl>MV$Sbu35$|mavmSkwFaFhC{=66CD~dn#1%#VI^RWvdM{g29GPJ
z&K+SUR4br=PUtE_43i9#0?V*F;=!Q1fVp;}DyFc69);PGVJ9yk&N<w8nn*$xJCS?_
zY-yCUF}t=CZd+I~8!t@8PaGRI%~+O%;&J;QsTj>YyTN5tn<K}`j7+QLN)%9wn6{=^
zBzEeBcSSJF1@MbpNoHO89B)u0UiheCo!Q0)j>(cdPFQFP+mK2frJV{aY6Y@WWyfok
zWP$cvlFdNkhSsQ*!l>>c3MQ7D)3%ffPHZ3nlP6>f@(}pJYaWiGsIh7sy96<4$5<@P
z#JOfdEHIM<-AM8hY4F}7{26I8rl^-9#WEhXE@LqZ8O*aa8sTxe+dYAVuqP7=`5c4_
zmlpRSPUlL70;=6FVlJrkBS?@lPLk<(gqlEQqVO>TTe27o$q0rUAUqr(=|p0!BesM~
zj@=t@z^Vbb5c<i9abW0uw?bz&$gmuD8IXbj!P{}Zjn$S_6I`asVo6m2=@70a3RGSY
zoB;;vs;e^8*Lgw^=NZeUhqmQCuOULRB$Z&Z%_x6G$}ebuOWd$bySaQ5h>phuCQP<X
zaf~tPbu3)*wCzWL=O}p*ZD>1LD7)3zlD6zqj~<^b5$;Bir`w{g3#qc4ET~-Nz;(v9
znqE$nI;MB0Qdz7r_n^#AV|F-)DK!>AJ-9|Og;Z0Ue&XUC#vI@(6=lqnUda?@&ekTw
zVGEf@DN%#WG!vd$b=2d7IfY^{Ao9ojnP^_o3P+AMPLZdd6l&&#R=B~SwlzWtHbCZ^
zP83MYkrL$=X1W!v0edzalI+sy7qkmlyp!rkBE{galLWg+od(TZEi5X{^?+(*GR+1f
zrNJQtDK?p-V#P}_Wb@BFS40U)uAG#D!f-{~MdJ!)%i6DNP>V8XG}O~miwYnX=)0Sh
zxiknIOfoS0qbO&a+kXTp62;W34<o0C36^0BE2}-)UM`;PFp&D(Im!lT5X5MyVY7D+
zv%a|P?mx9=cGo%yj)}#tt-x>rj9BVLEZOa{O_+3DHCkcJD>VJ0pvDk6F&HJuXNPAJ
z1p0j_ioMlTKsbVKJ3?zRu#FGg(Ne9rsfZ%(&efew<Yv@Gq%w(;Vq%!HSYtKyoDQKM
zE_iX?%FY^Q8o3CX0l|<<3Ubqs?!h2ax1dJ@*!%f!c}q>5iGbc;n#j}_XwoMZiU%_Q
z7nXK!AJJ<fu6{Q!dzKi2`e<fh(2N!7Pls5%v>k#8C77J_&moT7^cTGH(|{8L+%LiO
zWPKQC5W^=F-H@V10u<R!FpemzIRmg|zzM+FvTTon4v{IfuCuFJEl_GB5Mn>qTZ^`{
z@;k}YelcqLQQ9<N5B?ioUE(4hA|g8rAtoJRI@oQH(RGp%PbzE>FJ}dEf_DZ2T1vpA
zkrt5RBm=-R-30{#1_T5Y-YG!9AV4gDiTcqzsznGz2!_b$3Zp<o3ql=Ww6R!qO%P25
zBnC_wfNVg}gAPeSL+ooXNJxl00$4pZS7Ko6ZR#pPC<!J(7-t*=Z3_iQ50+uQpi)|d
zWKVYctfK)|QD>FtKHXZZcLr8IGik)aD8~k**8B-V5Er#Lg-NM9C-P@h@;hSkL3Hpt
zr?~fY?}wz6GNNWTa;-3dBDoI)xs=waA_ysyJgAhW4B47OT0**ao;(_RH61R4g5;n%
zh@fi_tim^g8kRyrK_Po_(2%~4-JKW<m&Zz&F9VHd9$0JE0||h%?Tm$;FqIofrp#<0
z>o74P4ge4`)E+_6*QT19gT>n9U<N6A7cMTrz|_GeFme+UAU~Go;fOat)Dv6?fmK0#
zw6GgZx!Cg&-CQAQkRC=bZWMH)&@Brz3pghUYVaY=K+hoJhUf-yAihfi+yOUk$N<>U
zY#{@V+W=tELqW%iZF?$Yz34{WlrZ>kaXBo|#w0A#?AlZaK5$?tJE4s0OhLxOv8G=r
z978t)Ven#EA);VIkci<92UC_gDrYGL0$H-9hRl#PF%D2|Fak;<Xrkv#gIkH;LTp7O
zkWOUSDA$#nZ9xJc!f76frC5-cnULqu%yr76m`5}i6j)s77^fh|G~robYIf4?k=(K|
zAqWscL5u_pE)<bS7Xy(<W@eix3&JS$>q-(MWLBaH0tmGQ8-OK16vTiRVt{7=UeKcy
z>Ybu*t~ROTT7<x00PLzzw`XqP<pM-tMfhRiFSN*5Y=*=W`fs3_6A!qCgrXk)p+VyZ
z83fe#Kn&eyBFBkAyum>#2=>mbkW;9sf>24Av@|KuiwL5U84jjHnEqlEgbeb4E38rk
zR23?(p{-rsT~$(6)+*GZZ5q}})+}nKrrTeV)>N9lqa)%JQJ`uCKqjEjHDHac2bsWO
zu%2KGbTVp5B?iPHxD-PM0im#=C?KC{`HbdHyo9Tgg(x&ASC9t>eH&1X)YnO;Y8AIz
zuD4wQNlht4N@Z^jPoN$Nu5Z!@bC@S?fFG0-Z~`jw7#;V`6%Qq~x9bm73O0tpR4=w7
zxdgDpVKR(@L}GyQDDdDEokTc@_JP|Z!T^j3<E!97K=8)EOW=bL2f|q*E)on9YfgbM
znCe2Cpy7l`QD=_qlSG9D8OAS3WKbS8ter+2<RN$=N=b`?+X7*knB_TCg$6aEELbT9
zFbW_P#WyPUdg`m<>bhCJEWRZeH5RtM2x@8~WJe2lO$G%NiDVl_M1VcPl2izQAi_z)
zfuJBR0Fpp$zkxs%LR>t(gbIVYo-2rIXmGK+-xmj&!v026A_ES^NiI5t8JP(Z5txK{
z%qt66S}#vqjNPucHwRQFAa(`u>5e`qAu#wYj0FO*@DS}})iX>h>i3aD3UD?<SpVpL
z^I^1u7AXY^y0Otmg!CS7-zR3Rh-xh;P(HFj_MMaP*+Bv)c=7v+q9uTMIZP0Q0$dLo
zJ)|d*2MJ@~c|5m<PTH(Oi5U#hO{&UYhC-g1IYxA1r6F@Y!o>CNz}2U7Q+ZSsF;ovS
z<-!Rb<H$&)LrW<pq21xTk)U)ugU-ol@@jM>pzyk~P&yb$W1^K2BuFsHJMXT8fFn{#
zB+xO@cDlg29HrF?)sQev1d#9|IYA3z(3;{=5N>2+n{!~)V5d<M;1Gbr)<pn#$2=3n
zm5dZx&RmBgq%4QEC#*gm5_`NC*rIFW0g#v#I&wix7}{)D9>^azq~;HBK%xY?o1yy0
zsnkQ*1;_Q~(sN!q#7|4?ru%JuRd15<dA8qQcmM*`??pM&sq`F!O!sqv?F)c=eV|Zw
zK<rfA1`3fRRe(>+Yk4^sC#u**`V3eZ#(?gp8EF`Uw`%!#2QWJ@BlP@<QGJ<(sWgcs
z5Q5~L2(lV7FCXh1jld}5NK=?Av|l;>L!T~#83qPaj7V`?DLBD5L#z|d5EVHRL=Xr;
z6kp#JL-2}-SrIh`06=StCzWX`ee@<ohLB-cbV%|4R8e>i0QW^Op`-39CQ>9LfD}Cr
zKn(7^zea<RA6B7h0;q)r2X6EVr-uMbd{exg#{x&NNG$7e;)X}X2yFyS$bzjzQ91Ra
z1}NY=roqJe$UMk?FWOV^k0e2#oH+$?f}9JCC$Nw{HF=@M72fZWj}r<*Nnu~VsjByG
z-bNEL+Sv+yuY51}3<{>jA3;DfqNG#<tP%nzUn!Fah%AReFR&Uur9YEE%Hb#YM1mnf
zk{+TTaE89L#01SCh{7JEdH4DquX4Tt7s&DFM9TQp%N`gQ1@S5crV~pE%7N?fFN@Nn
z6g&w#*X9p6VHOI7oty^vE?CfxB;*6W!_Hq~Q?OxU6Uiuuf`i6DDNf;zaG(NK67m$p
zxem@lhB>6KalxeE?84S1O12ENvX=s4Lr4gUT3W%aDPUH(Q9S{P;#9XekPdWGL=q&x
zH*%_zZal=Gyflo(^W0|?Xf;df2kH+K(gC{y9plcB+=e!kwH833m-9l6kwnl|fq1|}
zU@caW$Z}1<!TNo;dI>S8rv?)_Uu`r(OUmE^bXcpup08fh!788Kk&C>Y6SJ`aVMtPk
z;KmUUe}#gNtu6R9D?mB+tK2|250+p(5sw4yDN7MChXT|FacV4q3W^7`i6GMz2u9l`
zWoyo@c9ha>zhi3gwlOD36M;bpfm0+hLWv?V5Lp0{MPNk=AqW9+=@9z+3O6!oU;jlN
z#2vXWC=vox1)_qi3h7{=LI8vak`Z7a@l)wAxzHh^XnAs^?rA&K3j)hQ4E$crm;Z2_
z@YFzos5%KyG9V>DeACP>ZwNq?7D^0kz)&b9fy4ONDo7{@0ue$11!=JC7^Ogu3XM=t
z?$GV=uU>S0BsvKJKw}Tn`+NsO#){RJoNwWPl$@$jfZi|*to_2;98MC^NI$O4!($`?
zkldgbNsy7is&3;mFr<Y6&Ipknc>`z((O4n|^fSm}_&9soB4@lka00?9QbjeNv~mU@
zLU1gh&cq2&Sr~;7&PpW`1qdd=#Rxk|R6@nzG9%tJEfW}_^z0xJAixNp_VXXY-+~8a
z_nn%Fjn2S<fF3Yui#?QuDH0M8=$PaR1I84s&9?k<46#$RM2M7?>@u>ad?X|eAVetn
zEc(E&A7?|;qj!h|o~+RznMpZ|KvC?S%G$r%0?QA2ikb*`K<W_)3a}7W#5>8g)FBk2
ziA6A|G9(Hl5rGt`AYU4q-!GRBDG@)I{hy0GyoCZC3-^M9krgW_f(Nrayo(h=hA2fB
z!BSXEG95S$<xHJ1ce0?hNc7kNhNBk6U}b{P?2J7kL?bjpF?{}!g=a}x9u;8!nHVo?
z>Ty&?+;qz2T|n+RY}|590g(bQ$jGJwM`{w6LUG>;v|-u2w&*#EbYbhBe!RQSx>TVQ
zk>Eo!XlW>rB~6kT6G<uDn`$KsfK=$yM)IJp!I!>7?!37c*<xl*3-&@tm4rY!*!>K|
za2J0=_N`S2z+ap&3W`R_Kr$4C!XZ=-g&~FtOp;mIqtiSeU<$!Zej&i+0&^&2V3T9@
z2QczGH_#QZ`=N(??$XvMkh||Aw+<K^4&opNB^%&)qeMX&?POa61)~w@03q5a5Qvc>
z0w5y-3W|zoKLFf1ib23nKqBA(Y7sa9A1{4KvMJw#?om4QH%PxHcvYZibPra0P_>Zm
zpe*nbltqwda2p9GEU;n7Y8Y%PG4j#dI(v1nnlPz^q>wV<uPWy$%+6$lBnT(e9i^+B
zEorVOkTx7Sk+xWdPeD4v`YjMVVW%XWB$Pw2h)iP85=L-GcP^P5gE~Iq6{$5C1+`&r
z8d!&DhNwJ{sEF!I9)y1^IA=G^-Hoyy(DRedu#xh@<;E8F0dJNDNEyislHVFopouRK
zybBfr-QGF@w(&Muf?X*;8FOe<7>(eY5*Was$`}Rh&SV5LF-S;#-#o&QJ{5`Tq@$}r
z<o4c|`MPx`J_+NF@ZvynD+*~Dp+FW}Nb9~GjVS=$1|WQ-IA**8Y3MNtaDf>H3|>?e
zAJFphAZrh(3lIuwOc6~3Eyh<<#anlTkxrCbLChZ$oaqV!(iYioVc=Q$4;zTj_*x=}
zKaH?cB&1>;j7Cnd7DHs0U_n;2N`y!GK|9x)$&m1@oKcl1i#tMAK|q`kI_vax!gV_a
zFl45H!2xM$M5P9rU`WWx0W>a!5J-_lktb=6Q_1KM=++oO*s~y=LLC&U7-&48k{3Cr
zl=BNeSEJQJ!kt=AirM`#fBog=7?A2}r<e|rp}=4vObTc<2nZ99b@fE+=sobDwE}`d
z>Wi2{+yH@r2tdJ4+!h5JU^`49$I|EsxKG#uWXK90(0~u{`BHrbp|fTjz6KkQhoEw@
zHvkoV4<FTsOvM0C0S|Nlgc3weESEYZFo-ZD0syid;xtr9(Ir00&Yw?r;jZnhwW6%a
zWhBjJR=stv*?8QMYfK7W;Von##0N+f0%D3Fi3VCzM1W|WnMEJ=MM3`XivKt=2&{r6
zg18<k1O4hm2blq583m9OrGQ8bfQsfJ7x92<1d${H2!s=SdWv@eOM$W<kHk70abDE!
zJK#z4c%E2YkTDjdA#MtV1um!_gSWw+&?S7Agc6bad|-4S9>~M0gJ)X5`qIDU`>&gA
z{%x4Vm+aGWE2jFr>)RLNt6o*aifD>v%(l>Aa8LM=WC;(C_&-i`1sL)u?I8ew$fM%O
zS!{>oW{V;b5`XrvD^kKFRE&cFN{Wa3A!(|6=}z@S286JOAyecK9+xiT@ZdfnMC#Q*
z?uV$es90Zm<patPMSM?G`j6Lz43J1fMo(5z7xyFlcnVwQ{fOCJ1@uwPQ}sh5`1Aci
zV`x700(61c2pP2TUF5pG5!Fk!_AT<XSH*KC#npFaV{)tfwy{ANYKV;|^Q8AmQ<9XE
z^>sv8#Vt5pKgrin>w#h{i9$gV{<|zf0lW}CaPxoz|H28z;YyAOaipJN_ZADs#sY{`
z6e<8c|9_2u%qWWfPZM%Pr(QXY!l~0)Z4?$y=4T#oJVTfie-eQ1iWY$u;gKXYa?}fZ
zZq}#p`P0G^MxNAG+db~B%8CLI7(h*^K#7h-6sYHhP_o$2+Mly2vJhmjfkyy~?bP6W
zzcfY(2t;6+O+o~L1M6ZjHBtFODv*mJvI_<v$Vfg=0W$>(gg$Wa0agL!8wGhLvP5kt
zX!=MM0x?wuD_I$V(uA@Ie)w}kA@okA&}?BqNByA~MiE6HyYpr1qKcpGoFs|(zgNzN
z`iQ0-g$XZ8z=)&(y$_DeW`K#$LvwOq{9{fPPRrTv@ObR@_`T+~=G@z3TdAxVrAE{s
zK|eTK_pxyZ5fdOq3Rolv1Xd}CRbtX+cbbmD;A@36kf5RkM*8K_Upl)Mjg>uR)juWR
zV--lqp(>0Hm>+@Qhzt$^LX{)^A1Om<s7NdIg%qP<1zQhUbJ8efCoPpaL|8!fU<QSi
z^^Vyivi}|)vo6!|?m`kWG7Mr!5`M{2>YjXe5Izt+zZ+x`hP0q4gi5rLM%r0nP@__h
z{LcP@)GsN7g+^LW4lF3u|Dm;C=-bNek~G_TQ;~g*hY-afs+2@lIV|QK>+&4cAi?Np
zgRIzvK!H%LjWifRfJF#J5=984$Y2knD$qbnHuabfX!s&}-<W`ZT#rSlp3+kva)PVS
ziXrOyf8EJN>>&vQkOUK{KZGL~u?P`JEPLg-uly1OA{sc2Iz?nbh>QYdVTggdUK>Cb
z1Q{YB?Lat_G>lDmU8a?hH|FZQ1%%qmD!u&eUz%w)*N+~78dBGt)Xl2pT(O}vg?P2o
z@~w2SR8*SHVX;<~wKX*~wM{`3nl%)Zl1oXl&FgNfZW7BTiK$sqT4vTQn^db7X3I92
zrK(nquU74L)hem2nrc&RnX5IkNogrcjFnQ-lBSkgMYniTY)K>+J&W`c)bF!j2jvzg
zqjAh30Tj?`g!!d()*QNJr34g@C8)(+-|T1hRfxIcp(t!bIqX(p4uhgl67+*DpfD*2
zF|))SNp0@_E_~MD8Bj-CAA-st@za@B$IVyU?G@F4M1UHGe$B}tTdoC5eE3`J%qs$w
zloGqgD;A#Oi3jV2GE4oi2R4l##tBZQ3q6#XhMc4e&Ole;!=ec%P(ZDmW6@3vh*gFJ
zkR(C0=xIVzUPttf9was&6;(Fe-z&WBs%{*1Gz)#lclo~1(?UB72r!Zcu{S85F#emX
zk0E^6bk(CYCfYxq&p>qb_6Gj5x)SD%l?I}>bt0r>6>)6(QdN@{RzRT4Fw6cfSPUFd
zE164Zf(Q%{QJe}?<89PjE^W-w?3>Nz(rd{vnW;;=a-A-;mE6U-yS2D1DW#IgFhPPg
zfs#WMv=}fFr1U1C%#dJYF%-y6B0?}V!(_UK0C0%Gi)%;(DOhqIM#k0XwQS#%%>Onb
z5g@t=y_F;=fJTBfX-{S;1qBfp#VktOSxX38MG;COsmlh$EhH2`G6Yj_*<Tts-<mI!
zXQv@SxaVXKY6b92gdsTrf<i(NVFH6M{;u>f!Srd!GE@g>h{%!(gor3?m!gb8D&ACP
z8;s(^1CSTF3!W|^eCS)yP@D|W^-A2=SPwgZ?%+GP4(<cHfB*oI5NFYD-t>Pz&3Wy0
zekJ-AY&!c7FiRkYk&n<i;7CCvg^#PBA6DD=ysG~Ng&@+~-(@YR%+U2|OIQklYFSEJ
zMoPq1qQKtbn8lJ2L5%Zcl!ywnVJbi(t_X~dkuXFuD0xsW(Y<7d(~nZOo^5P@VCn?d
zfd$)JS_B!_%^ohj3Sbecpd-k!{zK~q0|-QWyvx!Yf0F1P+9CxDPEUZTC>aU}iYA&G
z4;JW&DrrobuTOXyU?>CApzLbpLeD6eH8<L|BsC>iSSIm`$t%&>=>}+Z-6WA)T2e`U
z(f|Me03c4QT4C6x{Sg}>6%dh7NDP;v1LjsIAm%u|Xx5n{ML;R$7ho2gm(Qv5{SwVk
z2%wQni%OLd(MYbb!o^0A!?aT1#LAekV3b3z1F8Ddz}|R~UPL=Wr)w;Dmnib@PmGZZ
zka!~mM1M^Wa-^IN7I}QP*zTxa1rG2X)QQM5NTK@iodEnFLP-J=gn(HXiDWFb_PPoH
ziG`49<?HPKDWJQOb0|MH+N27uB6z2OAaotel5QkPkN^(lU*~@(*Y^A0R!W=yh5r<O
zHlUkDN0@=2MeIBA2=!V@1Ei0fqt})}2?Xa93ke7Tm=D1-fLr%X&$X?-rug5sbkZhG
zzt-I-$Pj`50s~715H5m<F(ck|e7ykofWXQNe!t*Z%fr6=li@;Udy!1FItHO<chSa4
z%oFj5nE*II7w?iHa|ed|tSIn`%pjj>6%OF+WQn&^Q;BvEJO1wEnhG_4^X>xzF;h=)
zP#>BL0D)u!fv^aM^(6)(ED*3+cyG49gAn!zu++{SCO$+TL2|DwNJ~u15)vPXS0p-!
z#RM7S%3&pf3sCd1>zsxw4$v?zbPUmtn21~qp$bTjRLW4&l%^8~D8&RIzlgB+3@|X^
z6O@J&NHPK>PXw3YEhH#b`2nZ}+MZY`41^zP27-%2B0z4cMIs6tMp`8_5x=GD5&L03
zbrtjY82*gbF)?CcP0KpxLx!C-)+Fd*pd>(yY9PSCcwrMOM-oH4;&-w1j==!+f=>dV
z2HDt<o&%TeQ0;LQ=061wIoN;h2M-$IY1^i_<!ohpE4JJdat~z7RYNAG+$w+ge7L`V
z`=PaQz)6gL`IM8uq|t^f?Ev5)Eg@)Oq)aZKBw6yiaQ}E(-~HyN@x7EYU%yjrZMSkF
z!<qlz)Yj{nAG>lIlQFXsxoi^2B+1pJf#)z-;ezIOKloVNV*&g@QGF5pj1mHHa}M44
z$%ZFMQ@}rj2tk28#@Co8ElT7Al+AKjlFcp<Bko**3K1i4T5`Fc1S;oZk$0Gs-6iPO
z85Kr{OkUkQ1A;5)QmNbkD&h`^FhWEat`2S>7vMMee#g0A{;R+5JiNgvOU$`4^Dl$d
zK3{F?kq}pxcW<J<`_j7msVTPv7!aTsDM1|~79uMC=&GO;gak$qR1|#31R@}(NCEB$
z5Ecl49Ww)9PZP8`Z^m+J7V)V9$|$1BYGS6x`??%e9-g@+BCIxA8*cDRwQA|M+Uul{
zB$nG^WGHG9mzn1Cg(q8z`JxpW10hlPYrgAz_p9cE$#yKtS({5S`D6P4(uczJ4xu<0
z7=Wu3SPB9p1P>_+3p9F(L>)DgAi^o2FgXfLQpj2&m_=}KxDZlE!3?>T*UDRYE$wdQ
zF(QcrD80SB@H=O%o?dR9Z!W$3^t|finlyt-K`ACu0FkU@qQQxE3I!Mx>fLOe02CoW
z<kl8R&U~PdBOa)T=)eZ?N&p?lui}$AnNbGbihz7Ys5=Y*@iU=?RahF$TiUAAT3W2!
z03ZUA5`hu3@*+JHun7PU*<Q^GGazM9189J*4=2ER1R<8B&~f9pEsU=yEJ+9~5F%RN
zX`utSf$V4kh&vSWBRhoPyc8g0p(}CwENm=3K<oC3+G<%tqA`jOD1|UWm<)*21!Dn6
zdGby!sdhp{20&=u9}<V`EHpHPGv^FI6CmA4^id8Y?&$k{%=aOFiZ<JAD5`{#i39bM
z+x%i5@_Q(d>NSh!_`v_70vaQ`7AR7Y)i59e(-mRK1Jy|~2DHS)EI*(x99?q0U1pRU
z6{<W_DP=&1fTZF-#{I=ZP>6U757Z=gm%TYqW?hK=ANDEGzs2$UGrktUxI47HWD1!b
zF~+o!Fy}8nsnUq%XU`a6MhftK3d1XnVLT}ZTT}_bnRL@5cRzV?FqQmZgSh%*qiW%~
z3&U-O9rBsTvMj_x2@4^y4~rOgXqg`KEQn-@E;>_p2}3>JfjL2g8Hy2vG$x4|LyY;r
zL0Bo_+5I4VMCq|jY!L(%s7+uU)qu<hRszDISHxbycocfMmAlo+fQQW4nA}W}k{FP)
z!V5BO;lTt>83%m!9Ph|#dq!Zb@=oP5)eajl&a}P@SZZK=gb)zd1JWHaG|pj3X}N4e
z(d|Q8wc=@SJQ)g?aFpUL;DRBEYe@HHPdjIdRwRAF;527wUJM%9(QU#+wxdf%ET;u-
zWYebzi<4J+IC(&CMJAYZ;-(WE)|L|`R!#`GoE(Dyp$Q7c%MN|82Uxop6A-!yc!|Xd
z3a4}$=JTW34&oAb4uofHTEOT$8@<J9o&xVqj@+NO#G;6dL<6&~ve_!CxRg2rag4--
zVSS3+BYe0NRTLV>jglEe;e$|sK-QEs5+F#$fC@zPfkC}UY?5#UK0^bta$D*Opu}nG
z-T?3yngI^F5RfSe5HCUFFLB6~#FT|Rh=B@A1>7J~vQY<fcZiLMrU1)Z!F`{SxH|yg
zC>oAiyXaUycBndV;^rA}x_?UleZap3>i{x4kKO_{2tXXWj-A|tm@B;CAirb+MMI(@
z83l2qI8_Xe%2`k-g{8A)O)5!WMxCm?U8}`Ff}Fue&k-J~ZyhGP(0|wN8rFZO$NYW$
zr%O1NdwGm3E>=GGx!la3+Ail|!W_aC^!qqGjtQQnENSYZVjrw9|Jm{A*wf=qe~@U1
zFTha%17CbZ$Q*tOhqfqO27@F|A)w&8@}<@k#Qq@uP+EZ@U{q9px>O&o0F6Zz^h8WW
zkZv^*BpoW3N}s~>7ZX)nswz#2i)h-|O43ytv~97r+uuaB7K<e`X^713>}^dY8*2=<
zF<7)|2#pF&7-~TXp%EC6mX;YaC15?<+V{7!dTpzf5sOk$R8}hAiiFGvm{gR~CfhS@
zZfg}@&ZP$bOLzPWT-bvYSO5_}3MhjT=|TlX3D`sr>oS{4TWU5IQksmzW>YejQe{O7
zWs50Ip!qts+L9$RY(=JD(b~#Cul!H^53KxspRfGe9k5vy6TE_Tsoi!mtP6ra=mH(^
z6a1inLI~(2kbrq&k|DHgVx_{3U?m$dR-zD*jZ~_KZBi-Ic^@4<H2NOf<@58LWGWs=
zep1gdsh7==EF!DGimsh0vML<U{h$R1W(1Z9!0-KY#^9(Dp$f?fSpcEQ*8r)5jLu2M
z6gQmn<d{WXXy$;VkZ$Q3%+u#G8b~)($1<R|*t(%io84XWb=JE&lzhAqhX~u43jmCO
zgx6aO3TQ?Zv5Jr}bnAzI{%?MA=Z_t!%TGET42pl`L7;&HyRGjGC-%qFUD|)cA&6>=
z01vFrEVKwIyiX_b^jV}o)6F#q7MO_<V#2~s;MwtD*cL?^6(I#6)cymmtLrJXxBGdm
zO(`n>yu}4%nN4J|sUW-$jG6uc|NsC0|NsC0|NsB`|NsB}j}(32002D%008#;fB*mo
zcK2)NecnER0000K015y|Dm|D(r72%=r^$u(00w{pfB*mh04M^000Mv^1-<|%4yhjd
z?sySYL@GvwFshqiij{O^koj|M*+7eIl=NG-KJ)LM2YZ-xeVA024tG|;Y*nxY7TIa2
znH>9^di#_sS8aQDTRPo3edt84YwSMnmfa|0?zy+v4_)2k$f}^%TvVrSaobCW-)q;p
zp5I?~9e4nJ0ZKRk2W{B*!QwaHPgJU&_d4gD_qTa{z<L|Uz2E@lKzrLl-OhZztK#*G
z-pjhKi|e=FbKd}J`GI`<H*a5XM(*z~4xEl}v)Fkw4)}ZTP`>WRpa4(`2Y1XKzP|Fj
z2hxBJ4<9!9^SiwEVE3)>Z@1Um>+U_UA5TKwa07E-+gnV<C2X$Y-G(~ccJ<H@008%$
zzI}Vt`|Z+AZ1}i#w)eBC?sYq>+MCz8SGel>(&sq)&EWzg;yuvbod7*iqrTmH*~r<2
z1E6I~+tamTn)Q_dy8G{Z?z`j_ZtnI~A5Gvr-Q&1dU9i*dfB;+G!1djMqkXl+)>3pk
z%=Gn-R`$!V6)l#hb_(*|_8!@L2cv)hhOmwH>)pH9bKQM;@T!EaItmD1eSIo-yB7;!
z)7vLoZ+g+u^Z}7dmG{;f1L@^W7q4xq_HFk)m*0AD^E=pl`u5_{*}62(ySwgln&J$d
zC2J+GXPb`R?%9o9pxV8>w!jCF4?xs{fC>jd000NO00HO}Gyn#GkN^MyKmY&&fcKvt
zcN~BK00Zv8dM#iD4DYkOmj;8=yEQ>}0MIL=ka;}-05k;v2A<do_IW-40000017qi{
z<R4ed-J4ApSZjQIxY6sSXahx4eY7F%yX5V?3ZvJ+A92ordR`B{-aS>l+LUi^n;!QR
zeBNd48ScdF``<i1?*Q8e(j6^*t$l9pee3P>?)%ya?)dL|49?w2QTD>GuT=WBuD7i{
z?ca0jcC&-N`|o_b&fU%TyPdMW=XLkjUwu4f_VoLX4?Wr6cKWMe)jfRo*}nGc1$4ai
z@2A3r?yUP8)E{$ndIpo<J$HZr9{a5H*LZfp=eB|7a9j?(0k!wmybr6s;2gd701v0Y
zE9JR>y>{FHdI0hYDwNW9bvmjY1s&T!G6U$)=sjsMi?^TyT?CWZ3INTu&^|IAeT{2c
zlG?Q+5S4lL@*elG@4nx4?ezC31w9ly2Xjb$*JPpg?W?a_AyuvR3Ow_#Ut{m5d+uLj
zYiqf+saf&c0*7~9?0UWK1!!kvyH9qWMi;itwJdtQ-n}+qt2Id3?{6aUwJKhBW*xB3
z?%i43ZQ45FQTAi6B=!%z*LvIUdy`oQp5=Yp(h6?g<I<D2-JFwbn^B+>zC7qBgtY0t
zndW--H-bGY6IZu6(|5ht9?!41*55OB+6$99HK1FuublI2XScSXi_q_S`^^E<KHn#n
z(<*(v4|`X;jtur4@0@+@_3yJatGC_v)I3vtcO^^jyRF-U-on+e2KE%~x3wAoQnU`b
z*4@XiOISYkzQ&%4*8ATpJ@H<*A-kM?YM)OK2V1Olb%1U6SJ3xu53L)<`k)8P?@UXr
zneSfrhoj4>K8Me+pj+F9h4yN_J6Paez!N<H0O<PdT1fj=0j=*lje2m0YOXEU3%#Ou
zyk72lZ1)E<S47*J6g7zM*|%=aRauvAxaQuyroCR1xz_vbeZKF8U2gU_eRq~t$+BNJ
zzB|hCuKPXRd)v6zQnXXAVs3kShu=G%RMWY-(z}V8<P_sR?Nhs+b8Y6f(X^M(p7H5y
zqv7q}eD&Wx?>8pFMFUG$q0VlbCfe%a>$Fuu^{+j=zT4p2J!P%mWOHgIo#%b;k9^$P
z$J>`}_Xl=!yt;XC`ZNllHMg<byMUko0036BNB{s(F0c-on$U`z4@TR?-~c@HtR{P$
z?bz%w)7_7HQ=NAAyWYZi$N|xlY~8KtefIX(-+23gcSt^;RS;{VO}lZ~X6|v<2q$B^
zci!Ia-UCv-eYx)0cdqPu?>D`7SW?%zO=pg_w&hjs_S5X^x4D(`#>b0?XDk%WLCxXq
zw5{I7?rW~$)n+rc9p0Yy($@ENA*LNxwO?J=pL^APea~I@ZK%z*%Xs@W^^4c9d6}rU
z+wSA&9(UFE-Q4%x)c1Eq+SA<UY5-h(yS79&*}Zd|eLK_H&9?x;?cM8DN3SvK)_dLs
z#;2#5t@qbws_Z=;Uw!U-eBTdz@0$B_-nchiU7fDw_io<BzPTOdgYRz6+=nIiH@<go
zs@ml3$y>Jz?cSc6wwHb9+}~^AXaF+$bY{YP*gf~Wd+ZfOG!;9$=mXn5)o(3m?wz+o
zumUO-CQhBsb<cC#k579#TpgROU{0>*am}@<(XAS;!0F6XT-Q0nT)VX0#j@R7x!(HH
z`#R{fW%l<6TR!{d@4DsRZ@rIio!x!kH+1{$+4Em-da<{C$DQmf?pCpN&hFdE-o35f
z_b*kw?(b95ZO9b!84{pG0BFUwH0MGGj3;nyp&NGY+q=5v?(6MdyWQRHJI%aTXB#nH
zrl1*gI<Cux`S-9|-LL=vP*O@3&YXSkb>fU2Jr~>Aj@P}Nnt87-me)JY?YSQC)IDY2
zZu>pjx82;v+C8v#>$Ga?*A>QG@)^=C5EK@@nX$Vw0Nk9n7aivNK1V&ML=qgf!$OtO
z&{n&(Eo6Wl%+amZ8O#A!KKFE`dTNQx!M)r7r%6fX+}+yiZ*F#K2X|%{JA2$b)Pzf|
z&}yZ@-PKcfx8EHcPpak68>e%k?6X^QJF{6XjU9Jvj<f^oT$d){J!`!?-Z`<<oX=y+
z+Gh6U_s4y`b3Ux`k3r+^-oxCpP<<jm0QFuwFI#mxJwYfyKmq^=011!+82~^8!f2S9
zWj26HdnTHv={%rHXb?gOfFUq|1jx`d(3pmZ%~QZMN`92{B^rK;dTM%_Jxq-Rnkf*7
zCX*9D5j`|$6EvEs`y)xTlhLYvsrggdr}~UdO;0r-KS~2bYClwI>I5i~5P%>713?N5
zgusN^6#Y}s*$SVe*eZS|De0l0jYgg%^bsT=AQMDn6!4}AhzzC_)SsqJDu0Hmo~QaM
zex~&)?MBlko|8>YPterDk5fSsLJ$gIX*3!D2{u3g6GlpSH8D>>H8P*2Jt_J}qGFz=
zjkOcNhqeO<5FzT?poPEAd^Qj6fM865f<K<YNhnq!DvAn1m$!CsoF>EyCM2hSn}_i6
zKUvwtq=KS?BB+Qc8i*5vFKT93q6);pH6<ttfvPA1NVVKHLSUFzkOoyIV7SGmVnjqR
zLsUeeBS26TQA9yX5^ysX5`tk?7FC%EA!H&dqzV=pC>ohUk%&qtXo;jsiC|!g3Yelo
zW?^P2WF?^j5~^YfN{C2GK!}QJASjs%N@i#E#zO!E5`+|z#GwHpMH2);5P}g3G*d|=
zq!AJm6-osq2@u4fNT$FAE=*LV5R5}e5Y$8gG6X?ELX?ydB4RR1K`9ae0L_@-69p*}
zm=z2&MAV{ioS3&TCQ7L)q5=pdC@BI6A}I<+fT0Fp0-8ywMkbJg6q$&K5+Ndlfr45J
z6=_(aLa0@V0FoFbSb~8W5(-j?K^O?4QcPG~Q6OOhD2%C!NfFW-LLmms6ADQof*>eL
zK#C=a05S&=!Z8)bK&XN#Ap;2%Nt7ZAU+>`YkONR4P>EDP<bbPasE#0pKmgJ-00NLe
zgdor8KA+NEwOrY-Y|_@zgl(v@R8>_)OBBV0hJi!;riQ}Utf^JDu?K<+C<;wRi&RCG
zfBnm!B&C1#W$Lns!cl-f`a2XY1O8g&EfGOq@>1(YOL}XqzuKJVG*7G^**63#H6ry3
zb6XTtL~1nq^%yGhoVO>t%v-QwL5FvOP-YkisXiR2?%<V{g;D5us<^VMHnWtJWntDR
za>&w*L{MXCWmQEY(fmv+5m7;6il1=va@;emOdtxDEJlCnjT2i)j98)!NT4W*TEt?@
zWTK)i5TQy`VOk;xt1329v~8e>RHGo4s!~`AD`-FerIO*J|1FhSi(br7V=%Re`E4^1
zRpV9ERkDbP(6t&Ai6||)-D)DLQkD!B6sP%9XXM>&wJIVa3nIoeZU4V-_CNX%V3zDG
z9>8~0?&F|Be&74~3v0WU9#4LzoEoY=kLmBjd4@3A=rgoof4KiYyZqnh|6gzVZh!Z`
z%*yBazuSrb08arw^AeuDB=D5O&zVDXilELH|I?cb5jY`4TT2!(pYGVt;y+T&!;4au
zC{(tw7?a&7WT_Yhut6mVBDE?}64X#DMWbMbt1C4|3sUT+h8k(D^8WGA6hPp~)F_Bm
ztyCIWSt?m<Evk_>M%+{d3u>*3m6R2OO0^0tr4?9;Hrnxkx?+)Q3^@dI8%0u!JEale
zSt=~zwE$5>rN*eb(Gr!t2k#i%sEbmRNF@-pjS|$hl?iEVSfgd43>z9=kJsm}ps{*o
zwv|$hLa?Q^X<<++7RGhF9u5%dE6ZxOE$d}wwp&3>X@aVh30QT4i^MA$9M!s!DtUP0
z*H@gz5r2z*Z1Eav{MRcZ7@(sfxs9+x{_0%*hW`|@h@7PnErK<{uGZ^XI#>7Ij#X<k
z)mQbF?`&0z6pu+tM!?|}R8>_hq{K{E;{zze_st5aiztd7Mvq)oTGeoD!BUN_U{!4;
zBe7~11;o*k#KjVtlUhrvB?V)eOj3~&QMoAfVMGJ&`4)e8PZ5LCN(&Rk8M51}wbUtT
zXtY(Rh=^vnQ8ksRwM$xB#VJ%9t8B><#!@!eZKutGa|L|z7q8#Y?G6-qZCZWE9)J7n
z@1wi;riVBx>JRRhJO-l9oFT2n*Bw&hhN1tV_k7L;|K94~8}j+zuu1>F>z>2c97Au^
zGR~nO=Y*1mg(Xu+e2~U3kE00+2adZA+{Xy<9%^)uC!#`QB$7giG18Htv4r1o_6Shr
zvZJi$3NLCNzbQr~<BJs9CBMga!EU1t!hZ{D#oDVz&8s<vvZ?M!Qu6RXodiKL(-?|L
z3MUD9o7&CM%SQ0vQ*1nV806;S)Zd2cCDcJvW0eELArl0_Eb}i>M7w|Us6X-iU9jQ)
zy`F)lvSLdw7JB%L{&OcQI0}3J!s-P7daB+oN|()XdI}1PDvk~aCg1jy`~7_0Mx48F
z*!WNVi#7l6s6*oV+zxL_;e%ArPf8xQozMayn7O7GH!&~<V@O0S36Pc(R|;4M6<3C4
z@l>-?L*b~ZA&I3<i<n4E*7A}`O|N#NKMD5}_fF0Cs`E0@lUfMXxZ7Bp?58F<MwJie
zZv1_54l4?BQ4ty_q7+F$rFNOpXGL{mP{yWzT)J#jWkE9#VUAqH@NMObZD$m5g53vf
zGS6d&#)Y3<{U5_$rR(aq(E2Pp3Q^Ivue96wrwS)6ycLJNEYXbS%X9=%ib@$-SSXa%
zCN45rhb0P{n@Vev$f(G${2#m7hrau%!W1P(8c5I#!qVXgz{(R+DFothnN+l+c}al|
zDR_#k<G64hP&lrIT@{#gh{=}5im(*XE)<xXDCT1YZNTfYU4u*^zI#KQk6h$y4kkIQ
z%Id|1p>wS%l?QBOL`RMcDaO>pL1x;P7DTfvalGDg#j!6)o33*M>V+o-RaHl-b<P+I
zrn~v={=TJ1!?&@AN|S(EI@~6?g*7o#QfOk>VTxQ;8KN6VF<pYgVQvhSn%ZKlthi2D
zf#Utty;FdSI@?6OZWtGd=ao4xGJ?}0P^_)mS%RBlIH=s^S32PlyIV~_rDiZD136l2
zMNCnQb{3eb)=(8oY9f`UtCLpDQp6A|DXB`-a~o-j+7>vAQ5|%_W^sijEh{M&ma>#8
zWmcjrwrXZNHn=QOqp`B8vK0q$=~wvgd%EhB>`+Qu5o(M?Sn6F$J7Cr$8<vxAwV0cW
z{9B)c(dOPy0v;>Y1Yvu#oGiS&S8C{93^J;w<bs&Z(<0KAT-fZwsijDge6Kme8F6V%
zGbcj(;LP1(^BkP(8hCjx3T`;Mw9rgr2SORZ!2Pu8;mXkrX=Fi`#VJ!^DM~Q$xx=2%
zC|WtO0+yANjfx8qw7}I8luD|LiY0)unyNIqRQZW6N*0D;&O%u)Dp_rdMx|8MOkGBn
z=F4mxC5fG>s$})Hx^c3|oG$y$Jn;3=PD@E?da{@Nc+1Pnhawqmn6PPD+yg*nw#pY4
zis@5C&}2cj<CxIVfN+;&sW4)WHk4A*jui__ovLF>GbOfzD507~+Qlf%KxvA#lVUw`
zoaWxrlY$~gimPF5lHPytbB=8jDic!UOSWBEXjP_6Wg4Y69D>|xfo!d1Ej!NOn(|PN
z5v^d^A!OGYX1JDx*0mH-X+pd)&T>0jjf+}399gNTb5_x_fW%4;YPN8;9yw9Z7TUCw
zTv}iG_s4;0)OI!c_uJPDqte^p5^PZ@RYg@*RaI4GUwaN5X~;BE?7<bd)}`-ic2lVE
zy-oY(0%8{$5+aNia;B*c5w=Rol^E<0sH8L;!Ym}Y)dgj26bn>X7{%JvgCZ79lx{F_
z{%9v$saerCSELSg)ajClaOSku)<SKXy0He)O4DIx%hd`RTDD3pTBWveGm_ndYFgIP
z)mvJYg3`oTmXxZhrL|R6Sj%lKTWvnajL38FCNOq@bb-swAY9zxSg?&%R7Q~eoTn=&
zacO3yVnJYPS?jww#G=U-6toH@l_->_K*<asVjPq(%tXz_O_-F{N<$E$*eLZ{L={Z1
za}R~o0p9EB&Jg<#Y9CR{1%y3#Hk6n(0l`Auw2irTV{Vp}+FPm%imupQ9EH;D6I^1-
z?Q0a!)TmiXI?{`Fl@nUpY_nu&$2J<ajB;Al)F?L5QjT!zb*ZakYQ`gDD=NU2Vbn=*
zazMe&sZ|k;UorPBr05EV6^$ss_vvvUriowdlK*5QrX;*CamJ6!3PgIKJxoRzK_@cp
z(Z{hQOaJ?WiScjIMRv|-eI1mFkTsKJ^+TU_CxY33pOYGSs4FaD??lcnwAxXES~Ap8
zAqT@euzUf{0Z>l<b_V~Q?f$f!XTkBLq6nz0Mszct{5KgCtmVe3`O6B4S(t_K7ts7&
z!SJ#Y&xP*bnmdfMN^6UQjwS?1YGE#$B{atWb4@|ef@Yi=7{!(%B5)igF(9lGatUCG
z7Fm`7P*FirQV3gQ<iTKAQp`j_g&3(|AuE`=7z&o?iELF?e_C_M*+<v!^SAkbFm`d_
zZ1s=c*LA-kZ8&$MN_6yd8*=4bS;VKqbn~mGp*u+ATa=1*_9lV{Y6SP^`2QXy7Vhri
z)!ry^d;Pj~9v-a1I;`vyeekkwpXuFq&Ct@&Z=>r>bG9n=R*x@ZHCE1;haiGKpEC;>
z!4UI^Xdm@p{)sN1^d`)+h?i;jBFE6Yv!*QTTvFS8lasEVpI4<rgVMSk3bcE*>E++y
z<li1qhetf{so<lcih?1?GfYoP!!kI^|1KQ5DdETvO!DHMuSwJsl%qFhn|8f%>YTb`
z9Oe@k=LT}|q*g_ubm)u3=35F0>KuXpsD~tZej-qh(MDM|K_QX)ij3o{ir#Ma&mO%_
z`{Bd4n6O4shWI2uYtQum&Bz`<K*1IppZ}H%)d76ifTAeA<le^Djl<)C?11*y@?YHj
zB}~Wa{sPX&XzO5!iJFj*{MnT(^^OwBArR!@BvT_Y8M(1kjVV-B6jcnxP+1tL2rvW?
zGqjY}q7_m_EL0RzMNmW~B`lFtOj1-u6qH3p6q^BSQRm+&oeFyYWkxX~LJ~=Tg&evR
zaN$qrbSi)$6`y>hAasWL(77WJrVc9sBQ|t5_x=0)WP-n}NDw?r{DUHS9zhsk0G_G;
z^B=~F5#Aq>``MbRRaI40M6(!63r&luYhFa0<={&J8586s)(LrX^-^*#I9j%Y6`U<&
zAgroZ3T+218m)3BPH*vlv;OJ-eC#>S9GvUFAw<{A(-y!=3<|K~6uKcQ7@L^yI7EKc
zdN5-OWmH(I3`>D@5HCfS(l)r3P~^cxGdgn>Sc-(EF^sm7C_2?+9OC4rH8Hm!d=Sh|
zr!1h(;+wE@IuVwEL!zdViNRGAv@5lxj*{LXnZ@T*o$xq4L1~irBPWl_e*m62*uD8U
zF%C{H46>N1Wlk98mxwY5QCkZdme{Te0_3quXhZP~ndOPYMVEuQZrh*Cs=bFhdODP$
zZlO&=q!!y%1T3+}E}~RzDjIE|2}&C?B`THIKIaR<y$FasV;tdJH0CynUKqzHaMG!H
zOx2=lbCxX3OH?=`uNZNT)O8j!Sl$X~$~4&0s<=xK=B8F0LUE5Yp@AhSMv5gB8Flf=
zQL?sgIPFg6Ak+GxP{IO{o184O69P;%nUYZo!5L8;Cs_mG`8hMflc3&2=Yq~^-DPxx
zZAi*ksW!1i1Q=T!La-ME3KYi9Fpi+HH5)XI94v;|EmKymg(57lSYna16^L5xT`K93
zQWnT9cBW#~62e&!y6vcHO|i1w4hbqnM}*~L5B4^4S<OP1zHr=I41r}9UBcvf%wZR0
zxeAk1Ll)6Uj>yrbn7WR!T3bedKARbv$ibIT(?Ybbja^lT8W~WnyG)BgE=m%@VF=PD
zVimURsxVb`)?C8eo#ULfK`m)jD$7d1R*kWk(m2j@ntr(Cq4b7l0|^Yqr7vb1VzWxY
z$z}_ft-!H|j&mn0)e&G)sa7Kd$+cx-QLt{L3l<s#lCr^R2QI@R3^_STkmjsnfSRSD
zP{{l8|ITo|TgzDr>RDbQ2pdhWDT|C4wupb<|I5wA=^WCw$m3vem`Y&Q<uYSb#WgcA
zj8%wd?))m6boDEGnm965K&V)hDmMi*GZc<Zvn5%pHia{`&1-d;w>ng{ql;^18LWoE
zbFnkFw=0!yniQ<X3QAyhF%gK#m|M1{8-p8S!7>HfO-n5ub~UO|7Sy9%W-&2cmJZ6Q
zs*X0)M#EYnSh*c?>vI}X42i8YmD+7e$jVs?=W5+$%tlPO%4*9h+-*y1t4mx8v54(y
zjLMY+wnstMi;Zg=5n~Y|60llE49;_hHMpfVy2i^wTVhLP9iyrnEixI^85X&QyBVa^
z*Cr_E8C`0k6f=ZsHscp;%G@Igh^3>fGZRWCN*S{%(iWv{l8lLL%Hz!!8Rs?UHv=tD
z)f1LTuu&3Wibay3)>4+sXs$L)(^D4AEtI0cuC>FgC|iJ~rb=3tT|&e)YS9&u6&VU(
zvZ8Bor8ZPp8{DKgV1+>9#}ie$(*;F{Fo=q2s|@C9-EE^dY+)Fv)}W^v>z4(#xUHrW
zCJDsjk~WiqPx>t(%Rv<^sM7M6EuFXe`m>_Pnf&OFmysdUQA)P;tTuJf*>)1!H8g80
zQ(J8Y&{}OPbs}Zb*D#|L2-Fg{VXk)0(3_mX@Z(s_Ac#ySf}BFUIc=j`Rpz0nvW!$r
z>1mW{wv@a!2MB$)c5pl4!%F84a$y|hTw$2kD^)RyPpLcBEZ{3x3hP*+A($voh)_a;
z3V^XzDYcN!#>+%@>=q9d#VR8?cj%<#55x=64z5|j9c4p-Qj*#g2rQaRilDHtA`&Ks
zgq8}kOfan`1=9@2&zDNv=yKPErI=A2j8wIyv}R1=wzRg6NF|!f7%{|{0Ro9oSxV1?
zlmu5COp@SguGLD*X<E|K%WPO6($KLI3~a+@h=PR~v1Jej3X|O-#N}y0DmD_C%cDk|
zFx}5xaO9y-yKNC<P>N9-DG})jkUHfN2aV#jBow<_t)&=b1^;3OLS!J?0d1^>83~YP
z0l<*KDOoXeGBYk02_h9sBW$MB%PMSCsbPe+XC{|8n5Bp-s$GiRLtUmSYAS^*p^5$z
z*5?FMrKD+QD1f9~><Ts832KC~g-BqjWTbY@a4;6%h}CbZP9lJ!hY$*t3UpFAY(V_{
zIjrD1fM*Qp$0;9$hQ~^+w`OWN#K1ZCU}>pF87a%juxpURTOpGjgxi)JFl=1F$m(Fj
z6IEcd36TpBEEPhoxK41$FVB$5^q&-y0CXa7w_I6_xuB>OB_*&iok@`xRN9zI+YF8|
zi)dEg>(`M)oO3mx6ohCXh{hr#io~UiDu%RMEj3n_S!Sa)Gi@<!#xBKBK{2tPH0JVH
zb-9Pxvz)rrwpTGqw#AKA7N(|xCTuIz+nk2BMRP%RR^4DPC8m<vaAMIlEGbF~3M`hk
zO2u1oqb&nc$fGSRv>SKdI77gP2Z9M+mVhnWRJRm%O$%lknRO9MZK%P3mokD13nLmL
zN{UwsZH<=5+G`amN(@?@YXh{MBbrW|ioILJx!|<dS=6Nrv`X|DvX)X%Yy{flGOd>}
zZ3+oFgK8zC%fZRU@w9H*WingCbA@L#(Tp(%H&XnBB%{HV5sFzv<|X_uF=sUv$&>JG
zg7WTV+<?u^p-{6?wq56tIL?Et3dOawM3hSsT4}Kofl6GIDMag|uDP#BEZiQk&2Vl6
zV*qytBve>O^PH<)8<=F|QG!Di0ZSYQ9EQgkHw!~EQBBpRgqoVz$)b%>_uHuw(M<{^
zG=>ntm^73bFCcPa0H<RtDTo$Sge^6u#VAG+t20ox=AoH&E3^X0fYee0sS3a|QdpH1
z*1#A_Wsp%+5kV{xt%U((w4kN=Qh}*ZwGmVif{Pe~4n)^SGTN@Y8k87KV8t;Vuy<IR
zsS1b~V-NX%&UeCyNwyUyKmTdA-#LhWzFyt@*>U!Kn0P{e;V+-?Qt1}3T)O!or7|wb
zE?y!jIO!w#-XAKO39n~=su4<vL6>q%kH;mh0!W6mNbCJD22l)J7i7BkfAxx#QWh}e
zY1DU3EB#bMB;2Grm#cipnd)4ydhS6m4*P!XgU(xoWv`TcTWM^E72K2X)rZ1LhG$HZ
z5uftK6o+T;UH{6Dv*baOT0HIBzkd@S33hZsgsJ?ArAs6a-9b%tnS9zF5m<8C-Pl8a
z?4#R@i6OFxOA<J=h!kq6W>pzz#!)FmJ&|N(1R_-`P%;EqM8hc@N4&eAVMLHVhjmRb
z`cE=G)F_>%A%zZ-O-hI<Jtn3%a3Gq*k_09&CK7bQ<n=EOb++UA#^yBRHw3iMt`M}5
zHGkWeEOZhF$0+9iZ~XOQ_>y>Kw$|E``k(mFz2vKOQ-`P1`$6fa*>MTXMwxl}+Zke5
zOkDltKPO11|72V|#fk|9Zqo!zV1;=Lv3>OGE<cW)p(MV>GxxZnhhNk=3?!ilN&EFA
zhg_Ev1i?w^6rr>yzp5hMg<=GdgYl*x2}}5&2${quc6FxH=Od9>L!C*&-8&YIC=}r*
zXxKTl#}QQQ@;pPqPV%304-DY$g~T~D?@?~^;g-pH5P`~Pr#kx`bG<lcoYI0MURw_r
zy*Cn%aR5uYr6e)-v${k$<tSd8iZETe3N-GoU3Jf|bEx%Co~OHcb;f6(MaM5j*sM~W
zb5%~|GsR1g@iNkkqLU_M9hIi1Sga}~WokNtkY%0SgiEsz3dw0?@4}U*uPJ<WflR9`
zM&0ipJob7Hy4qfN(|Ek<`1*^x4~eDgn;zC|*=N1=H9fjE@vT-UR4t;?(5N=TqKgy}
zgs74P>1Qt=f6FORm7cuArXh<;^XV)|pPq^$IZ+1NhUauBMlHro$@OWXa8yo3K9!oj
zvCU)5>PdRN-KzQ^!1)vDHAn4$$?L3=c6HdsR3Vut!S!pY&&A`6c*?<IpO>w<Z5s2t
zJ}(@97v{xeScrI34|F{~JawtVkvu!RLRX>DA54$$z~QxzosW`n4~c}&O)iOu8}BA1
z8&JqdJEs3)GpvhTA4PF8{*+?oGSaY9r0Ed`37K|le*{XTJ0S^+J3D_`oR3IxL%L9!
z@Kgn3KU+v-Nm6E3KbV+aUb2{{t?9i<9C|YbYY!Qkdu2jVV}+)4$DoHy5%yjrrl-|8
zl<2x~oQHNB-O7gP;m&-`w+d}061S^2z1!s}pq^>R!EfNDH5(N3PTQsByti`Z4x#Ml
zz|NdDg}qzfIl}VMs8as@`SPVzhnPvv#|l}vgvB|ub3I$PhsDa<CP-0rOO+}oO-6Xv
z`JOY`pNHShUZ<=5gUI5bQQ_x|7cFViQ@p7|D0+Z&k2TOsp_pyo4rJI%IGHrI+Ow7>
zvZ%z1(3e?L`z$J%qKY)5EaEgbtvGL8Q{>Ksb4%)7>&3Xg%dUI2dzXy$P-0SJ*vKlK
zVkn3#R6Eo(q$M)kDJNR?3X5i|Vg*T{6AL4bb3H@NL*cl0cS;%(A$;ZuaUyCS48y}d
zpDA3_ysJr6(GsM)r-tq78D9=MynE&NJ!szX-yQ;*l+G0pe$vjh5$d?}pP+81MW@rg
zcV1O%aF+SL+PKF#&Zu}5;u+p;6;22R8rG)|R&xscH0w|8(!|uNNP3as;OAP4ZQ_{1
z^@s>XyptTcO@s+ppuFnyJiN+hl94Oem^RTVN=)eNi&|Al-ree0h{KGUqt;qw<V><F
zijH42)Z??UNk%2oK{lJVUj&I69l>Ecq081d^x5aksqN>^m!i&^tykd9_I*0%ge~gm
zC?2I$`7o80rLv4tB2ttTMzE-|LZKI=D5&DeGrOWv^%(^PD@8nm2qh&?xYxLUs`biC
zS$jhv;7(e(1q^pJx)@YM_i7yKk!u#Z(=b}?etN~3=B3niSq#ZojJp}MVQeZ^t!SlX
zU{xyu)kO;jG{pAKNkmCcD6o>KiN>17(5*;NMS)KfWf2%D*8tzcavmQ`)rsHn(9Z0+
zlO)QSjoT^`b7&t06)BP3-Vi0<@ckdpRAqJj(;4zRxB9Z&P0;I3<Hzlt%Z=Gnyv)F`
z?fY{8Za|U0K9l<z2GVt%D4J7@S$fCUCSj$Bcf9=+Uyd`k&afp<DEepcm#i0rE)PtP
zCMb8qvx%5Ym@ui;N43M|-nl;iSlvC-DVD#<cdq(JH9*$l@N!}V^Bt&iflBbWs-+^u
zb9Yo*sMT#Tz8%jg$f_J*u|Hifu4O?*J|(0&U;UwjkKJCKs~>sU*9d<o(Vo?4R7378
zRFN1~b~D*HCw)>*lZsXYX>EQ7<-3UriY;tpP!y?Jl@t{fjg|p1RTD!+3`Hee&fMd$
zhC*ahx<W}ZnR_N?WKkZyej($p|H7AJK7F^f<Hyb`&J`GCUP?Y%k45JETO1S6JsfMx
zCGk!r>zjkqP{>s3*rsf#SyH5&Wkez$yzvv1>s3`#Sz+@%Q${BXDuM_qw%=yYN$7uP
z5BxWWtIFfe3S?1AmA+EX)7>Jm36s=Cc0?sD=hNdUe(HIrRcFuj{(tT0{CdjQ)aP~X
zDdN7;2+lci)T95VNR-`<?I_H&FAtgG@ZVC)1>xN3N2ksxPNlwEI1c<}uM2T*;n-E-
z<vxGYPO;{g$*rGtrxLZ|p902NPhQ>WMy4V#&L$9=T_S{1o($B=IhVOYcB<3G+4;R1
z?dzO(%Kvx6uk}9XLik~Qs?UhmpI<xV;+?EZGFCM`^@%gt-?zh%;s_)6wfRVFbcZ+h
z>g9<-=!hXW>H*zCmpk*Qv*pQ|nb>mGPpCs#Ruu&lDiT5zIBhv8&gdqti79sMeyIHy
z@=FTO>2u+tiU`jqHKp!lUV(~93^5*<{j0Ol8RwX13SPCd!}$~_9SOJDhX)a=YB2LI
z=dtw#!;Dqp#gjPvl+Ty6J2KOxBqR}U6g@fh<?5Urw)RNRw+HVK%8Ksf$|Sc)KY3C$
zu1s=xejV8{&NpMh%m%&Ob$QNK4yAl`Mfuu0jK@icf!O;N)XWMUrJGUR+46@LN2uzA
zNAqmsW?C|a%#(zg(uijJ5h;TFL@|-Eh-{_~R|cw^H7v+NP=^Fpszawpe04G1u1e?A
z6-X+*S)!&b`bxe&@~00E$fXtcdh_h5x_$bGPKM>IB3@~7oRPB-n)75c&LjP)tdWOc
z>Er%V&%AC;AYn2QJ*}fJL$l3s3N*}frf`f7&Qm*~(B!M<Ff}tey-qW`Yel0JP6=*z
zYDFX;_(tj~8AeVTFH}bU6NatcA~A_1F+TWQy$S@WRaIa0p8WrOKPN9^;QH+ktNJ08
z-B`Y4_UL5lENLp<dOo?^k)WuuEQi4gBMgv_ihLj2a*&P({~~{9E#T<}vP1>fg&+I9
z7I{1y_*DgxHZdzS(h<kzSmQ68%nT@tUd~ki(^{~m?3U{g&ZN{IdFi><<xs(RD?FG~
zx2x77`cy9;?}ltXm~}(-z{{H^&yucKG^*QQmk#UK35~n)nlt-hqYgK}Pu)Fx>7>eO
zN&Bx)oUOU2{3L^*&ap&LS_YKGY8e@Smow|aD48t<5pqTcP%o~pU)9Dq{YBgHUGe&s
z_ro341r9R*n}2ToTYC0J#Jwl|&xJsLdLs&<p3kTIKa+RX5-0fesV{xz=!FK9Y53l<
zE;RktJBd7|$tUiO(q~C0B}1akHeiR>KSaCs_Y3=e-jkE=^~>18^4|){hx~9vCM7s|
zc9Yfq-{E{EkCvni%eLTfwJE+%M!obIK_Y4q2!y!e8aY2!AmRB|4up@jIwWX%!DslV
z9Y2cn;qqaeXLsetBBBgL#1NWg@bkM4Q8eSrwIJ~>YfY%cZy4LXjysIIyj({PL=Ji^
zC=(}nYyOPgdMrDJBt)NYg*p7zeTjhw;^WzduLyaFc=dLLBgla?1o}xAmW&D?@wcA$
zyK&1a*)5vT`7*OLui4_voM-$09iM~GU&+JDdTZ%Ab(J5(tA@g&#ft!<9MdA>-He9Z
z_5}SH#$5~+fklys!l_|x;Y_=FeaWJQbV>56E_V6wgE<+qeYZRN`IJzLm*-Jvs$=Bj
zw0aDsUjKgN`l<9DmF25Dh_xm2`TI9%*Ly!_vSNdG>)Ez5yJMY1qc|cF{dnvJ9Y<_o
zvTwFS2$4_QGcS{naRf=Sif;1sWOL;V)T@SCQ8+w*GwJu|;odZ(87(aTODpYR!{P6`
z_0Ia{PP?JTt2nNBYt1E<8CP-QY5$!@zQ5$gR&e6MGpU5?C?={3nRNzvtG>?IIlaC$
z5hKcV&EG=4_rCZ|M3hjeuiM{Fvf4gAyRC?yfm#>PPfP*kAka{y0#FkQB4n8!a>!d^
zgzW-OH6Z&#pouz9ufAn5d8(_Df=)7sEH^d~Op+{KGFxOSvUb9t#d=_I#j;T$TE#0u
z9Z*Famvb!7o?iP{^M9kez{Au+1(%$;KY~D#C4FG#Hc9#4-+ZQH+-XG^Kv4aRj4#|G
zm3y=3_55^b$`S9vtN36j7p=;-xc;u^KXdG@+yB>9R74-)sj6$szw1u#+IT*_4m}CP
z>RD*G*IX6r2Q$Sjn9%y}FC}LiLY{UN=oVi0XsR3sEIk>=3ECZ?^pY*1#pTl6;P5u5
zwAM<E0!l|?$Aaf$bX<_^I-c+1VJHyu4D6{2FyH5oY7g=wkVk984r&Nu0WtgnX%Vjf
z8m{Az915e7xLNAi3Nj*`(9&fnq`F&Fuiw$r^cLqdZC(H4!bdbDZ_jpZrnGjT$kb`r
z+SxX_na&hf7;T474z;N!O%)Y^nB;qb9$5u<5uiHE@o<tBpdSGtPhH}Ct>S+fYoC^d
z7<)2s217E4!4(<qY$ZMSTb1e+irCYLI^;ghPitZ%Q>3HTu&J<9&aS1fr<=846;)Vy
z+I$N-)#{BtUD$9Ab+Nu2+8nl*<EWgq8R(}&Z8I1PD8TMAxM5jZ1YoKj#kTIrd(lFN
znB_3ihJD9V=@AeP8lC;K&H|_O^w(tOIu-&k+|LglR2@j_LG9}GY&YQ?l%;DHl|&g$
z3RwT$tT{Hb3(3im4o?+@FofHw{Lpl1bn%_9Z@2fflZI^pJ5<t|HRw_hddVq{@y|dv
zkTNncEFejwZ>`x`)cXDN;}f`lu?1DV5iQm~Y-qP<_qda??(qr`WJ9}g6QNgEQsP&4
z+xg%O3pC9Nlwp1G8Za^(&<Jo$IgoQS?G&P0IlLw*kkw>#lbl2<Nz=ZEg3Vph+PxkZ
z!{1+^Pb~I~NVKXVv!s@rI#UA<Td}MRoDoShK$;VcDxUq8W4e@nc85obtCh7q^<?t?
zm#;MGX=Whnh73~BL=x<j6!_B)xNGYa@h(2+CNZ3}<?Ara^5HxRP9~;a07>ojbry`K
zFo~B0iza63b|MDmh{M~o4kF`e;W)?I;qY}V&gz98Wz)VBA=7-?3Xf@Mh41`0=HxQ?
zEW97_cr@haY+3Ej20GNojgOG<&EkAP!xUrBgQr$fmWLzhv7ALb^W>ceq_)DPAtys0
zi2(|{!5ScjK3d;5SQ#YDJ_m85V!<QR2FkGWc89aZa6|7-@?yvmG@+9*6%bW;f<()7
zY64hYhr|X|&k~<$ic+?ql;T2cCuXG1v~A$gh>aGH5<|yU^4nJS*E6aAZ|I>?ejmP`
zA@Q~Vq?M8iRzjpbm{aL~-Cb+aD)i%}^X#bh5&1BB!Jz5#L$5`yc+K6JLB#tMCQ^x{
z+&mu_6+KG3e|~#2au!pj>k_N4R7cv#MTr*<Yu2M}mgZGEmsT&gs)R}QOEfm}^*Wnl
zOVt%s2QxjE%*^>JV&U?Oi<h#-?4i1Az4ki0r}bTpLd=sn)YxA9(3HDybZ^0}eKXTp
zP7(gADR_(j@9T1ATjIh@HiCh$fco>`d%Sn;-@n_T5>Tl!p)hL<7-a?o{^hKSQs_a9
z0rpFuo0;~b`l-`Aqt(gZIgHKJq~aNwhY;_SA>3$shOXUQ`<4?V>12orK>r-Yq;1T6
z{CU*ib?-4V4+<CfTac#)$<zLve7*VPGM%u{hR!5G3D>-$6qF&GsfbAQtV0CLl7vDO
zkx<nNQClgHib{~8TAOZ&vYLkY^lca|J>mRZ@I~sLDtBo9%oZM6A$W9ecK(#>0NQ8#
z-Yn_p@RZ|Gd!^{LLx@p7huVkLY&%Z=XRRMK6roQ-&m~0=MvW9`(a~NU-MfdL1%iX*
zvoQMm>jM*!+DNGO+1|oqqL?B_=Kc&GAmNhCI7Rn@1zc+iSl#`HRbY_H-Hkx*+?9vO
zywiw#{hJfjJHlJ;n?DJsT;o#wIm^bcIU8k9NzxrBH$@DvnQiL4DY~?Jw~tmC)Nd=x
zwcw*q7ey3@{7d9??IJKZIM)8&&ntz-Un$TzNmC9`>zjj4eMRN~;QH@3Xv|fvr^~W#
zN2i&Q(?iSqfB61-ZB}9YKeul#gJ@{Oi~UZWZX~rm{n%`^5OWM_mBEPdgzzKF5+xM0
zQ@*bGn|jpkyy-MhQnFqxv%5`bD=qQ)c@EIxEa@(3KD#zJnVx05WjScD<YiY}=02AF
zo37qv5e~TjgB^9&JST5GnNdixKJ>rIOHzt8qK&uoTEmpH&7g=%S}Ex)SYH{?v1h{i
za);c?jPTUs6bI>Ho#wY1TRsW5H+%|o#g*#ITDsG;p!X~<t2{hx<rZyypDzx$-DVt^
z=h^E64qHki9|i4DDHfP!ilghj(ar`zMrDp9Q(0ih&#HwJ6TItfg)CzQigizRe>2J3
z*sV!YEEFYa84Aj{y|6M{o$Fk&L|Ci$wN(}>_LJt3J3;G?RL6`lVu!S!j`E<69@_`s
z#}NaFLS6ECl0i<Y26?U?fu&Ovd{Nd82Upeu_?gGx(It4!l6s#cnS`iV46vBYN=B(-
zK+BRe8!kX>8hFE!J>utEjL^__J;4ux=OA^d@=4>>Q0eWqs?OT4Klbjq#u-1aoONa0
z)R#?P>yYmqVZJz-LCUF=%?LD);#8$&Y?TUyOX-lJ0x@A#m6ed92gw9Td5|Bwo$7F)
z#P24!4>mbqOq#=H6toXSVLadjXS%6%GdRdBDiWQx83|Z&*&^jKd6=6fRJ$fiUL<%z
zY!{v&VKqSz(ggx+nG``aG!sKe_$($OlO)J{LC*X(?R7&hpYYQ!geZuo+4%p(yr=DI
zc7+hHx7klg!39v`*C-iT%U~#pKfR9ppG5e#J@s*<Iw~3B692j#r#-b1nlg-V;~sI8
z-mV|gZN!<xE$?-x3qmy!*Y?8_iEp;t%Hi>{u5T~5#+*Eim4z8kfAiCw-k*rq44$v7
z8<$i{cEXja8L#AdrDqxPN&TGTnI}{+i&a<ySwrWaKCp5uf}=2?%c;!ea;NYVa<4;5
z=Rc|j2EDsYqn47gT0a)WIN=Kx2?Y^&;OY<j^pP8vbE9Z-qa!mgkgg9|3(|AMw)$R(
z`f9Fe+O2<v15RoJrpOveswBYbki?@&jTmu<bBF>^1~Y$s2w&*DA~e|!(JT9T<~hS>
zm!2K8uk3S3!j(yzzFmf(g~wWbj_%HpMG>55vksHr&(%W!?rGBi<PkWM$-M>goCZVH
zl;@0T_<4S$FKK6V5xId>s0_6RmdT+qauSAO42v5uCn3ugau~kvFnW8k$;7NJEHX~b
zy5{>$?K?-Tcu&!xP@I3&?Hi9Wv16aUo^Lzap_$T(8?I3O(BTuLtNf1fjL(UtjeFwg
z;1D|bSoq-f2#kq^!=O;Y_@=^dAD2XClZ0j+^{S*Ocee{w=rn>tX>ZkM8sflLr8z~}
zGD?FRy4KIOFiJ>rR-wa;z02^KzG9Iv2(BE~91cBTE+vYg=Pt*G)^~_4wU;h+;vzuE
zjbYfxpRZUpfhN)e3I%FYU_cX3F5u!0$Q^zebETR|Cpm*WA8i5IGe#W<F)BO8rjXD`
zKyl1$beCrcIuJ6sNvdI=F4%<QRR%RyU8Vuy-R>#ab_;?Nn7vcvs2&n`tT4)oM%kW)
zjO|PkrbMAi1e@;ud4-?qb-^D_?AjNx*x}*>^V8+z;XFJKPGV{01EDy3-xAautYoF2
z$PP|nruFU3NSVD|`#kVSkBMx<1mK5GSVSgp(K6Lm=~y95u}+r^hZRLZ`S9l<|14Dz
z%AQcq#6^(n^QUd4CL?I!t=Jo+H`FLW(k~p4T3kQU#eXZm+XHd0Tajy<EHp!8S}wSt
zuqUP)O!J&h5AOUg)1aq*7tEMI8OtQ0_2?NgMgNz)_Szn=d5A$RK{R-SN5{wXATWmd
z7p3N;OUb4?82X^)NsQtOF+~SSfzhUHlyZNsIP>AXJ?4mrh=fF-oX{my>7TeE`^aOt
zXI<0Tf|6|L!%KNW`2(6l?BRnWjnIa`gMtw3GR}YHJ(LxK143yfKOH+nJBkV<nH)js
zVid;145nLN?p1sc$c30i%H{6dj6R2IQQrGvXbh$jU@%*NU}ljL=cm(7r0|{Z8gX!x
zp42HV3Ko<^Ein%xmJdZi%Ds`!xlW`>5=5I1&|Jfh3Z58mFGpqi0v&@pUaT8a$IEd=
zCM`jwuO?^7;>6)kbf9&wj4c<~ANiol>Ft4HX6k6xQI&%6Wff+02{DP)mpuA=(4G)|
zB<sF?IZex!-+M!Q|5Yw05Uj^V=9I0EH8v?g@9MMjoV$*m9-+tCCl373r16O5A8ms7
zQK(VC42b3c@eFp3IOgEKv3S)#DAcSe&-i%3DTBtChtG09Oc)W?5_tA08KD1%+ZRMn
zm*`gk^gTpSF~p>)@mC+!lCa;$2*g@}lqQ)6Oukw7>!bS^np&d*ylhx?fGUVF)CNP`
zsDeBSpghMClV}b`BsdBT<FpJ~0_ohBMae~{`v)a%K8T;xzRGA<4({Hpvj^MeXs2&#
zAz>5Q;9dm7Qqk3BX%wB8v3m>fa=kRG+s9>^-0HU%xEj?@+kf4;`hTE)ctia5ckRKy
z_zPZVx<XEm)`8g|l2e9+%xy<Pn||KSetm!0Z#^E4j<#J?|5O9;cYoy1pTfM#gTd)%
ze})ny=*EcN`OKpa`amM5M~`e|7%CzCik2!9Isda4A4e^(J&W1t96{`P>B~`WUA)_e
zn@^AUKl)?$WFK9fSd~#~s-}v+OXN;rV&vvOYNY?9-0JJDdSm<->-~k)>k@l<3|mU7
zl71l}nO?}_&D*y`Zg_vFt+}~CBQk)L!*qMGZ&lTw64k(=_hLMeHJ!qgwkSJs&B^_1
z)AMtr75&y5{*6GAMiH-sz>w~_;G9P@praO}GR0TTNy!U9kw2ur+by?Dx-KcYMkjs}
zp708b!~TtITNv)`gYtBvjA)E78iZrxRBe6IxbW}q(>Aa>5B*Mdr(<~F{5G#R<(=40
z%Ayl)Q;9mHiEyNUp>|bn)|s{NCJe8l{4O%|@ft9oYC!qgmT7o_Cqa*9A|cpu$D0uC
zA~B3uf51U_`e9lVxWaG2%MOFp&ib4xN+^9%keMlkXA{Tb)3f}Bn!b2t(I1dw^FKND
zPU@mN&QXLS<nqyGgY9<_O|h5pr2S0FF+u5VXWGeAx9b=gAgZM6^y|M0kUPQt+)R^x
z^(QxYntR^|GFTj~e6;;<v*egF9dR-UN5fxbwOa+M4iaaho`;Ths)|Z_?b`;Qjz4v^
z9O;*`-v^NqVe)98h>H|l96D*>HXdYB&z#;_&?2kkMzB$fZPQ6B?0BKt#Hb!#_*a>Y
ztBfQ%L$-5|pzk`N&WoyJndQ$N_ueaxGXJfns=UW)2VB$0rEnn&j1vQ@EKDhg!UAex
zA*a&#*O2&w<W*zf=rPrlTG%PI1WS8PDypih(brkL+0QvDsksvymTQd^<=KLZ`I$b>
z9PiIqSSN>-=vr<Z!&q{uki6TjpOD!;j1TFMQ;>joJ#rMa?}rJYqvHldOF~dkQm$F$
zfMk@OnTtRf3V-1a6JPk^XS@DBGj139j~eg8JoWg-Kt51&P7V-N_aXZKxA!1C=+E6E
zHD#)SRliPxinz0{RC}#rQj!W#&r|e&Z8r;R<k*f~q|^Ji%{S&n2>lAVlLc^>svm|&
z*5m^Z@RK?PI1aNt&598mikZ}V-y1;wqSJwFSRQH7<l)kNok}OwZnYcHymEUdnb(s~
zq2RBA`P6!47S<2!nB236wNhv<6S*t7;6iG=#T?{vl#PZ75lc$Jlv<S@C?cp|O#t;O
zb5ff0>i<{i>GZ;NZ+R9&z3g{4l$_d->kAqOLA*S0YqO?QV9Y>ZbP&|_LM5Bf%%y_M
zAi*^OL#GeChHrk}vi(A5)4g#-oIdz-AF=0$CxA?CP!&@+Oi-DUY1tN|iQvW$>BQq?
z9|)9Ku<xhG65LC&Ni{TL3L=sUxd}2$z^OHn6utqhMz0}VoyC_H1q@&z4rFp3A(|oG
zNz><U4i&~tB7)Emi)nUucXHjBdxAuo5VGLyc+BN7L-4LiO3?%kp*UqSU=dcqmkD_X
zm5{yfZ!^{OdSBxDvpg6M&g=e9-F41xsKO3ZvTSy2K_My5kMjHXuTey-S`3TJA86@x
zDi(@}@0~%&Dua|o_*yOJ!{0Ktxf*|t7s`+KWIehBWS$W6IZ=S9iz0mK+S8{TmmtCF
zD6=UzWBfCr5za)JhfN#Lx6eA98Xa~N1Z8HWhZ=pb^|8S2ce%uz6D1m>ZK`f+{n4(C
zN2dynnjE|y-b|i*rw(nz@vwo*Uqvy9J`Yzzq#~Legh1)Zmwpq~mOa%HjR+A*)1lKT
zbm>#5SNOGt$}^u5j>Zz>IjmXDeE(MKw$}IG@^yG#s4l%cL^uZ-&QqQX&~9Rv8zk$7
zdDVFI^>6y=$UU8RTR8JK^?dQVxVC0|w4htK_-BspTvSxzDMe8TK?*j9l?Zbjd*<c3
zov@~?Xq96p5Uecy+7zx1n1LdFBN?`VHN+8d0(T+D&g8P*#m{PIKTV#~lcuBBj`_xQ
z_1;C``q<sW4xJXlWy&M%c>_{IL*YT`%>ks%cDo}_0wp=0ZWu*DV-VwIu;Io^DZ4&8
zsEf|iv@bWl)1~W@HJ8?Xy!kv2p3c}Ti{w-SuoQ)7jq4m%1{f?v;DY}4>Hk*s?cYcJ
zFN9w_>sC%Oo|2-ciXO;wl(wQQmBJo5-suAp?ip0o6ts)6MnYtnRU}kJ6vZs9a#$)S
zhE8?JXNicd<b!hA*#gkRv1+$0>CZmjd3}w48x&b>r1QVV<@EH1w+7y@aNv@#|E>CP
z`2748D{JZceaF~B{>*mMIOuLqSLS=c%EMZv0`@ySIdHH1atCx_UA`dHNF!3tRZ7mD
zDwUM<l4n<MNL1|zNJ)|kPGXE=qckXgK{lS6h4UJ+wUUWxK`jM6c%ZOQVNmJFNe-b9
ztL1=n!OM7zS@0L*SW;`-ns_>X%bAz4Dh|Dv_$xZCc}Y5KWa)<Zo^%hJg#RA(q2y<f
zPY0?75GIs#3UCvMhDE*0$eM&oy$&?Xl!TvDhn`-u>vV@`bd`Xx;!y%~vQeJS&G!=*
z+m}hxAH_~6`A=upwA<TDA6t5)?PQrz)f1A?P#)3kh99Iozkd%yg`QLL)bvjwz*9n&
z-z-C6vN*{kSIS*~-F!isNkLitwnHc<2sMl~WG(&ln&dr(&ad^-8k3gQAV()RYp*sn
zn|Wb#mx2CX8r?e+p?Mmf=b^#-!^Ga-6iwR>kkDaOkJ)MJh4E}j;P@MzOP;#7oFu|&
z*DApLk(hKk@3Vv(=I(BxnFebL7!=9mGIy3`nWBz;LFU5*nZ<?khEuuPj4*K?U(G>a
zf%F7-VZ<u9o+(MoC|hB%Kv;R|RX#z`Pz&K!f@bh)(T_HrTv0@#t3ouEH;?_dOG8W3
z?SZUY6L+ob264ro^w_XQ1GaXq3e8fY2<vBjH?uFopIjmD87FjMj|L`trxKEeb%9QU
z5W#)f%1k!|4-)F~L<q~Xqx;-{NB=_MCO}ReKQ8u_^2x1%aT4)e>>EQ6H}~$$O}1s)
zP}=QH3PLr9bTlRtEb#EGQlbk@l?gH=en0fYvG3a&5tqrR8D3!=K&d$~Ys6$gkU|He
z_uJE}=-2xGDM=j(>;5r6c~9RL{Cy{(Kve})K#0Gp9xuSkYd99PCBc&<{rzJce|Nc@
zZ)0y~_mJ6wnX-R-!YLo#p#{YsTHjpa1MjKs!O(y)WkVr6xH3PS5rz6b9Y3Sw=jRTt
z`nlLYb+?*V>AO*H5ATN2E?oaDQT%83T89<Q>Po8Wm-W?e$@HSBEL}pW`CSu6{Sgrr
za6Zv;Ke30p3U%EGSjp*+H;3nZ_sBN+)5;zfNh9@P+ub00k&y=lMpoV^;RpF&5Ws;n
zL_8wVI`0OS)qHc8e-QM#p9!c@R6+hJx^d`ZA5xep|IoXm8oP&PCx&)@9Pft=Qdlj~
zI8!L6XnKed`4<T7z94r@DDdUY45ad8ZG9z=2bvmfkC0>KbL%9GNKbcV0fq~;lM1M!
zk{{j5Lm(*>m0W<Nrl_i_N(!bbqN*aIh!g(rAD#a1*H5iK2?E<Kq__L2e^OC|gpxqG
ze6_fG3+a|tm4BCnAGDG%s&V(X##1mW6j`YvNcRa>34V_Bl!h(Zm~1|0wD)MS4;1UN
z+dGyXnsk0sY?Mnl=Lm?l+ho?)Ns)-mHYKI~cefQM4|L}5__hul9oKyuoieJfSbq{;
zkBPU+HSMa_zAT(WIS<v>|A!0uETPm^IJCZ9^NAe2uec}N2EYX<R3N{pK7CV%$J7On
zcBN_}1oIHAhu=?5PvCd>5BBwJ!OJrd+J{SiZY5i>PU#YU&C0r^h<ZCdmsLf7N6S*!
ze~a8d)lVq@2V3HQL<<ljQlRkij?+`W)cs?!F*tu}4pUEuu^g{@dwa^^LS=<%qAf>x
za-4~ncT>zUU276&UzQ2oe~Mc(F;%&msnIV9!`TkhDOvZ|>Y7nbM^4>$zuVPEFAK+2
z0^9KOM3hJN_xxR6Y~TAg6sh6g-njQTd=PC~{Y(4%PqIi{?w%n8r(RL;hwYq6pMC0w
z!t-7pGl%wF$H^)`M;UHq&fCo2Oa2qv?bhcxb;oz9<?c^Yn{?JLKi7KUYiEqcwHC84
zm6gU^%)Tlj(5Db5c2j?XdBl}3A9_FCo?!Q;>jUXoFB8@dqxN%iI1gsD`>KTXKGiwE
z@cv&I-XxiSmL%&%;Oew!M>u4pYbr54CxJ`BOa3lQ+O?XKrVc;v%h2O>EuxXDwi9Sd
zFprIovnnM+K((%QD~z3~6A)`uYg)v%_Z_&@S;w+8q~SSKh*0Fl6fP>Eo^p@+DykRM
zyDeLY=3W%r|DJe`v1j<MyS&5lI=FZr{Q2Vr-+m$FS^KZ#zg3*?4D}GtD|lQ)(~tYn
zjugcXztz6|t+9`;GD(QEM=Lfclyf>!F3VW{>4^;DZ>lz&{yLece{1l$-95cviK|Lh
z(w8wWaP9e3`JeAZ{Fc_`{rTJi;n$<eFA2+sBm5Wb!Mm}3=iGeO|BJ6oDmy3<{O>WO
z(ey)-#eA8S6!=yBA1OV=RChv;#q@FZxXYe&&s=L=%0X|4P=54I<>J1Vyw&a8rdeN^
zR=g^_mRerPE<DU7B}%nF=5vL1JK%ZTq)LH}Wc`WIL4lfoixBQ-)-&_5GTqAU@s)B6
z<J;|%X<N9nE|@T?At=OkU(E+U;rub^n@eI|<UFt1o~8)QcIuM8?~k4cE5<b=)2nlg
z59})*Gn`VqJbYf}^_2!v`W)7Ei9MKo-xC@9c9h%jsXMl1$smX!q99}gAV8o1m;^!S
zfmR_31QCb;N<|iA5TH~dP-y~z6a_!l0EzkG1x$bt{#)yl;4+f{Ljur!Urrz*c7;`>
z1%#p+P+B7Km<S~lRFIT~B`m~1Qgp3@3KBpYm>^^ZE@Bh_<e^BEp#+3Tg(*TLj1;9P
zQkf<|P?S=cCP0u$6cr9)21-*Dl%)X>ut7-BFvuiSqg2o>L?Dd96%r)^Q4%c$LP&)o
zG^EN%Kopb$(3HqYLPV&viAYd`LaazM0t7%HKoWrxvcOO?B?}TvENPFbQ}6GHA1&^L
z>h{PY6$i!0d{ff{w1pV5El5;S2NMhyA&`;$%3H(EtZ&mB#<W1PzZ?qfUC(rAeJ@<U
zu2AzTPgYoAC`l;)c7LK20qOuF(NU~0b(D=1M=%&YkH6~Q4^P#MgbOKi@}O!F`cX~q
z>Dn9F-{VTtR3SsfShiW+I8B)P>5@tZj{AY*9=NoAFPG7+SUtPA?GETfPZFl}#fR^d
z*@G>cpoXMLlZ<J%WXNQk1+Sg3F;b6mFGsiM>fU;?r*^S7ShR%Y#g6^ZuXFHhB4gK1
zuxvm&L?kULD0M7$;py%EY{4EeP$UyrZ3;*S&lKJys`bhs`(@*JV-!3b>c3-j<Bx1j
z<^x>p)#=!Y?8WVK8e-#$w0+hc{$C#w%6Y^!AsxsReuyd3A!03h+}|JL<uVm|KmgDR
zHc+y!vH;}0SqJ5Z-viovOX&eXY$POsLXaZRM2Lzj^GJs!pbCXR`k}%UKE^VBn8-a`
zj6EXI&rmBlq|Yie`zzHpB8A8%uoMwjcn{G87V!~x*Ld&46k7#V&2l;7{ImoFLtLS@
z?Po7&9A_HfU97|Wu5AWU5c=Z&ScOE?=yX*{B$7$wzjw37c?jki%!%5fp>APau9ymu
z{2aMeRaIC1pY{La{!iuqaLJqhi2V=xt>5B&ypN|!;&Uv-RLE8MtAreaq5Tz{+t(V6
zSpkY7h>vdj=jM>6`#Z+7!zvmARgYngCq_9xM*@d-gJWevs;c_}F&L>>Do;rcOQk|5
z=otziU<y{2STF@^RshRIQ4upmO%-^Itt_gl6a}I_w#jV2n#%*ey=mJ4O~HESeFhcE
zs;a80s;aaa!HIz8RN@$7l?D@v)eD5LY0(5sMzA{XnBqNICI@oDqNq9%f>ltBP?c0r
zP?Q4-h`|JfN-?FnV{4t2R8gjesa&fHaiqZSX&X6)3xqgeI8aGa!BJnYLx=liGw}WW
zzdv1notu57DsX+DzQ~;538!bTv~P3Chr8$~gc1;hfg9?%+4O&PjmMDTxIKp+4}foS
z)bH_!zR##k2Bnkpv+c*qorgaPq#)&cEev-k+E31YO~Hd76bc9E2A(aHr+zH=Ix-+O
zRSE)vlnf>ANw#Jmb}IZj1IS`lyGtZa;aHMGV$Y2WManf3BNT)i$ws@~2F6q&qGFZb
z6?i>IO0Y!&L<5-|%O2$ZdB5r6a5D1s(5gKZd5l~dwla9f5!ye2xA#IGVw{2<|KsT2
zjsAZ|4(9$Vnld!o=<)K{Ct7YicBIhUtH+sL-l!=9sBnjX;duVYb63BLs;a80sw_I6
zr1Sj!cE1!omU-K_jLYYi|AuWKO|QV?F2l2D4-6wHx@Favk7@0TJ&1`se=norbpxTO
z7Pi&?|L8BvKCa0$L07v2%wRv|_kLYF6ii9*Q(97q(7vOOM^!!{|GKI>^mG0@InxOS
ziZmwol2Me-n<Tm(`{4)TQAT7nOI2!B5q~XTQt7-CLLUrJ5)TVg`lE1%7>5&TyhFHY
zS7`hG6oI?TnEwOXG!=V14A&$)tsFR(3TZi65J!rOc+DZ4YEA?SAtkZm_`RLy!u&pK
zcLMD`?#0?cks*|#3J9y?vU||e+0m5%NXvzi1g%5xG0IX1pr`Z@eR^R*6*U!AM36-c
zLoyXqu>>^GR8&+GEWr^F$uN+V5=qsWm_bw|Ed@zX)iM;3F#}N)3{=q7Fc8%xM3H^4
z21OkZR*5Pxh=?b4{jZHkAjSg745JK0M*_i#qGd{g0%D3Kgd%B(im8g4YN<#lg2xpM
z1HK{F;>=M%G>*ZF%SBZcRUtHzO(_hRPI3pvLpWgH$=ctAbet-o5}|K^>-YM)c$<Fh
zM_3P#K@SKc$bc7$2}1yZ1V5-es6o;-dPGi=cyal*10SECKf~F=c=KOJbMA*Cg7>0D
zmm@@2w_sR5S0i6OwnL7{8dkmglq}ft#CyddNYxIAt`tyRiZ|4(q8-B2R-#a(qF9xw
z_McC;?fwE7g;$?<xg^07Oj6M0i4aK+U|>)X%E?p^G|~k8t`0#-RHTr>5|IqkD<e?F
z1TaG++kuP(6cGg}B#SZ-l@c%zG$g@GArg};MH2+j)g&Yk%L)l1LQJql6cGVRK?N)c
z1j7U+2_Q>U6cl=i0?Y{#X&@*_f+i}eiYkgCqNt*Zsv@PTXrhR!lBtTBnTVDdCP0v3
z32O7DH&1q-u1n~}^7ViHctHB(q<+}<cED1p7huR5pnuH)vBZ5KA;`;M4krG;^<l}*
zyBunv+B8J_aliBM_*p~KV{P~NKC44<lmvLnp6CS(l0lIuJm9k!3ckO8mb_u;u!|C8
zf)yV*R*6gTGU>-4$Rfas^tFP=zM7C?h-oIGDxfAPmI#PqA&4YqVwwU-N+N`+hGIyH
zAR<Xp0GJ_!m}!BODv>4#B4Vf-CK8GQs+x)*iXcgeAc#GM>9~?KL<uo4Qd<d=DJnxX
zrI}^E@23h5L@Nx?1W@8_gpna0)oQJqZt@WY>VgC!A?*AkLIWs$e!{8}v8y$gA#!zZ
zV!FgpP++rr0Vq8EPH4yxMO1}F5fVXHW7h{y=U=mJeyNG@>Lls%_xsm3EFmWHQ6dWh
z1u_uOOBBU4P!&Z~i%|+x%o0CL85Kn(2_*qkQ3W(i;~5Z3M94@)%*7y8F;fi99(sNG
zjC&0J4>SD^_1<%`hiE}|#Zo}-K`WHx+;sm}54Q#<A*L^cCxMvpvjXto7n%iA3bo;7
z%CKYDAo#`vG1H$OF9Pt9h(M7(%FHFFU&l*>e8Q+;Q6UmZEEO`;(L#I7$zg;bq6r#u
zG8n%OcsVSSPuHH2Gawi<C|ZOe-iND0xwof1OFZn8TzlFNx8Is*ZO=jsGYrcL?qbCf
z5-p+hA;}!VP^!f2tV5r#^;kEyu-%L_H_@jONpbP{?sTmtOHR_l2#|Nu9B~=1h6}4H
z%oI&ZecwY?G74#q18kv;3lSoH_U`oP1@7SO4wzM%KiY7{@y@r|LY+N&<~in(xPfBU
zqIXv9Z$D1}Loi?4I7B{jL+r17lD=9vQqXvzJ^nTap#!w?$X@D&KwCY?ewcIg1s4v=
z7d}tdZf;>QZrpw^Ir*%<|Aw2tWqqA&o!vbuzX}42+4pJc-js>GHK_*(i2g)x_i7o;
zFW)#hqs;xnIFKnGRdoW(nz-^@S!C@gMiowcT837TsEcEW+P1yqSzMzZWB@Ny5kXW6
zm^b6Mgos+#s>jrkHb-Otsk+oYSfl4V;8T5tBbDBL=ke$BNbm};pcG7$M2^@#oAl<0
z9>_0$_E&$oUf8|Jj<>P|h@bC}?D_4<{Rc<9++l`Hln<p)|2;|hfOMCe`5dE<LihSy
zem-OnJpO-cgwN_J`!f5w{`zU6iYWaR9)-1aD0L_1Q{;YL9sQ~LQekh43Z#Z&NkTmw
zJH&&&3aMRB{gI(4Bv5ys0Rh14e7)fJ$rI1oeK=TBN}!=*+?IYqg>x*{76*j@>B0m#
z`&_T|$v|10dX#5u7DIzX>L263^}W8V4wPtnwFYv4QRnx7Z!Uhg>c|Lv1a=VjkJ@ZC
zu#h48&zyaH{^9O&O7+zBU&*ZG0x<fI-)LN?k-(JKES&Z@T`J_4tNoB+wfeyVpXWUF
z&I%t47Xj}IeZ7nkOe;u_c_E60%sQa~9lEBiUCs8$e@v=WbIiMWPM1W3K$!)rP)Rg>
z)V|%H<okL<e-VMWJ|B{y)Sqxl<HZlwhkIN=@Ez&Ff7ZY8@*Y-=mcxvoC6aF>u#~2K
z(jr*TxQ<!be!m~T{$>0MKEA6-mgSn*Q+$?%bdlnID}=wt83yp1oK}Of1TwkGg+w`X
z4v~fbyFS_8VV@7xCWf*d^S$fL(2<vvb}@jk8Ok{+6jVP{==$sNKwsP2eIAHexw)CP
z>~J{u+Iw9H9JQB8_Me{aB3Z@-SU)uu#whvJdMt!Ldv!{<G|McJDhialzJOA<4=?WO
z|7$ZRD9v?WnEZ%}D8e}d_mLnUnEfp@a49H|y#%pO4xL_pzMb7t{bk7v`~!f<vUemu
ziE9SC^|%)fQH=h(e!t^8<F<WTIdf&K{a7)Ke}^7G+2ilYV#FAZOgKgBk8_jQWWV!w
z?Fkv$YiHnz5==6@Vg!$KH>qudmMyG!k!+9&4{7Z)1EGTybTp)@rJ{-mXv+Rh2z^8y
zz6Ibg{e$vw>WV3o^>?xIPaF`aKY2?D`V#gbD;e@WSjcqYfJ}$?v7;0g1sPC!Dj*%q
zvxBDfk^u^Y1gH`;|EP%}L2WZ8#;<ZDpxF$PKKr-pQ8S8yT!^Sb1c-pDf*>jj_44va
z`@9%D)JSwJee+McO+UJol@!7cro5=5`HA<azn*KjL%P=ezYg>ES5$v*hO`p|^Aur)
z8|)p(Z+LVZp#$?DoIZ)65k&JkL(D!RgZL|%nS-wD72NYYMPl)il$)<>5$B`vJiKav
zy%h;Rp(ryHl~Nc*__}pgDpFK!kwww1-kj&$LV~R0kFMlG;)K%CBpMYh5T}j~R#Zo@
z$qIFOTU~Z@*{$=&)9O;KQ)$8))-We-zBJ}170&UhDNR`tkpQs&)3XZ$>i_sMavzZX
zIB7&eG+dZCw&;;z=;SoxA@6=J#CzPCJ>!Qm!E^>;Lc3dNmI+|AtMv&`P$kX(xiFRO
z6P!=<3c>1PM#YsQe}l80segy$nIh>XLJmUBgSed{!OjoR4s!!Cu+c%x#?lbDhgnmf
zIC=3llRbtuBt{>+oRS@($AF63YzQMG`1yrqWk&)zWZry=;9{3j5-1${6asJ6m|P4L
z#si$NL|@0i=~9mZ{0Nx?wKxtGRwL_hh%$&Af}%f(fdacND-+~lb)R3*dQYP^RNZ@+
zqWaz!nG!3ktfdUg+@b4TtjOg}Y9gvF<9!v&8NgLUH9j5@f~_Mk)SsezV3sOb*iI^c
z%-O_|Gh;bIRktFQsjWt^8559G@3zidLQy!^i{6q_fw=dPJ;kO;K_fM*{N@{Sc$SSL
zIQgqp?39<zxDJwT!`dFPMHU95qaYV!?irp8DAv{?NrNV1{MDzhy4qmr#N-kZ3?PsX
z<4p>1fKnMms?3BWs>vA`M8z=_j8hau3^YF23?zeKq)`Ds`PvXrIzZu}EwG``fk;S%
z3Zl1l2*JD4hw%R=>eS5RHv6j^Ik?{$Xx-58{Rhn1(}$h50`WuT5ZKtG)JG5x<2lH>
zL!_t42z<C=iXY%*>I7+6Dj|N(q5^({YmHG*w-!EvBCx;Kuiq8TABgg_4=#PZw1=pd
z_tV&hksUM=obxH)db|ct7*vVvI`^EMgfZ?%K)DlMH4Mg+a)u;qj?#wZ54T$Ho`>8Q
zs7`$>Q&8Sjy^##fUXgzjgY?<r>Y`}!cc=AlYnqCZME9kjNR}Nwf9&0Fcjt`Cm44<u
zJis6Q76JVykIK#laRXtr&LRqgZcr&WL^$>ff*R(Xt`Qo93{8U<)Ft8{O5ZVjGaBpg
zasd@X?raN(h#n>=DnT8MW&xhdqMG>~ys#=xYA2$daSvG&XHdm!$rR35K}z^;L1*#_
zpweK-aO$U-diz-p!So^&4`J4h6R{3ToJChfg}ZzGxGn?5naFOS?wua0vh0bpfD}Wh
zfKd!-Pl#Ys&p}_pout-A`V<8-ZQgyOi~*4Y=E$dLLZe%(n7ZVh2*>a$kAfd2I?HIa
z;!#$M(D*cl=s@s4QA4}{J*J+~;|fkkA$$H~pLqew@;kR>VgpGCZ1{1~0U%eRfli=+
z<m41a^}~lz3SMrd=k0NCL&WQVJ)^w}K3P*y@Aew4c@xDoc<3I;U<nX_LBFK2(j|c+
z`B1=r`$P9190ckgDIduxga*wDVFE;CigE|uN67^1iF6R*M#+@l)=`p-HA*7Z{a(S>
z+utzQh1c$*-fTnL^$He343g>|Gp4kUwg*Gg##sAuq1FcUG}O@LsFooJLVj9ZVQ3}E
zaupuFVN0<CXhWSPLI+wCUc5^i5TaBE^Am{##0rK{bc<99c_=WdvQ%6DwZ;oX$&O`9
zR4bu?=u|v@#vW|>t#3ZT#^kh+7N8GEjPF$*Fdbb_<_<x3*OyM05$hA^h?XL9iWEbE
z2u~Okuy{f+AP>U`Y#q2|9@sr!V}kgPvONep!{s+JB3MJzU8Oo@&p*Le)4=x}(t`da
z28=+A0Nw~w6=3~`9=O0c$KMjVN<1O<o;BM_;1duwouWH#a<jZRSAFg#>=-{H23WNL
zLF^hIpiBXhdhw3z1J$I>3^{>J9uPa>E5V=UE(WNl%g9$~)>Ph*iAR{8YhCJr-XZ}Y
zCz*&`iZ@{lM+PZ+B{Y8)0RHGf)Sz-h^dMOb3jkOMjXTpxOMf_&Mte8+F{Nl6k>f62
z_5(+42Dp+QO+fa(otAAo)~}KnZ+jMgDn7d%XPmlykn{Z?Jg{rMIIH4s$|>k85jp;@
zH%9Nha0mWmRZZHqFS$=4PirW^%qY!e5e01#r71+V)=*JZCA1K$YSxn`F=QA-V@QV5
zVay6NQrTLr)()~Nip5)K(ulS(K`P4%RINgSL8B!~qDF~NTUs8yOq-%!CQ)8dJ-qYK
zH7EJ+zT-={39LnOa6>W%GEBFG85k%cFMp%6koQ3T?*Lis3}RbfEw`9hH*N-iZ9oMS
zQDh*nfmKyi6;+vqXHAA@H?Vp++Au3VX4xJ`^XWsZKkHU+jQWIqLdz*_wQVT2lvGR4
zurCg9wveR7y6qies@GVSHI^8*nqiOEEfGI+=lq8__z>{UxN)C_mz6I{%D6fMU3lbV
z9Z%YqHeM~pX0Vjkef-ZPVz<S;Jlfl?8pUX#Yc1H$wuwvdI^3R4j`=x^TWDqvM^+Bz
zD=9KdNa(}k0~oQwIZo_;546tElOXTG$JF8k6vz_R<NUJTP(<n^vBZY(_YkuVlEr3a
zBtlp_h!c>10t{Q9)V@SYSCtU%?(UP7D}>zp4#61_JA9!gZp9n_RJBVxB&FHeK)426
zCaTj!qw2S={E>uCbpxjUgZe-H$3Lv=!;$`-S9v9(JQ-209Bs-t)?`@4vu${9$Q(bp
z&Y+0g$&T7T*!xJoh<N)w%z4yo_=fyt0a(R9*UP}`@8v}0hv~cX2a;rni7195S%2Ac
z$KVUke7}#jY8@tlr{%xGAoW4#R^4R>cpexM3rha*{P)jwXrk2qmz`6cQu7yE)vhi0
zT{+E#Y_w$kc7lTO@$~bQJ)ZaIf4{!GbZP>Szr*k^4oD&pY3~yf#+DQ%G-LAgJOI!r
z3H?62SLQtWs;G#Fl82qH7|3LmZ$ZeaR)avH^}6UshshLQ&%huDpltZQ1=m!m<%%jP
zdzDe`Rbj;Id&;8m)mCJg|3eGWPG4J}eemwQ;IFQ1R5}76qsNap)?eAHDU$wv&$F9O
zUDr_^yK2gwol*Tz$Vj)fEHOggFHGqx9cSLv=+nzb<&7qfx8myy>!mnp&(DMBJ%PX$
zp<I4;az~#}^T$nc3V2dm)dkZ;BMjWkP1rM)QY=XE8M*q`La>qL&m8Apn-XPIa7-ij
z>)oBvc_%V=7sf4}(;1l7_Lp#rO4)}e_7J`_^Y78+<>5Us<S1HkZ{DN3pXmAoJURQE
zPm&e)5314J$Fft3@S~aaB}lhV$>@JRb`$nqz?6#9roY_;@|F=zdm6V?%Dy}IMnAeP
z93RxTIIO3C<fETT=tpF{Rj7s!>g&;eIr#qmjA36sYHZhZ;H-kGbYRIzA+pbuB2S^u
zkqcty(HM_qA}=R@AJ(Q{O340CHXWT+Mz%{Bl$E{rvVMhlX`J;m70RuF-K(oj)11}0
zpyIEv^pU^kBPvn!RL#fC{5X-j8Xw+*eN3L@_*<tMXex1Ww;XzUFjXj>RMs=7qM}SJ
ziXABBD8f$~Qje&7yC?G1RTK($p7NW0KJD(U+y9ME^#5ADY&y?go+n@CbWDtI_*-!n
z-M4Ao)9G6!I)SNQjcnZi2$ipT`fwk}wgRm;bGxKl>b!KFoyqjtb}Xg#MujZ)ETr};
zoG;eoJ7WK@qjfR%-$pd`I;mX;o$hoWbDzuK2S3w&U72pvaLjAAn(T8)UPhY`?#Lz<
zzsEBrHa3kmH(cM*8Tuzq>QzYKxt%|je{vm*B?7NyH1B|F(8yM#(TkW`87DS}JydNL
z0o=|PsLpXFBaVq~6!7b}=$%8AygjGf$MRR?`dad@aR%XoeIX7{qNwj#l&K_Rq1VGx
zgRxa)3!#~^i>#!Jp+Rd5oA4NV%2HQG@r%flC;NV@P{6BF%rszcs2K=BS<b!h9?o@k
zy!Bl8O!u-HIvBe4=+S>G{pKHQqBygf!$)N?ndrAV|1CY#=J|PWu_@fvbZK&MRLr}w
z>2&I9l`yWc&!L+tMp{0vna}igFNHOBGDe;qhgQpZV9`$pH&bDY-NNmAy$8#b(t0SW
zIbNk-D3FTA)_J}YBN~gc-ABQARaI3TYEw&B9M1<ex3AMf9TQC$bo_2DC$(m`V`@3=
z7dsbV_A=YZ>AoB+g(eG2s%sulom*oJpypWD?WT})^~8d)`zC+1=a*wyiwbM;@nuE6
zCEL;eaKDEsQR8vDD4>%<m6{&uMdSisCZ#l}(gl>Ms)l=w6JlMBsn4FeV+xbf>YWqr
zbBVA@#@X+(zKSMCzge#ek)rjnDe+h-y0|-|Jwy@$*s6-EDD7GyT@njac^dUwW_R@W
zUjAz>eLCo^_BxAg(Z$ubba1JySrofn{F)xOSj|IpQFLPLtJ_ZPZQ(}a+4rjJZ*tX*
z%Rh}D7BCczg}d|Z@8@p|X99<yyj?l`%L@GFZ^;-6<pKGWTR<ps3jpQ@2dD%fs9Y))
z<!eIDnI&CJIzGR@Lj(Z*rEG_|A><MqQSOD441rpVq9C4t`}Sh^K&CKV-7cdJsV8$U
zHjk#oB~e8L2|>UMiRI(?8^@f89-$!^43Z@iWefyP&l7Nx-c~<-fYTQ@)l#{}oljGd
z+5xC#{Sj;n31)>3%hH>ECOTM<zT$SJcO0oVh-46wVwwmS?@fy3WV!a5o_E??@<>fr
z@nT%ii3IF*6CezF<~!yzbU4+%9^+dnqa;3}&xYDNdfvXF9YbrTuXYh;8)M9ajqpCI
zgbc{G69u5X(jM@}015y|ZXKHG><%b4%4(YFvuqae80=_L(gh_6<eee$I2<~~Iq0EJ
z0_AI!?3KR{IWuuO(CiDv*4Q3@Z>r}52|Ck*j0lDNsD~AjvYzE9lM*OF#UgDKc-^tD
z%UwC+xqs2qsB7%^e>{IKey@`*i<XFPd1R6Vkc5&FLi5yfQN)+JlotrZ?POv%jLYER
zq1@JiO3sIA#CFly>=-s(JtYJp`rIHR!8wI_sXjUIFiBLyQ9@EfcxHHhf%ACi0QJNg
z@p*nRzhemf2>!Hwq@B_IaykioFWy9<BBJhX@~ae4nS9BV*u$B3q&hC3hy4#2T3C|_
z)kDrAHHwPWV-+@B$pR3W^5bG|8if?|F4<IP4iJQ5po>~Yq3tAPI<-qM^s$MES%;l!
z8LbqnN-pRzL)M+M4x=xL9^TO^(JJ)ui+F{Ha&YC#p&?@qRxS)hMWRs{N!c<&#v>I`
zn97)(rb-f&vWwKlW$>}l>XzGW?ecVUPTA!uO6z#{%6jgdHHxhhLLCK=?I=)()}W`T
zDc=<H4@Fs$TJ-Lal7}J+K{q;=v^v(HArWgb>Q~Zr=JwwdtKCt3C#<#X^{eIP^H$(`
zan`eOtT|#K-&k@VO)7CN)Ga2gxRq1e%|5YrI9k%DP_w5Z9x(F+;v)~Mdqbp!XoTt!
zsE5{TPV<E2L|SQlCu@B{G%2*5<8x&}w}&SapQK{jwkEcHV%xScv29x?o+J}YY}>YN
z=jMHH)%_3du3g==_Uf+g{jGa-uis-?mYJSB-K*&?#n(w5)}(+Q7GuN`U5Lu3D^7mG
zTIM5SX_k}2`RurHU6-3(;WLOns?30?_6%f5;A)9r%Op8Oaglbpy^aD&4$zo~dbXG{
zGMKYsxs?P@1;1+b&&Sv3p_(`jYpC0;D4?_Sl|qm+oSLJHvHvS3hRVq!ZDYAFkS~lN
zaD=o*cUg(3DE^ZzwJ{KtK_G!n6Y8LLnPiO>JukR-NX*v?gB01f28z}=nM*I1>3Q2C
zRM1(CRaurj;A0MB2YB#tjnwxtI7%6g-p>Ar9)3hal47q4p`;avgjoP`IHF6e3=e5`
z_JefJt|{%SZ}*o57Vu-E{uI+O;~o6w;;=G5;_@q_bH$o;Az3IXSC3twz$+{|*5cK6
zI@>XBYSLXBZ657|j_NroUqv^%qp{qFS)fvM^7}(JrNHdc->(9c9qW8$_3a~e(^~$l
ziFje(&7mmXb=r!^i<k^keD{6-@kB#<ry}u={H0hPce!=<S;^!%yI&YlA&X6nrAT!F
zp;q{txc7*^z4s_>uxnE8E$z9JfRE2vvK~SinF$G*npqAg2QDk<C6%|zy85Nwy|)4+
zRG)Ul1}10Nh7=>_y9Q}oWEY`}%V#{G)_oXI9x2}dQJ->&!JpCXU#AuncJ}>ChfUe|
z=-d*qjY<yT61z;tkLE=-9}bEE*Gt$bKDiG(4^!E5f}CO|QqV-MK3$@(HQ99|$&x7Y
z@&IjHuNv#W_yu-+F<+?8d@Ba;HurcR7u;MQ{DWZ@WY~kQ)hNSLGslX{yD?8odW=Pz
zx6b)@w|Fn`Oo7ClLB+LJlX4%t%ITi^i3^KQq=9+rbsyhqG>So}$!<H^g!Nhi$0xe-
zZ5C=RUs)H<bYEVg=j*%^aiZ7ql1)(R{xYS+9`aBbTO=r?;nlDSNoLgX(+4TYaM4-W
zU|c*-Ohhc6#0f|QqLkaPiuK{~qQ4Evd@q2o>~x6d57)WTTmO2Fm50H2M_yD3?5YiX
zchV`$*9)&V+y!W?6(4L>TFb#n-47q4*eZULPf8?*?)6Oj_QR`4!J>*PlMA8C!8Z`Y
z5(7mmNFltdi0GIjdZ{$RlgHr!lH)M-@x>@1l9t5)7-4f#;vpu{_<X8z3N2BE>_<2D
zSnLNVKXifeXUbXcN&BvXpV3M`TjJMae&yCGD_qiF$i|hIT>WfJoT!T9E}fIHPweiI
zc)+jZBxu!<$;KOH$=lobNa6#4-&L@um&cE|c6>FaPl9O*k{rR7lD;MKtNTSO$A=JQ
z<vCWY#D=G)Eu=F=d^JAp<U80>cc!X*Oa^_-r~dI3cMBDV$6(wkd7bi0zHOlbz%`QR
zJEs$!_{LKp@xu$gFuSnbFm}3rfv`*DEfUt9G+K-a;$_>QuVrqQRmp;QO<<B#$t74w
z;q!UqFV2lC71QW&@T|rk(y1Cg&^BG{rlCrNBiVM@H1fI9cR2Ca7Y`z3>Lg1oROx<q
z-z~seiKC;TDX;FEfbC`IjOt4Cd9@|>ifcGBD{ng-AI>05=1LTVdK}PpHH;4&Y)d7I
z&{d<<@Ez74i4|0(s4fC~*Rb$fqkamt1F{!~UFdRK4$xM)`dfTGabEl0<fytRu+h-i
zRF$<8cZlEpo)({q+2L*izUspe6qR2Pk`m(7>z+j%iY+J3p9%?KpIs08D}U4|7j6Zr
zCH=^`(f37wklxc8L8^$&mXXx91yK`q38f*3{-q&BYk+55Nbg6A+J&ze5XTZ(n69-%
z<F{RVd3GWD_}m5(=<VEkA;PXg38sUJBZKw~#SPvKf5vmX&vGFvQgSQXYzk8ewED&~
zzP~7aiD0DIGuj_G2_fZ7WBU*dkFSNQM?mNP*iWJq=ZQl+ODmY1Loa2oxbFyu+4O?G
zdc#iee&r^>8w1q8F8lwk116)n9Cq&_;Vvcbtye6Truc_&2&54}C5xz?1hOUtf4RPY
z=Sw_z%(_%puDahV<p`{gH&%o)+#ejzT(LZe@IB<^M9zGsGaJ+LK{n+^W}yu=vbG>0
za$J;zVBVfSpz)Vnx5GwqEF(8Oo%eeBOyKI+;v<MGMq^6o4qJf<)yRgRCH(RTNOEs6
z8v!AzPx!qJc(Y6tuvFYS&OFs=D$x`tE3WKOdOX->cNbu*i`{FNmXDx`=j@Rua1)cH
zAAKv`??G2M1_AVZ?fYJl^XY`!9YuZ4I>l5!V`Op;J1x-@ZI#d<{dB)1R)%UrSI;#<
zlv``JpQ$U?>foby?_sPVp}_+by5-h_zYN*N_eOfo<{A|3`D&CT4`5PfWm_o%hO=Ug
z`i*}re_w!obG$xn1|!snS@{J^ypu~byo079PDI9Q@7_XAU>?!@L|CLsIKU(lSG8~7
zI}y&GJY4poD|tRc2ON_Q&1K_4dW{kJKD%Us9RqL+4{43hCS?o!?k)<57XX#}k~R~i
zJGM$Zw|XvfOrX}{M)$q5`CRX{#XkAhP8{?I`t<*nM34w?xN52Z1$Ru=(*lCz54tRL
z3sHfGaD3Y#_n`$`wwr;CV5@6qhGAf?oSaVi2OR5kz}BWi@q-PRbn&5r0q*RYCIntK
zd)}bjh(Mg1&Jn`xGU>_kX_#<-rwKu?uqV?Om##X0y4WUmgK(zoj&oFI@86`dEzkxh
z!r(&0KN$_Z-&%d714UpT(Oqd~d*rr@oUNIt$uz)WStx!MBjZPim(R9y3VOIRP@73{
zs_cwushnD>nT4xMQ<c<d#v!|(9ev;+LQiXNIVV_etnQU3YH)V2{|xGXkCfVWSW>W3
zl^$e^KA2~pqN=SvOpmV6hCI#ebuR*aGx`3Ikcl6dGnT=!d7|7-k{8`O?z2a89cu8l
z2tP4|(HB0ImtUK7%T}t%HSLb66qMuX1mp(k4lERpqfX+Sd@K~($nOPuT&%c`Y#9vt
zLb*{@QP$<h;v}c691EJB=6R+eP!fV=x=eQ)VEdsaQ7MlE)kcMEC9_T^FaO*2`V6yc
z^O^uf=#X*TSE;W2q#tH!eClg($#D~t5lg4n%S4&D=j_b*n^}Y<W|gdL!_=~~6_pp(
zoT+tOW?xWH@NcrM_h1j&-~0PK8vA9=wx#XvrX`IY7LmY%uSutKCJFN*BPyt?d6B$H
z2oU6UBAQd^x8)oRynY<%Md2^sGDRq&pOnc@MJTgbCF_5CzYA8oIggW0uc~!<mCz9&
z=uFV~rRRgsh)E-pG$L1dkG_1-c7O4!?YyJY;tIN~=m*>gLRc99@9pYo!*PBVHABk6
zSg`NsG7N@v?<y%KtZ?+YiNzT6FIw8~n3&~k>Tk_{k766y%Gyx(xDkAMbDj(d{^z7W
zJa2hgCL5DHSS(>U{VwN_jD;cDCUR8RQ-PgPi&f!S{niB+<1)4z!u`H)`&Kr<)KFe!
z7s@V!5;o?85>xpZ&BoPpj*;7z$B~$T+D;<{M^P8k7b94YOjXgQNM`De%Pf;Dithc?
z{&*<Sc%J8qZBcosxEhPAA6b_=EvAT`T@rPQmUFT*&PdX7_H4+2F{z!O=qnCKRHLkP
z8y$KBizTZZ|M-#GQs$;>BS^5-7Wq;Zg_~7pnV1&mM9%7M0{q(ER#ar6*yG@lHX1#4
ze{u3n_BXoAs*M;QDv*j`+ccM(1cp#9|NbipCFm%YT}Yx(m?ScRaK#ESK^11;!MWSf
zIk=g;9cvCr2o~=`ABdP`1e8xnorOwYRwWr_Bb|2Q?ulML6578DY6(N$b{rsNbkZj3
zt>Zypp5qZ$N)Nqde|D1~*udDtH3sJ^q@VEd!@M{;h(eU`g%sDi47Mp%HRNtcF+lZW
z6Aff%S<s|5sKmQt80RrRX&}|Ja^9GApj`+u7&SP}SUE8wDaw9b3Gwc!)CE|dGCfOj
z5<L=XZs$*2%AH9Q3*WCb>#f0vRa8%x;ye<aFYVh?g#b+P524J0)3}_u&*Lko=qf!g
zHskDOh_Ly7Wrunc*!{Fb@SW1U_zs|3Toc1cP!b=9^|164T|h%eF%7c#{L1qUns(s{
z8|Uj@&y6Xvd4*w-aqHAb!a&2oziQ1UpMxDpeqLGrBLdvj$Kpagx)|z!2)|B8IbrQ<
z<4X7UuQh)0l%i+XBf(rLGDkrwV$F?YS+R?yNSSPoi{ssV*uc%`b@wm`Y>$TIY$<J2
zn>Jbu5ueazt5I7JG;_9R#jt3LZC}9J%PA_b&5npnGxpJMF%440#zPTj$qJrkrgYSB
z#43(mF~|%*u0YD*ks*o0WU2vpp)`nFD~B*Sq{@-EH6ze(4rn{mA2_Hknk5$ML|1mP
z5!JR2J15P}KRU_f$TJ2QBU(s<6;kRvO^n>n#dyV!VH<bVH9%7~7YC<7NTlx_FEz#<
z*d+@rArv%ng*fwA^{yfV?BR=2=?w%lo)B_EhyIYlgsPub&E-%d%@gP0;%iu|Ed2}l
z$4u)>?J4w=G%75b>Six2jzjTg_&iC1LYc<zfo;J=wh!h+$(h4gbb_H~Z1k+!xqZ7J
z!5{|u4~mMqR4>ktd~@PNC`w3Pw+KFa1D}l`gDs!8Tt@uTfN|TGA8W*jn#$c<e8NI_
zts_F;{K$nxem52C4%^hpGX4x;(3_m&MpdiQYUD-k+NJfn2kA8U563VWnKW;0Pl{n)
zl#MXHumFl8#|%;<>Z?a3J&77F0Dhg;z#3#wKSQ$UK}R++FsbNnV+AW*Zw&zWB|2Hp
zMpP(Bkl;K3$rt7y(p(XJ6zU3ZOLko>RvO55PKc;&^;fD%9a<}-H{qW#R+YY@56S&S
zOHl(XMF8&DjNNllJsEy>al)Vum57DTv>OtZVL4Urd71C;7E|XA^&io~#(sCU<A08B
zrCN8>K$e5WUL|ZQ>{bEP`sk@kV|)WDyuHQLArvNkkf4sZq^)W!o{1$Z&@I2X{5jm-
z@b6LxYFXFzcP7>`QL}7Tcne9fhoq%+$1He?Wb-I`C*IeXpvAf^*m8b$2W20r7Qy|v
zl}`R$K#0l`fawa!LmRnNB-?pbE&pst>Ny$~byw0U-wJfx72CUygxoKV)LuAFYHM?w
zDNEv9Q7VMf0|p1=4q?}=r?o6h=Ssqxj+ci)a13H^_MDHOI7Mfrm%i^-k7F<^*O-V&
zq_k{B&t|3$L12p)mBCEc%lp0UO08N<fJ0|Ifhm}3XsV~>WgefXBJ;`$yUk2cpy<@1
zM0qI@{iD<3et^=8^HfI5WtqU+yOXDxX?z5lIzzkXkRd5$oD;8)IyVv@lAs}4xlp;P
zU7Usljlx<fU3fuN7b&{nde>0e4Jp0?)*1^KV|1{iMnRG+<mt*4m`Z+^8EiTfW^2$7
zi;M`0P*Q^RF(B)g?OR{4D$o@pNewpAji%|3=Sj3^$ppt4=o`^=V=FND*16AM31e1p
z+3ia;$61t_;5k{%!&K3#>cqd`P8+PnOjY|`tTm`RC)-}yVP>e;5Xz=~*aUHKd)bue
zEGD8If9x3^=4++L^x8(LPAwg+R)a=wdXun0={7FXhge3Ud5AWML43llU0))j&ZPJd
z!5%H-InEl6o>^R}YW8POWdv}9mD$K{4R97S@pQRym?=h6W2WbF6ATbJ!Hjn|O$#>M
z&v0eHA!3F#Vkp=(87y2x%3Tl!u@xHb67ySYRSxVlULGoUI>TGyd_$8bV~nY-9J71n
zLS)b#aZqI@|9}{dRKug`jp$Dr^YNk&53N>BHzmXy&B79?*Qgicjdbf#0mVI@&E@Ih
zAcKf;Oib|9gGlsh3Kyl`61!J%J##cPvOL5b1O&q|4dhbd3npqba^<k`y<dQ2Qm(<0
zojaUX3zpken$qeGY&CPm)Lere2Ft|A3Z{${3b)zW@iin&Mx?r^_{wl&sY=7D+M41{
zax+ixR-{ug{^j;?->(b+;=;@$Ve;{N81QLb$HK0apTgiWrQ0u8kn|`~3YJ2TjW_+z
z&)gsDy#mP;FOFGgPXcyeO?}gwU0WyRUhB-QkO~9YI>t3D1kaJRp14HO6pjR?4y*!x
zy#H|1hwdNmJ{jX@3=mCFZg7#J`4X|<U6diV9eTLGq+$>>Ac^8GrA4SIyAXIet=7>E
z_Ahw%-@{g2JXoeg-B6p&g<-<6VTp+kl)~eh5gYM5zLX8JEUObe2{BX*1&ui2w>2g&
zL*ho@KC5#6K5>3x`pc7*n}48r9##b4MYTNeA`fv2UN+2$?5ou7T?uY8?ja7XsOo~L
z4y)O-xQu)vUGs^5(YJTZ;l>V&5p@!bzW%y-8LThIDYbz2!{+*=5s`8xAqupJ6z)co
zC(J`Z-qFeTT3-e7I;ksO3)YJnx0`^I--JlWx9lP%;Yg5R{SjHZGp9g&9ZAJ}NhLs{
zazct{O-q^~8&*sHI4BVWQALxL9dL>EP3KPCw144dZ}d15mY^_*y)Q)XuQS#qK*Qr?
za1ShhV*bk82bD3Kkt2orIl1);MnP}+e8rhi6g8!LngbU$1R~y>@d^n)g`eaUzyeOg
zPR~Kofi?Otv8NQ{(JYA`1pTgu4P|*pZx4;JaxtTk_T{aw7(TT@vnAB|Ce%_>h;<jn
z0WX-DxbWi+1H&3kF>|Nn2NnED7dEZ=x_rHh+z16*>lv?)di)|G<A5pJwG#(S>SbH^
zLR^R=LZjf>HuN<SJwu6Yu~grKez+|;89ZFh>{44e8+3HZ_Wa@2d$=teTG`tQ3j7kV
zR;kr4dImdT9LR5&y1$$0g~Qqz@FQ=aIXM0ToSA7nSC&|=cm%Is(4)ihm>ni!M%<fv
z;D-quG5K!n71XK7EjNY9^+Yka`Er<H9fN+~0j~GI7l&WW%cj~pYVskG=68x%#79sO
z@yNTO{i0=i5bam*UZ(!dkG`aK*WCLUVRs#aoxn0Id1YDss`1FisdIZ*!dXA_YWb0P
ziA$u;c%YCNbR2%`U?e`~@KiPG5Pqkm6Gk!>p$(J@5S`2j9gs;{7Yxx^vcMC72#O@6
z?|T!4*=ma4K#rvde&RevDVmm(o!ptFOjt#PC}JXVL3=0Gkqk<H&zltzTcojOKb9}8
zCqf7K%1Cxfs5xoDkc|>u<yCgZKEwIbbL=7PVIt1=Hm_t!b&fwJ!y1~`H@9M|0^MkX
zGds+&$5&n5S^)f!g_YYCGsRG!{}Lr7J8mWafrs*`hxR3vCylIi)%p(@UWtet?5(A3
z`LtwD))BK@-2Ce32{w>u#GDtyEAkn&_@0YC0~Nv2rhAaz$!~7K>^~XH0<gjpdE+<&
z^5Vpz0Le&NY;*%YM59O=aCoG06ZF9+`q%b2Me9*2<AXZ4t%Toib(J_MV7>nEa;}g#
zK1A<CnRR(xgpp1UE3W&lvoCSsC1@my4G=0((!qky@E!a~GX9QB122x!9Cz@aa}RlR
zJlkcPwI1OC({<hg6lzKjy|IS{pGomE1AKayP~AcreT~YMdRh|20dgJU$=>~(OW~vw
ztr@5qVJ<l(DzMLqp*Ec(P1WF=hWxEpLFAzaXia!sp&<*?2y9@2yLg?blx$%i!$b!^
zG~bBW!9DSHOB7+O%nfQ!k{k{N6cxV!E9%Tg!@GTF_9TB00JMH_>jmS0R-K&rX-Dzv
zDq+nlt2a}+TVsexqxGFa4^7DM_f$wpA#^fPWtuOpA4YCOFd$Qq`fgvMC>=>Lvz!!5
zT;5<J7z|VV^BecW%{FgG!5-l-8U{-GoTVtTD6#{CO5&HRbm4lNbIX&|vreP&D-3k8
z?A)@Mal!8^myKU1WBF-*Crfee!>cU9dr(N&_(ahfpdwgu6!Yc2SnoKJi^AuIgQ-jF
zKm868WPft$7$!9r=x?e7>J@XKQM3K@9ye{v)jbhJI*oyPFRV)=Z6Bwg`a&*fV(Z+>
zR#i!_<(tp~2Z`+VTxT~Ofm*xInV=dM0AaW|opO1=GK7dURaJ3L=ree))L5Rdz|M=7
z@bn=F#y~Dnr2{(14h=iMJo&Kuvif8>@^28Ziw_%pQ>%DE^=@SbVLV?pgIjaZdE(+~
zTVlL#|G9$ASQ{m|d^B<`T(=V%ixl59$e=MGhwU5GOa>OXAcL;M7GzKZso)LcL8JsE
z%5}!fk>>xQ{)vq>8S)s?UMzb|or#Wb1WA266S$>mjo2;k$12C}PZ%RdfH;t_ICsjt
zM~Lbmn~zOo60vs55O*8=iB0VHbh2!QBQDd2|H#j^ldB3$OPTEXk=hhE&odf#di7Uo
zmT<y!ye&jQy<uMf1`y58fE=wza4}`Ps=)<D?#Jt%?<9uI8w;Y0a$qH~A`Z_lwXo?Z
zh#lrxdsKWCFtsrAm=BOxM-(1NL4Kurc1rdGD@dyy;aqDxD(hFN)QBdNTm~V?rDfuu
zktmf;7nw<Va!m>bz{2?+2sFk;_y4p<oR*2U14`_GfG3Bf4Ia<WUGlfO;bV?{B78Z_
z@Gk#exeWDO@YvDUs=^MGEi~T!HLv%ZR}cw&zu4EH%}z4`BRms;a~*p9sl=!hb$$*2
zB(B2w`qHq@BC#r^&Dk)<nNMIpAC=c6*cp+Z_CXL;AB!IJVpYXvE`PvdUvF<AVhIEm
zHcD@!kso{-jT16?UFmzb^+4NU?Mzzz`0BxeMWPfjS)%N)$fKe@1R}2X-+akStYSfd
zqcM`quPQ*E@Ge0@f~w{tang2}>@Q&rKQnbWK`M@|<F4qBJst~hd>p$GT>oO$AZGE_
zmoe-@0@xn}XdrKxi0;_izraz28Vd{g?JSQxdff#1L<EtugA2GED^)a&alLXw<bAy*
zz*CCuhw6i(<I^)iF&v^?Af{cDDtd)Q?s?zO1j7(X$kg3KGb}}&beCXyK%&Up=KB`r
z!(Kx%mz*|ZOV*h9B4s2;Fq6kC>AphV3I`Jf29vZv1v=|{t;)P8DA7n|Om>_NKw^+c
zE}Mk1m+8DoX1cKL){0jlC4vcWI0Df7(Rdg*{Z(u(!vCz{-sx~TNx=OO>C&Mn@mz~a
zYC*!vN(0}4yykCp<3=QeAXwIfns&>tYY{v!%=`)aA(O`{ZsDghANzh29>I(i1QH63
zEo@FeOHnXd;q_la35HRer1MEoT;U*znKWJb5d2QXiUd#<0f9R_h|@y1pOqY)LwL+l
zJ7*HQ+sRTwh+LeV9yY{2ov*XdR2C=630I3+pGktejlJTqB`FHTfw2)3U18q~agbwX
zL@dt5`{Q^Inu=vCJ(_*Dv*gnBl3tS<T9h1}$rDV%G7r7i>*>`Kk5XX5YZewws{X(x
zih`TmAZVHDGBdU1k6mpb=emE`)|?4srUyrJt4kS9BK-_isdrm~{BRE^fd`Xw)Y4q_
z)$}4IJAwjpd;P%2Zmx~u7LqTgA2BW&Ms~v+-eZ=5lq#})$d=LK`Lmyj0Inprwx~kh
z>8tOS_mGb(WMD)-%d-!0AyC#O3z>S{#Dtli+aIVCNnJ8hPQ(+GO-Q=?3xz`b)Wz&x
z{BM7WxUs}Pc?2|Clz?Pbx;(_T#v{~hX_TT@`l0SESM5Stl)Svd@(ny$0#<j@A-Wlb
z^Mzsj_!+d-1`L8wz&{wfHQ4N*|JV#!3%cYdLKR&#R(=+AFqPv`QSpFjaK~~C=A?`i
zNqHNhrfz-!_FzRCQn6;4(Z^f^UPdc3AlI?|19f%`-Xd7%utaJJIQmD`Hh-+(XSB=;
zY=r6NR7q)%hRom>zPknxcASdkmYw=a9of9?@?uPRAn3Nt;w8y+%E0r(K|3j2;*0&w
zwDNyVLlB~H6^pn(#Ge+%t)uZhsQ2E-!5&tM_?d>oTl8>#OroK<Xxd$qSt@6kPp`-H
z2PBEjwV*dpDW)-aL~cPAd6;a5;kf1L-D1c?QWQ319Q*fn`+fJ~Ui1A{FFEoT26M2*
zC<lq{-%X}Eg&R+N2J6biue=T~qzYmfaVfI+x5%nfi372Y_!oz&ygx3mW6Ms_p_^z4
z%^#9J>8JuhKNZXt@Re3EQVAS@N>Dep<Z|E-QeCZ@;Ndqj`m53wk=$^!-5Ev|7OjDz
zpK5UeLb^geu_23e1U1xA2o*gP;;j^$U6N0uA0ZAkI7jWbH+wxNx30v3qWy}<%!pNC
zZ%ElK+n1bPJA;MOyAAJT0c69WI6twdVba6XV8Y2{$0#wO;Xf+41Q?;aOhh@!z*`u8
zirbdv$wIlAqwR-;!@fO6NUqmOt4!KyB-MD=%b~Ap6n^)P`j@)_-2rxDQT5cSFVX#e
zl@@0gl52%1ch<BaYNv%d{Y#6^WP_Uk`uKcaW74~$DPUHuQ<F@FeeJZ>TTu~3=A5-&
zld>|-g;X*Li;-CJ-?sYUoa(s`G_SoGV|&S{M9pz_=3vOB$<-)AK!#NGG%$dbFUHzL
zI_kGrPr6^yii1F->sb8O{8iWxM4d=>y$---$MENJbR2AdsBL}wsdgM75>lT&D6Z8`
zlh!#pJshS9^g<nzYqpf$BW|S0E_NLnP@N<g>PD{BFen)#VYq6*9~&x1ey-)+KB)?u
z@`92}Dm)O@i{#0sKa%ZIA<Ffps_Qy*Vx0o8h%tJdp1KNMQ`1HTbskDk{+tcT#H$h9
zjTt~!k7V_oAJ_Bt2B^!|$mD2%O44S_O9p#6T{Fab2hc5g1@te9>Xh5I+VA9x_k1^e
zJa48*=}&bsPdXGgSe9_4nQ5uPXgFT6@c^I*UwSUQM$gamX{}PM-O8{^VSQ`TD=U@c
zLa}R~U*eGcL0&~GbN!t4#>c-$_yEGQ$-BJOmgqo8zCp@@{$VWaNKsjOgX-f7%2kQC
z)DUT7JR*&tm?Wq1VBbzv4@_{qO*HLNxXhK;SIyqfklA<NDJ%Nus*d=2F%<&Q&U!|G
zs!n3Yrjj|Bur!oezMZd1X`-D9Xw{pv-k%n)AXztD5is2MV!;?e_|RhR55Keo!=mCu
z;ZCGt1BL(8qhboCT6k0}Y4)AQ=TeQ0el)=Ffl|H2?12Eycic?novp@n#%z)y5}|D#
zglWoi@ULJ@&Vu~z0ce0!8gDh4!f&L`%l4Brglgy+%Ra)a!H%DGkl>Qhev1>-5iaQU
z?`BuwD5xvYpYVp3da)!E9S(1K7WXWeGm0Q5{XEMqKT#C1`kzg&*oZ>RoO_vWL>0Ag
zmPVSdr{{HX9JXlrR1TSHO%qXZer0VU-DlhwmAODH+9}&eAHko`-jC|Ru@o!XY{#JB
zHe}EJAYgI9c???#8d^ythaV7J9-8W>n=>{HRd{>|SEo4F^?HGIx;uQ%Y&&F+4B4P<
z?3@|HDuLRWt@#b=1K>IGEH2n#Kc@lqEILQ@wVY;r=mM)A&TPL#E+u7dS4H^~=`KI#
zn};+eIEcBN!;Cf8bLTn`Bl}8FiHB&CBxq<s(D*l@0vl#R>n#RWG@-tI7O2`^Un!Ze
z>oGY-Lm}=ucEbAC5#+K~LGNR+UvU_=CFLDWDJoG<j%W)|MfJ$%Y=Vu`u(IS5Pi;EZ
zDw_Fo-=PpAFbd5^4kIMhlZMI}mw*1!KgAaa8~D|5jfd=mhwp$U@gPJH{P{vjj&q45
zNRU&&NC1rW`I{x$$aQ0R<67o4D{F)cfZp}N+rMrTVMUBD-yKEwO`W!nk+2dQvO*L1
zQ%vDz=xF-4#nRxfS&5vqK$5Qf6#TPVSphbQ{+dz8fo4*ZeB$K*-lM6Z2H))nW%pbO
ze;$bKAg(=hJFDEnGg3JJ>MYA$oq2Agb4`1P=BaT{Hypo2<zFThOmI%wuE41W3;+Ys
zPRCLNg-FOh5WBGet-_NTWqw#d6FdsPLZn&Rhfy3I|CJC6B1{Rf^q_)H9jW@LmJBL#
zf9X6S%8R=^sc=OB_C%MZ&C07WHnW>oTpT-ovb~i&f#8r+YkV9O=ns=yBaxvgN4ru%
zhPOWmxlWY=U4o_=i%)Fy6R;b+S$=*Ua^0}Bw{7=F1pvLj05GL^#8`I<$r2vwD>Od^
zr@uF&u=#^tj>;2jG^|(mfaA(mGvOEm>%`mJwL0>mtlJ=sXzO^GAH>4Km6f7khGt3|
zfuHLUJ$u_YpG#7lrlDi&94r~>n=#89^*G9F^AW6vJNkpaR!K=mT2i&^(GY2)MCy<Z
zzaqxrdjY~Vmpd#B&aCxsQD0LOrBhhGf}^mQ-Ulr!cc=c2PJOLDl%?C@gwhTiPV!X+
zWmp$wnSvr2etzjng;@rrUs^A~bC_w$>OGyM0P9HWhN{5UgCL)oqnONiHG{t;Lxysc
z{pD(j*EIwGT`df`lWGX#ro4<xPXkV*NJ({uQ{p%^2d%|9DcU22MQdkWyinh%LcSyW
z_jzj9)H&gZj&}%|(fC;(dr*P&dTYKpW#M&-iW6+fGtL;q7vcI$do$RjQhk`EBqGYg
zDhUV>3DcK8PY*qBPa|!-`|e6jkVU8XC-Ga)|4dHRioRrKxE579ome|`&y*mgxc(jf
zUM(ynkV$3gpEQ1HD!La;I^JA|9FtW8?-DS4kM(K-y`XsH>Z!6ngL$35UrzGXj7Kn2
zt7BEbr=kpdqX*;na4_jHIg7?YNBS9+-)q;p9PCeIJDX8KjjC+dIV&Vm8=;hR6?5U&
zwn}22di$ReDL;+oyz%@h`UVaQ5Zrq<S-W54vsODM4x0H0qas%j@X{_T5*J#4A+6dw
zLGW!u<*f}OIT<-<!-T)c`m=~j`lw|*%EXT9CDU$|y-zRzfH<uoIQLN1_kO?3qGOBm
zHSOjQm^oNDfS%t~+Hlv3xpq-K4}q%~;=Df(RbjB|2vbs#L9ddElGMujOhBo7i=;eD
zKBgmHOT$rS{w|-qk99_x2--7L4%O*gggIde=9-@j6>XUCI?5r671pmDWV}R%%jLJ5
z^2jY{%0waT(VV<;8pb%)qzv=9a&B}$KkLq^?o{a!KjU~^i$j@1A?kI}r0D9v<@sDI
zmzv~l=UycLzF2a|z0hmy#5Hzs1cne-1K-J|?NLrjoXS*{oL2I$+uj~yX*g@t4c}x>
zBK}?1Waj(Jrl-%fdWkL`Zn5g54?cKbNe9@5nFHRs%%O;~{7n=T)UBbv_jU0}KA~yg
zN#t#}S&_08?rDw_E<{8nG{oXuFEOri9LdZEjX~4S+bVuL`+q>KZQUTOxODM~(m#%S
zBccb8vsLyn1-5juc4hbwqC&J6B;Fxf*!(hu>?+Ns-LFa?dS7{Xm!O5`K9PV}?|7Ll
z_fU*8E@Cp1%=e~vx>2dFCH?WgkfSUp{Njm6y#dlMp@gdL@@b`B4cwpXBzzf2bY6-l
zyj8zdb{||IVer3NYCc0auJ1xddb)?-5Su0sq5r-JxB`Uzc$t}+#nQ7!_q~?bfRVmk
zjWb}diz(rn>RWZ2qLh?CA?^IEIE5d_x`Lm}KhR-BSc<c|bYH9pkbcFTqlr52T;>#e
zz;m&34+%tY8^S<QF4Pa1&m_-{0zkJ=3SAG)Z7eH+Jv*HYJalnlPXjN}KI6B<vYC_C
zSEPFYW_|JIx2^@;z51CRm0>?F3mdG=)Bx5z+gZ6kII)AMYw4gGfWaw@)b0uj6hxRN
za+Q~+$WNyGbOvG+UaW@JxUTkXm*}{GFEVeNuBBf?E_lKKBvRMJXl65~Cqt<Qnh_cc
z_RNpxPnHdywB!CXUOYd!1jo-7^!8C#)a8O7n|#44s;=D}?uc%l{F2_>yQwrH$A*)~
zz~SNmjkv7M^Ks|NW(Ul66Z8AX^!zBVxIamBOQz&0lZE#$r543Df8|7>aKefv&AHe+
zDdn*ekO_(w(SV}k22R6nbYkYE%8ymZ&bQM?L+V#u&^-_nCB$8}J*po(*(#>WNUjT_
zL4(zFVTY4lEb_jQjc6S{TWUj5*z)YwH-#0GvAx^Wi7GA8>^O`y#5?ClMyqXgeM3au
z(A`m1g@c}2BXbUaTV<^>K~^<5c!p8<AVAau&>2Sy-e&lG#t!d^E@T3}ml3X_x^GKf
z?9A7d%%wwJlt1?fECc({)5yT&`WLnd-26^oVA*bGEdFzV{7yRAr%?|a+iQ`}^_<(K
zu>u%Xo6UYAHvD>TYI<~Fhj@RF1n1W(7r0~3E&}HYjl5$BfXwmz#);0at_Li~CT7`>
zVm~M-Ym3+U{1xum-(D9M)nRjkOTwhjE6?F`RXq0Hh{WYnT|GcQhy`30?~_){w<%!C
zC{fYCa)VjRjT`|I5gN}UA(}NPj;1mw2nq`^Z|GJZ^{lgJaIGjpFf+^^TWtOeLcdx@
z9}f8trcgYC*XJwerg(G8a+?c*H`p~7y1}tMT2gYQd=^cykxCCaVWsZ)=+@E9*{!~>
z;>ldx=O2ecX$&txjI+^XB-26Mz55mpkt8}W>CQ=mA5OJ18ZSUp7qdJTLtG??J8lj0
zR7kSmf@_`bT`uN$FDNk>w5n?_;f#|+x}`ljRWns)T~K1mbKO-UG9lN%pVP8;evqL<
z6<c{X*y(Y1i@1Q=7HJ@lJfp8Xl$61m@BNGvY*?@vv4=1~6p(yA2b4{e5i;_#14m*+
z#{;0fA}f=)RuPQuc3*(a)Rq%C%qHg1qqTQ@<+n_h&xrpFConw0BTd{p)1sBVB(aJ=
z!bt|NCO{$vbH1VCJcxeVT<oGJaSJc)1z;mFCv!u4C4xIhq`Rbm-C<!ff=_qzjP;U8
zhmEkfPrz^qcV9wuS>JGZ4d;X8^cn#odb#X~Ok8-A@fF{^8iJr5y|TiqgKh^;fzxFt
zRQunLHiAnS{iubsD@eEyNK;Z%*Czd+B=pQ%N$%E8w76^Ps4sp7V_>NFgvwWy48!Pj
z5{(SlOJqj3YK<zMt0SkM9jOC!kju=cnor%`bJhI|UXc6;^EL}gUkJ8rnMiaufq&sT
zLYE7N4q|w(5NOw86)9ix6x}0-C}(coh`MlhO2ziIlYaj$B@7sT0seH$c@~%I<dV`8
zGKUZW)75HfT6^e(WV|HwnV{o+!JjER>hv=v8)5Fi`h>q;$3Nd;%}X!r`Q^0S#E*vl
zMn#N6^Sv$8v%q6#FWJ4+s2atp?b*W~S}p|96xImT9s7i1wdDHPYj7(y1Ly+ldUw$9
zE(Y9I<6nz2$~Sq|TTK;N;6w(n<PyY##+`V1!jb{q;8b6{5cWS{>3E@NZ^AR@M9{L5
zzBkO>4zU&u#{yi4O@R3P0iu{|8b`n&HC?TZp}#}MbklYI?4Uh&c{hQ|c&|_LEQoCY
zJR+Xk?Mv8@geZ}KSAqBov3oln_g4<xFM84F>l~|yYTx*RY0aG~BqOT85X;_S2lfy;
zfKqQt7uS}(V0bt<l;GWZp&L1tG@zOU%3nN<JdDz^5xZZL<DhuQ6M;>hKMM&-DD;n_
zkGra>iYg{MS()Di3w|^hfW$R%A~j!wAEHW7gPVk84#zPGug)UNL2Cpe0Tv<(E!d+k
zDQ%(BdsKh>gHsrV9dEdG5p2SlG=*VZ(lr$~*pb*=NP9LglZ?x7zlVfbN-#g<u@wSA
zLpdt16j8s*O~Bz{?{X9u<E6mkP}6!_Cpdu!K7gpB^*<s>cOwE^JAQ4}#9L20Hlfoj
z)eS#dUySWVg4z7Kj>5XvS3pTef6WO#lh7np5>=7Q56vt>&?(GqLSDe*Yja*%U$6Vp
zs2l%PKv$OOEzLQk+qzDBmHj&TU8yMGTpATgH~TojP=-dET3_ts^ENcc;Ckk3fmAZh
zCIr#e<Rh7~vP5=2Oe~u%Vi)pSpaa5=h?}G?cD*TFjONjLN>LSqWGPr`dABdByqj3n
zh7;eFPfOE$Jj)w8n?BjE;ZV;4Abg{$shxK3h5wY?OvT^#t{zOuTyj`GI50_qZ5;MG
zW>dU3uAIoRfbtC$6C>SOZCP>c0U^+O->J}EEoO0id>RvvrZdm)7P&LP*vxUZzIiCl
zv$#>H=u9`rq>dUxAu&~Esy{UQ1>oFdaMU<k@R9B2IfhaBpICg#GJD<$Z<kyIGYqe~
zHj<*laJf>WA04za8}0?0NeOv#f1MEgV-Wj`<NX@N*P(sU?m@W!)<JtcdL;u_A8UZ<
z700;=Nqx)T&;`nyQbX7pZpwts>92DTfVqID7xbLRgpCGs<?Q?lpm7))MbBgZK^qI<
z5dUzr@Zdx7i-bGvv=Y-vMO+evjtS?fo`s*jqNGE(TX`rb$S_W8Gyf4Sa=>Z!Z)_B{
zp}I%G*t@TspT6>=jV5O{O)M7Y^6c{a6%q@PV$jcPNG_dl{ITD(ne9LPIGP$=&xyRz
z?^Gt_^=V2#GvVQ0wm0{aE9l%bpc+~;?`xH4lqCexMpj?{l;fMJjnDroD*dPUW}f{&
zKl%eFpRY~Ts#c&%)!MS%gYV%ys#R63^?02?pvnPjt;I^MYODX75U4BQWb{AQ&3}r;
z?<QIxP>t1ho%wBlH~h92o4(&_>u<;6x48&v()#ZgP_^2(qw;_M=iB++=iUoHZsYN}
zZ{g_X`6HkJ6aMx?fD$VOMMW+`)U^N%Rt%3@g;ZnM>WD3?ha44W<N1^WKo2$PjzZAm
z_J%lam;nHG<@H$4QG~zmx!AZ92jWelSCm02_A@aFJ_rVZH!Ko7aprsKqB91(g&ma}
ztzEk6;H$d%CgMnIZAu5*n@SYYoGpPIW6=E^9j0&DQ!s(XxvRP`pWfAYQkDkmN>8kJ
zojep*jXv|IeRzjSy|WXh%W*2oJq_%9aqNoIN*Ze-b)`?F4dbu)?1Gv6JG^iZ?xOEH
zv;ldlrOxUj2k|z~!NZDvPWp^nBH|(Pdu(_#fssQ|p`s3>B{ai_;zB8D;tauWvklpb
zYpeVFIEAW`$BvBq%p>bSKm6QI<s0|Wnlk~LG()4<t#tm|*61^Q_THXBD;Yyw=>awc
z#d}tr;gA82dx+EW5yGINoSJ{u(KrEUe#_aK_-@>bUCKvY3m2(oO-)^X8W**-%bOby
zB5F0*S-Leh1zr5)8guedH?f^G700>?P_UJrY&n{)|Bj<$=fd;kKid|$RHK&Ra||<o
zv1Shio6yD>XHd&_XV8AS**|xX1=|x;-79E<OAYgrw5y?Ov+3|aNrl{s{_-@<6r%_g
z;-uE1fy*l3lD-sExz?30k)TI09BhemV>>*_6(dz_6GKLNq~hb33MBWt4LM<@%<!kM
zOn(y*Qy^}$uDGY+%dpmw*l~yKy<)D?I5brS=4dgUz_Uax5I`z*(I%TnY!Nv&h=oOm
zBa_(2&G<SCT4;SDKJq){XNCy!+vz8391qSzS3gly``${EV?<A6VKqRs1r;LgD+Q}?
zERG;49l>ji3r9&fHyXpwAj+d&X&*^FHDJOsiy3E51hYg5Dr*gQ94Sl8KLd_awmo5;
zCf9o^#-JT%Bj6`kZCm!{C(f;$*zGpL5ZX|C7P_kHbJ`&<*X!e|ZaaR-NkGZ&(*aW4
zQURjA!`F#_&d7Lp37*OlU+Ce6t>iQ}c|zC`5X^^^H-^uJRndfnk<yhS@95^qmyM1u
zik(AhoE>wP9|M_wE0&pH6`=tDHblZO!f(+!j7{V6#D7Q_nH4ql2mMQLp8L&y#NgOV
z`R4J)Cha>p`krS#ZgYnA6la}=_F8;-iY(Fv>iFUR=onAu2M;(4ut$2iU^1UWz8MA8
zJ-4P(F{RJI^k5V4n-H`0bMjkn!q%;O`+!mS6f@E64oj_LHM%O`)`irhtYj-NXjPV|
z(XWUtV<^Oj8va`g(AM0TZO&+*dAb^V8CMbDb6C5x?#$eCOf>!LfSEg}uJ4V;xhtMP
z9ks|za!FF85Q0Ps0EFRX52X7y-y=#U`!nz(^T%yR@||D%_!4|aI&?gEt-P2%1)71h
zy5YeYbYJja?&s}KR8A{#ocz>MRAGpe3-|X!nYgxE?j4h3%Ij&jhc84HGt|zWU3|*5
zV;k=?>lvx_hf#SatT*}~ojLg~Je#;oqGpeV)3#tggrV(^ThDisE7vixtGsmWC166P
zbzUo6!6mXff@4Lrt)o`vZ55wvXMh``pl}I6DaEKgGZygm0fCWwv0{sP0<*hF%w=G6
z;7oL@&dyL#xh_A29KSVgG;AG-l`3RdaL=Vq7Hkku9)}w6pq<mOcsTNBit5<k)eKt;
zP@V|o1=E<E-{B`O+VNIH>D<~0Jsuc3lC2<2wdZ=;2D4K7T63e!8I<S%k<QXU3Lg<H
z{%2~6-t~mcaCj8dkr8NW9WfTmn10ZD7$6e~8A{qu!Yw8OL*j-czpprI9oY}u15|2K
z{8lD_L?;q_K|K5z6A;;cmX5-;jlocwd8?Kz3?vFao)MQaNH!@F&$_h}KnbCSMCJ=t
z!Y}A|6d4p!(PWKl$JB#VpYpscZW8`&0Gk>OJ(kz~Tl9CxB{Zco5PCa*iA&<?-H!6O
znG}H=Gv&=uDaSUWJitR@oOn=3mE(%Q8bq?HZnZHdN5EchNn#ZtA<;V8w1odf#gCmm
zWNGn$jMsBagxnStmedI`F75sgKgMI<samLCSa5J%>oISkGQZ>ggz<3bw@`ky>~Cj3
zTPNBr;{lbvp6r$bxO}^mcCO_GB3dw4ZG3^m%}{zr!#;IK_q=Q8c>x=!={U9(uI^uZ
z^(QUm8*-wjg-R;G-w%0w2sw78{Ufn01ekt1Q~Jc$ZWWYA;@bbXiW@#0hn_4!q@}su
zAMF-ee$NerN61%PG?JyU*^>b!?>2<E&DT?kCyqVK6@B!cBy;#XVZ7cj*F8tItg+j%
zUiY_hH8xWwiBe>BN^I1yd;^e7Q1JeIYPwWS&3T(<mU*FvPLaND%ueAqLc-Cs4(i}c
zbI&L5kBNT+f_r=oXkffP-(p+Q0xPDM!hVM9A&&MiYJddTCS<S?i9An0o*BY<eJnAS
zJxJrjDZ58_6`%@5+!X4%I%Cg8>9(`sT6Q-HJP3?*;^|tc6}a4~^vx+XV&hw2kQ2Qf
z;s66RMk%-$+OVV)6y7aj?7cBQqrDwraW?M?KptZKz%Lv7S5h1>gE&2xC{WamRu$=8
zU=uB8(RWfF(4;L=T#n0_<H%25P<UK8JD(&(XY^`I@93%7Rt&#ebG~Nzh9B~5k7pDy
z=YHbQ&oT~vcL+JY2MEcNo3|~9#(zF6pQR}y+HzZ^{$K*l{fsZqbKfS$)RDa?o6`Lw
zl3pY=;nq^TF%wC;W`7RrBwXQq91CRV$HidK9RnsyFZfoahS>BDiqJzVtRa?732hl(
z=m1TqQvBu)^7|89?3J@(${-bhD#ersqC!`$nBY{joZ{uSq>BuqrY@a6#zMpfF+!)d
z)AFcUA(QZ#(CC3)LJ7gJEMg3>U<f1Tvxhq7N_)-U3<E?Qmy|qBBmO_rlaQl@0o44B
zQbHsO$3fyQ-v2U*+NjwLoIdvry4)WUEr0!6(HM}rzg0|8cw4&|;-xdhd7oOf#zm5n
zL%S@V;Hkf{H&Cx*+aPLRsPAu{P2{Zx7(Z?%o|fuI0mzk7gc6tt%YQrLxw)mh<amoc
zSh#I%)F!meYVp<?Gv@C&=im#y4Evmf9Sq4b46U4}29zUG7o-!lOg$nIBOE~z(%?g}
z(QVq56(N>!ekK)N$kEyV0}dPC|E)KIN4op1MYW$Kyq<6W#K~Vs7YRAQ%m*iRpSi*O
zgp~<!W~x7}|6u}N%wwmBDIr+`%?)kD-93%F)c7>5Lvj1NNo86H25ROqIIaP_%$?C$
z_Wfa&%SwxBOp@0zUE=p;hX@dhYus=Bi<87vb<zb`+#}+j6Y&ps!|<hZ%710yqio^X
zmvFgk&_4=G-%8u&RqLz<eFmcsi~*?U$Ew=whDv1*Ba~@DI@Gbd*FKJ(ZadC*I;%;W
zUNEPad+I@#x9G%njLn8tJbA!HCu>GG#N?NPtr-5m4{iOD=aFDH!)-xG1|7&*-Z&#c
zwxB=HH&3^a0TPF0rr{pK$I2H5LJ=tvshuWoW%%1R!WCF5&s<s5Zt0swe|>Ax+qFj)
zioqfyEM+fk1Y1mJVKmDJgrNe?un|HepZg}~Z`$K0U>~NEyK?9Brw{mE=>U6#rB~<N
z&k->E2?P8q0)=k+3L1to0Y5DKs^G~>6&m2lcBm7XSaK{yMQxaMhE2f&W9gWvh?M7p
z-z<iR-gEoYl&Ly0vBxTwN2Rn~+GLLFBN-EboK1`v{k(kiMg(;S%*l^eBW@b&dnu~G
z4iMkAe%KLrPe2xZK)jTHB|{%gTk5(J@{pQs*^S>7RQXEpjiG>RCx}Ei`T{S{iA#E0
z0O~gl=KHRISFmyQkU2PYbvR6-He2Z{0iwjP&^ftq$Pk->m>h!1=u?K0zRG3c_DcO6
zVSBPYTLiaT1SnW(lo(lwMuCO@2SUqGli#vv{l&X(X-UxDG_^r{ek64^u~LYo5>7Bu
zI^SoW(B*SZ6*EHbGyXNE)jx_C!k(ouHXpPG;k941CxLEAvI!#kDBZzKa5K-Bq5y^s
z*aJX(<2AHBMuK0(nHGz~i)uxAVaP6&WDye~x&#SDZrYD5-JJ1B|C3<lpJ{OKH9zjp
zwUVFv1g){PGi4{4&dGAJIgyS9_dAw`xJAzj*D*$nWWy<32JsH9y42bpt4=hKZKf3*
zF}t;}g{IdT{AXwh2z^yrYWzuEoFez005O!oub#f<Bw|(^b`>Kax6}#B+vuhbXVJM-
ztwh#=!JheDm`0FWi^qX9kI&MHimL2PLj4{?WX3>(%7m&w<&$^@>b36@y`NrbZERG7
zoMr7BjQJ9Iv{H$8ys40?r|C8iYBK{hXRh61Q=f4Z9Q@I`7OxE68P7q1k(Tkj9bpsY
znZjyH2C7|%WTMTqsa)3rqBYldYKi@EMOtBq4dIgA>0M}f7RfIQCGZ^S76rflrt<*B
z3WM_f#fIGKCq8u;z56wmhac|ELS=sImv#`#;7;YfKlU~a`<>8?8mCuxl3*U*fktZa
z{lG(hv4kvoVAw0+QMF#hd^X2~?^g6=YD5riUaEViIe0z`DZO)vz(7#+q<>WBlGjO3
zN4K15K)w?UCDHN`D;uPJ!=Cu~-<lc$TcHjy`Ir5LTXk>>Q8<n9OoD<f*El^u%`(D|
zIJvV}S##0m1huW22JwF$3s4;hJYk00+kd2vV^P%@Bj!*1?(sbjZrbH4()l<i_%V3P
zcsSiD9=53ew4NWb{{fgqRNT3Owra>u7I|eIdKSXn5L}MfkT=F>{uYc=9Z)K7sOw3c
zs*Pz0pCyHzWgf2rN1p6t%Irngb{v-n)SNB_g?Zz#>c+Vcrqy--jZ7KG)>k>Eb6y_d
zOuW`K1udBWJ<oQJJ7U*la=$6!tL-wcv^CZP)CYMd8+zVl)7{g(oVyX?OEraSUd*uh
z8{=GQ5*N@0v4?qI0oLMHy|Vtzo@GS%<E8#PxLY|4Qq;F%G3eNZe~4W;HOHr3Z!m<a
zZy9Q?o?35SyF71wbUv**>u%=?HC}9=h)@sXe>sw{>38tvFvA=gq_9V{(4P4*_*z2}
zP>$tGN#S=^Uba*~U9ixEg3Vhu=;)rTF$VO$sGR)t6`7fbY+x@eb-^E7uMkU-8W&qa
z!4r09+k;EUd#aFp?C3ZuulL+k-QfNig{~?i&)`rWalX9o)R0Y`KAQP_3!jx@Yk`K=
zg10w=N<BcVa!~S%q(k~we_D;x>c{pL27B3?S=U_Iihu1B&Wd7FD;M&m%!<D&)evrY
zXKWgREK3B_9P}RjtdZF8)u<nEw4?#rY~}=@A9jO(EtT4D+}~@uav9~f5j$y4z;;nN
zQhgb%T+AxcOEh=si(_!-UuurHRSv;8Hk5vGLg`hcDP}uD_J(}gK0IN2-Y3!EaW>wg
zd6dWybMQX^Q$Vc0swr$udCEOYg31p}a!y*YNtID9RIxaQ@>Ghr%G=d(G5o8mriWpG
z$bu;2v36H@mzkJkv4n8!aWpXQ6}c!!wA}ZGWlF^}i}jt9YI{VnaisiS%+bwbLoX@@
zbr3wly!b20td!9c*O+;_ajyJ73WE>)$h#a1bGG_>?IA~z8xWtCnqb-r7o{qxA2B^g
zx>oOe{Pwh*_Wc(RX^K})C==lEr2WhbU%&P}Fe({UXbL##gST0gj$!OASja}%-0psf
zX*_Aqpiqd>^$WPgG7590h_AY{0{Mc8HDZreVO`!s3haT_&lMPbd@3NHKcDe;^WTGX
zAw~#ULV?;@`B7jjsQ702V5qNT0@$Q0B2$Nktw)eM+fGxjLnO|o1zub;IzI^%JkDE9
zZYDfYJhU{Xsext2*QIj4C%&*G$(jtu=brNYj^@Z|q1Wl?bE1*v#`Qt>HfYqYyWZFB
zcEz8`OrbU|1#tW9aoZMbpH-~0Am<Uy#soxEstmTinL*;&vpPCUT;<kvzK81R8Ej@%
zDGHMD%+n{fOmtf}l_I3ar?NxC9W<z0MS}(jQ1&j{OqQ7IqTj@#zf<9@kW^#~IbuQK
z&QJE*oeGAC_Bqb%DHBCeLq~)}&?G*SLW-cWBjUkTrGuXoIg><QCAM;xQV~~&Sm5$b
z989@vTSH;y&i3K{==PYuNMsydc(x-dTEqwtQ12#35fQrZ_B;E1VDtQz7}f<91<WCx
z{`)S&fH4;kjp;RlH;7Xq#)De`G8tAcy(%EDEW8*6E=oZFQihR}RY_G<REnsIid88~
z0?G+NL!<Y}@dzlnqV0c3NGF*HBuhayt!jbVgjrXzgRYusQRevyy$|hqL?kG%p~mC8
zfA#1l<)s2e73qX|FC3lUYFci`ZV3J#uV>tBzeqjKd!W^L$DoL!uF0#Cym_M3BU!{0
zO=429%Kezyjp%(CZGVooX=^2?sCIWJ6j$=OLWH*GIGFt##5~a{&S7m%N}7q5|28s}
zpVEk39>u?hyQ`8o^sRO#IUW%G-!%43<x)M5c}D>)W(BNp`dDqsP~w=Q&^y2^COoH<
zNQ>XjdR~LsN=6a#1GhKvq0hduFYC3SE#os)>a+C`q&)`m>PwuFb}q5@DcfJRi4;w6
z5Rs=YJ3-*Fvy51TesB9TI;ZR6aUp%duXhx{kvJeeH_baP=o)`gs;Y}vH^8=$*3>*#
zm0Q7`({V>BPH&#~Cq*1Va9gc!oqU0f1)4-hKvwA-Oyr4^wjn5{(&6Yf_eLBSKReX8
z=Sre+H_E@b_mDJ+_AL82&i_@E12Nj@EO)vNeGX;gxyRRp;ye~fN`m_4kj(Cbk7;#p
zhpBnuFhr!18%ffc7OmSYqZGa1jN~jVnZxeLXw&`pCKLQbYENsE>swW8S`?A^`OOX?
zZ`We2s!{2WDhR31F^C%#B(NiAy7o-`ZgKfv<bcWfScCMN1PqV@OfTazDn^=UC=>T2
zG6klClY}${36>Qk5Hue=IX^P|?JuNP=AHowNVIo>e#iv%z;Z{}N#sll)QS@VE`1bO
z3Q2D<k|a%v7O1LdLW-i0rko;YB9e%ZiD*4R20~I4P*T!0Kw%uBb^?&0C}=2Zf{#?W
zG_;9B<pxxt>aq%@pb84<T(U5aQJ@|q6C6E0<$K$Z?q+2mYA!)X>$N2``AFvB)H@WB
zR7lcN6b?j$@;0c5f}$#vu31w-O%xSXNkUU|0LU(^3?#xILR^{(q$p@835J4-rKJj1
zf}#S73J{^+B&_`Y-z~_*V!-Vb(GM;|$3b`$yr3=hLK#eKK+3AA6jfdUYN|0vps^KI
zgw(#)l5ql{qK0;zOe6BAO!2~1Rw>o8Dw|}LKv5Ozu{kv4uYEB-Loofv<$($-^cwLf
zxENc~mtV@h)9?%t_R4QR2k&l~UjN@hzihkyNF73aHU|aas&0}w#Hz@+kj+0xI4&DY
zw0T57Us10&<CA2ns?6K23YsdFxLBvzB($NsR8{y&#G!8wkTL0BtNP6+L6|_(FGTY6
z;LW419+qg?jTBHmvcW;9y&@Qw9Pg<)VfVl>5blKi#0QouP&tX!_`-hM9Ge21uKN?^
zN@OTxq2QsFUoot5WMl<uomURreq$d7sWAQJ{hsL$o&pO{3snlD55z;+1Kg+rs3QoY
z7n;75JJ7n1x2p8FxWkuhB^08nyIyu8d^;R|>_15){q|0Y{%qW<W*1Qo7+S*&YXH=S
z#bsZA_Xw}+l*x&uqDV+6i9Mh5#eH}EW+;)ee%x=Mr!haYOAq-qfUp=WB80|P3m`B3
z2m+sX<T{_Q^5ZrHk(&%d6Zc|g={#q*mAZ6L2}nrF3F-dRU8RaBki37@pc=&pQUgsf
z06{20G@rg>@DDxz$C&+^WJlpApdsb#&mP~y!dn$q*JDjkb?OIcBN4svA3?2%B2)Y=
zgk^7r&&kCAl&Nw36k1yGEiP0*kYjcO;WCPFQ3mi*#UmkA3M$D>wJ^4~TA%Pgk{X2%
z$MkX@N0`U#3K-g_%=v0IFlIykd-}E!H=7Ottv;XZ|5JU=_kO?pf7AcJ@NI0SU-)<Q
zdJv3b5A12eZ7;;31F3WLu!o9>cYK7wk;K`NUYhNky{lDw)*nQ7&*@T0WP-o!JwP9{
zb~qYA{1SM0V$;Go{^KZOAy8F8>I&u$`+S)16_knS1JDWL9Y%Te>pt_yD%6Kg<Or$=
zsv$>{9)iX_U#+|Si3t4M#5umUF;VW9srgBur}(|j$$7;SH2tlu;(D~wF1h~V(ZQx^
zl6SGITNru7{1qO0{;lpMOE8ATVwD+ODp=+a*r?fmdysavQF@-h<&VK>USHL}<)(W0
z;Ny+0Qk@+$sr<ZI4s3pp-F`2Fknqm44+!|X*0*le_m-m5z0oNi@dD9VZ&@z=`gh%*
ze){O$x-?rt;I`>~-|E$;eJ#ya>O_@hr1BL5)F_A7+50?BckcXu7+5OSb}Al$L`{pH
z&T2b%#Sq=s+se+oxdvef)D!E7zH{lDML)~ekBwDy$1OClDZUq*h!P-wGA*O|H~9Xp
z-{b1cK<SI5*$#;N+t~)y{Mi*uPw9L=<*WNo2zccW?{Cxmy-+$c?n+eZmR9GuJe{B1
z)avW@#ST;Vv8Ru*SH34wsWj|9-}Q(Pr8F?WA(TgCJO`w~Z<;948$h;HvTu)b=)HsB
zAn1M7M7P05%uSPDVca~tH{>DdAxOk55o!SeQ4>$7$IjA|eMj*{{*Tx6e<t03$c6s*
z;7~?!g-`w<&+eqCGB3~5ztUgpz1CPeWQLE2ztj9i=8y3mtXaTsu0ym=5*5y=0Ol8H
zjEplOk(D^Ilk!AHRr1C>GX(xz#jo%DnQTJ!Zas2CAF%$D2nC3M!YlXI(DYWU7pZSt
z+=)+rU&pE$<JZbxG<lE^S<%R27o+^&m@L?c>nV<Qtzulpwp}l9u}K|kCr8hR72y~C
zVX}NIJ8~UFzD^X-pTqZm4h8Ls2tzb@6b9&C95>r(x{N{z7@`1)5-S{@JL9fT2Z{m7
z4t2ocJe`H9-%Kn&^`$)j+8Z6(&IPQ(C|B1%=4f%8^MkXDPh_xiFpxw<2O|cEBG2m8
zI%9xdm_{8IuHX}E9yAa^niM<nN$?UJ>cV!+|M9#-$28RULo-A6X<_1%k|C*Wicmqb
zsD%P)5MZ-xIpS%OdgosQuWQ4o(&IOB4w>cJki?<1=iVd3A2u9dluzzI>ME953M`^B
z1*KY)V#O9!Rasbw+ie!uTWuO8v|80#EDK3um9~XpXsxS8wP;$Zs?hSgDyfTAZL3RF
zQ7JW5vsIuqMwJ@~3ZN`eMHD4QQ7R!yPxm-M)QM~aTS}23YizcOV^l^&s;a8h8p|Rv
zrL|VbRJNirFd8hdp=v0i#ade^9805Vl1O5Sl*~~sW>F+e(zK{z87Wk)G%XYaQekE^
zWMN8$V#3C?S!IfY?M%9e+7{B(N>o`^wiFt++K9C(7F42Cg;oSafT1ALgMm9a6%{n3
zR1_3MFu_TMR@hOtQG`@U5TQ#_l%YWi3d)YAk_2QVh=k3u+F@k5nC3`g(*VR^xsbCd
z1qw<fLakJ#8mN&aQMQ*W99Ik@2LfTNCm^DR3}wbihbJZ^nWki<Cd_EatrjRLO9ZX|
z_FzJQe5#(33|N$c24rc1std}qDTpOxw#Ym?fkhDvVBmt0k>XsTaRY!Tf$AERX#dmt
zOFZSvgen|sWVJ{<)A9QMuLi^%=$kn4_;CGC|0=)B$o#6Jq$?;hI4}fqASOc_1@**m
zYIY;(xlzIuI7oTMA1MWgZ>Ktx)<e7<eHq*&59*)#4~c;ULJ;8z<UvX4F-$cS%6SPC
zgTHcTp)SQ&wSYX}IUUL1Q3UCO;H)KJrj`-^r`c!sg#`hc7z!Z(PxlY=opAR{<b=vZ
zM!&;|_>et4c0#iZ$nKh^=0)d$_)lPRSRx>ydtink?t{~|3Bp5xgcxMOBtjHMVgAoK
zC|HmPgOa4dFx4Q)1VoJlps@&{1R?~n0~8RHQZURy%qc)gMF<&x{$HjL(pZK3!;T=o
zqM#S!iVA}|+L5=atgvAVw3J`<&RBGZ>F5AI3eKO{|0qE4JccMphDcy)WB%71_f=*G
z;U&ogf__;X6!J<?5Q@dHNqE$cLTp5~9Em_}C<-JSWdw+fEhQKr!3m_9_({i1h={<<
zfAq|fQb~a|0;nL7fG}+;iBqvOdoUh+cwp!bLQF&yK_w+6Ck!y3iT>O*o2d*tlx`Zz
zAO83HjvN>Ls+h!eYoRO<go0@TuSzvD`u@uWub9hAl@iS%J*)$4ZqAqnff4)@l0>|W
zR3wY~GY*gM7<6&QIb;Nc6rT=Tp(PX_$2bto6ksW&jF5E^;{ZLr-#)lVe!lFc$bRbm
zQ}H8z>-kuF`Z^tXckS>xo_U|Qt$w5Yex+2wACWOWBh&MJFZQnzR3X5oq7aMyhatoI
zzq6Mkx_#8_3(?eNK|)XA@z5@B3OrBp2mA<{;}M0VKi5E5uzeOi_eMXa&Nm#Oh+;@z
zuP?SUEUL2Arlm)X$w=h>P$eqg=g0cSYppWwo7be5fPDj%2~kWC^OtDBkb6r}|A}<k
z6aBnV%J~PO3q0s=-sk88g&`yIMMBX}@gvt2)pCwlo}vhTSSBEXf9(V^fbk%XOc4K$
zw7=3cZDBHkC*V!L%;I;pV<+1tOt0B3g0@7AsFYb+sHzBm^vOQnw;vfp+%MdBeU8i7
zd`4Pg{ymwl?15=1TNW<@^<Bf~lAv7A1&r%E4=iz9@3xH5)BSaVS(KP7{xp|CxLuAz
zwU2HKhtNZWeb_L7f4A}XWaoSVj*fGnlz9W&nZH0!!oED8cMd%r&)6rVd0%^kV2UXJ
zn$~2QW}I(7_~>FAu;h$sXXjn?8`);{|3yy!3r@$}6qHa^5GW-#49+IoM}+g!ERgCP
z!LnZc4-WPA8$y>m;Ut7GCAZ>+h1-9HT5Tl<qbe;tUgOHyy);fLiBm7~7-U@qR}Luk
zy_Feu({Otj!UT|!5e)hC$!PGCh;jYh-)H_k(32*OOQ#<ZdjiTrpk_cJ&tx^6c5<zb
zO{Jx%QZZbp7^%xlODPV6Isee7KYk2rMEn8=@hlKcQ%ejCL`2L@0z{A*2*fRaR$ETc
zT<8DL{f14zgb#@NE@`!~e-{|~G~OAAeIAm2yFcCZ(w#;*p2zdH;VdTt&8Tn?hTamT
z&tz*kgZbQFglEbOPH>0M9F4oIZHQ!k6j)&W1cX$|2HwAp^#`NY^+Ph3C0Q!CPb%3A
z-4WZu0tZ36cY8A=s936vf!6Y|J5ZpKBel^=y@N3L&>%elH~i_YhNAiQtyvX#%0@7R
zAp#x&Dru#VaT|Y|gQ%tP0+!^8tI4KI>1^Ja%q9tH+PA!Acg@wy;^2x@dPgJ?NWJ?A
z@HzbOKepE|C!_XFDDA;vfPJ((zh|_M4?StDY>u!wA|<7=d;P{DugfNu;Two>_wc=r
zoq+Q9q1pJ!CHgyu$K(t4Pg$K>Fo|^`M43_><QLzIC(KxTP!DvC&c*8l=1(!!e6#+)
zFTy|B{beyBXk0(Rmc`qaDhk4qj8Rn-K{QmIpKCsldY{G=1Q35#`=g^Qme2_iA>D|+
z)3@zA|J8x_XXW&Z)`!*`Psz}ozeZ<z1N~!0$JsglJ*Lg-3Tkpa1ajL?v4EZUpZ-DF
zP@s@g%L<)`ky|Q#p%ne*<%q{!&juUve;{lw=otqU<|GLHzhxgSt(||0(O}vs&T`wh
zRVX*Dk!`XSsBtebxQcSLN>h`;C-0;%3FK4W2a5^|?-T=ynzwc9M0#|oZFaIcfX_>V
z>p*{-!Juu8w!xt4TWzH1pYTdgD18X;5H>!Pq5#GU`IJ&dDmXr&vXGq@JRC0&HZ|eM
z$?rvZ;+>+V2H{an3ZlkBzsapJ0o-*{-VZ=f>OPwKJ=4J0*2loZfcN)%mu_zJ{R(}C
zhhS!qh(SB%zfElNzCFJtq44<Ly^YdIe&s7n`OLuS_jVGj1`MarR)MKGNKbqi?3T#p
zQUoUlcXT<(nY?ImT+{6o@OfDS^8a&0F+Re<oa^mBNs)pJ2MZjSS6wZ+AGf2Gk7-}w
zwI6LB@7tZ}!^U;icknM2lwos-z&sTh?tee3-?9+(VX4p_RB+{l#i^N^B*keeXGlK=
z7-L9*;n+?rPO)~_iT<(`qy#1*!8REaSG{yi*t6uLwlNiqkfEMyZ&=`O;OmEfbq{JR
z@d~LF>%3WnYScE^J%gj;>eS4E5W7s;u4!P@O|#J+T;QaS&QwlX8=P5~dc0UdzKsGp
z%DjN_(nk5YFt);T%=ka6`E4kACWMoMDw_IG8BkCNy{e%-uu2H`U=;X>dLq9s<ddS%
zA}9Yfb!z@FPXjc?QCH!rb5+;7dW<njO-z1bZytXSNAD%LE3!KI)PED)&w93E%!YL=
z)p7!%cNA|)7r5n&&Kwn0RaJ563dnlbCtm9gyCE1k&TkhjPF{qLc*!M{n&@LeLpY%`
z=6+$y;U9!^;#Q#m@Qd;}l5P<}OjR!^e|xDmN)a5JBh2D#I&>tH^?zC1-3vJ3F6V6d
zf;Of3Dc+<-6f}aMGXg2(DBT!r10lnCmPHPo^{n~5?#u2kON|ns?xv84LLOOG3sYi2
z-`A&OA|&u*W8XtWZ2~3j7b0_}J+Lt_?*DW^=!2Y5{TcUS>5hT(0ihFS1=;&d1-qSe
znInVol5Bh;LJ-S%g6tSe#qylT6l<iUd~o&!aAD?xFxJ8ds!9sYDGo5z<7a#EOPex1
zHuRH|N)KBIhJ;cih)5`ui6Ux-CH%N%pR;*K)@jJG?f28%j$kL*vTi~#2tkno@6puU
zw1>Q#q~UVzAF|XMm$9W&m3|@1frktMcnXYE8Wg>4SC{GVdC4uc#t?&Is93Jd$*4hG
zC<pup^=H~ZDEtaLYDjtC;6)ytAfqUm(QP>Lc<d|TFoteuQHVU`1HurZcjoQ|C-Q~}
zXt9Lv{x^-P1GBqp0gy+t@8q{huCkIjp1;5LH~lc(8Nwd;pXHKo0F&493LyEE9_jCo
z(dXp0<`?&5r?1!A^+NhXq=W)eMuISeDr6_~0%MBMOZThTmL#OiBS?sU;r^`Aj}CYT
zOb-NN$`G)OVTKSTRLl?QgASM+55abj^_Tgl)ceB+)Pzud%6)$V+yJ)W`cA-xp*hqT
zFP<UU3`Kj)GY?pI4s^Nc`T8tXwU#04)h}z+P<uZe);?58%Lg($Ua{>K>BtAP2IRV!
zV5A5yX`Pr%gV}I!5mV-NR)hZUz|%$rKs+90*aVAUrm!Jqs5+CB);aMwcDnw8U6wW>
zMNe_qEx??o8mh^3z&_Kt%f!m_1&Z_~1&TY9kaQ9U0E&eK3nCt32*{!TNvt2!rImjk
zvQd90zwCYo8PC_%NLpSYF<(XLIlU+0WZ?(wx_@KF|12ou#4KbtuzfMsDZ_PxhJP1q
zbCt(4DzVTjh9}T05lB>_*>b~h*<rr3fvPYgYg<olqmnEN^nI{@FKr`7=g)`UKe#Y=
zLJ9fd=UHOBg^EA7v~{WZdHJNGodbCB{)UK}7uCOphchEEtoy9y&8j0whE-Nop^;ft
zr%uq|eQjDn;~bJ?q8gUlf)y*sGB777L*I``NAU6YwO^l62`PM>oc*kz-bh@%1*Y>L
zNc1BG0H_B`=y4?nWXGl>^QSdrW9=C5K@~P}M<AAMU%r0dI$D8$N;-sn*pvsPLf%!M
z`O{8)&mKh&ZOy-<qr;@cihBs_DfMfWOE5GR0LNSx%tSf}Kqr2Ey;4FFLK%3&P{HqX
z?a*II_;!=y!0PgHU(v4i*-~W2_p|%z{t6>TG`3fV+Y?b=UB6q&R|W0{`dms%s;a1}
z)#aF^+>Q~>Jw=a4k0Ijl?$4ZX<nLhMp_L3K)%9-tKR1uR5mgmy!7GbB>Iq$~r;v-?
zfd5^(4?*XxGGrc{Lvd?Di2o9OUXn^fi2FnSL1Sfs@qs?PuP+kSD5Jd=#5HlH=Fhx&
zv$hIfP}5P?RR>>AyFAPx13)jWmd8Op*%^&-{0BTLq)fe|c!&o2n2+H;M;=9!q{sIk
zks-tk#yp_)f$V;6y}i(rrMt@THQqf7&Ne?5)JsqE7;hz7gM-Z|s#hg`6IxxK9uIaw
zHwx6i{zI==QSBlKGy5k-rk_EA-t2#354eh;(pBi2Jvd9iG8$O3`2T0Vf1p}DayGjm
zDFOi;wefq}tJY_3grbKCVzi*Qo?W+wR1Z_{<Cg`dE<RExi>jZiUtDwcS+gM_CFkWo
zXKzEtI${~kY&uRHl3%g68}5X`_8e;?6>E}=6)+{Ely4uqN-eN(A(>u&yB94gNJ2g`
z<Ppy@>D%ZOH{4Tp_e;Z)IRp~yY_QIUWO4L<s~!>E%Ie(#VB{PrWRfciX)f)Vt>_<i
z`nT0|LpX|pCI2?d8>S&pe@5q$HhgAj<bFG;**jb6+%4p|9q8nd9%SM2p#My{R1^7S
zBWOP9?aw<Jd`_RcTpW-f$efq3CfYW*&OE!#;wp#H4-loa`cpKwzg{Ss{KiL5Tikfl
zZamo`sxLu~^T((vm@?H-Uoa2?N6Hz1ntPyk0?h&2qe<zM@g0>#fe)`<-wKaJG!B9K
z>PJ)Q3MhmqD5F@X?E}{VtKO9O|21lPog>)3p6Xvmps&G!7BEQQzpi>12D`}z-a-$$
zs7p?#x2KlBvxln09Lg@Y>>j>vUmI<^zNu)6GHF9nApjnDsFtDaU^!xm;RmReSIQ@E
zIs?iasG>xWvIQ`nP+_90s0v|8>{Va4`hE_lFLG$6$~;ByRc3Q*VDX*~J}O~1mt=`?
z)x5`;C1nyL6?Hko*$@zcL4Xe?H=k3cu5Ii}(gQvwoOtq;gC<@&J4&@d0RygNLXk+0
zTpX9834pqn6T5HTW3W9Y77u>??1B6-y91#H1HU6sdDw5*zPK9SYYrzBB^={h_8x8F
zdD$CDJrArq4s0@Ehxnr}>rnIJ+p<2x`3eFWTsH<_Zs)!i0WIm<$@&M<>}vBICF_NU
z3YK)HM+^2+TLbn??NY=2gC0v%zp0#wuKtnA0??xf3X7-crPdvTDhVIXIlT`3`!?2N
z;m@CqlXF%FB9Xb2e*>)@^o!bdrE6RCW|a*0B4_SZf6%YU<Q@CwFvbHq!J;1$2dv-~
zcl9xiJ0>y@9FO<(Q@AJekev{nNXIcqFvLHv`s%9$ME>za43rS4s(f9c@JdA#Hjv)O
z7j1v*&oG$|P0Lmr5{8NjHj;=RT5F-nU~_&~oU)G?ugOR8uqLv3zJUCcbBDo$#|tD3
z`5xUH9?lyIMQ}>K&cm?^VllX#d#gbDuYlx2wM7+FVp=I0KbZI$eB3nQfymnrw*v%W
zyz~5L0O>k#25?A4kdPpsobGa+Q$Ej^Q1^E?qB3(q0cBSmF?B0?wAq(Yn0++?UVILW
zHvI?NXLyps>^V<qr-a1mIh2W+`IQdELtyTjoAA3|O)xmMWnJu}O;6b)&xA)PxoIR)
zqY50b)J9HwNlB%|=oC!qcXM)$J{vN&&V#7zL>_L(ht!>i)g|cp{{PIggipiBM{6Vc
zy*aw)`mFumnm1BsI4#wFtkr*H%=ENsr^~X=56)@V&@_||SeQ^s38yHK{@kOvL$(xu
zpEiD(bOP18?$szo%rfb-Grx-H^(r<L=6|cz58c}{#e78))D;S=bl8Dc<#o4Kb$Tp$
zHEhh?OlSS&xanTUc7N1w&&Lv^^8cd<qKRh4{p%jn`DXXRTnhRwgm}1Vy+2bq?|A1q
zk{?Ixq7Fl6z%EpJ?lu-Fm^>v<B$nhp2T#)?KepGo`>YeXJNg^^cCnwix_Ju=1|REO
zK3ZbuA2gD?kX5;<aR+-m0*(LG1s9u#BgeiDXji;M@1(uGOZ~>k5Vu$q^a;-a;hGRd
z_wAh=VV^zuxzP5XV>o#FyH?ay#?JGqj4#DsStRK)scgzFXJKvwiVju`XP7B>2uxh9
zhEA@#jTq*AJ_ShUR;xvdwm`DEM*P&r{@phe`wC~3ywZ>4q<pTQz5GXiT1hPA`ZOsY
zrm9odhXZ!oBS*KW`n}EO(J@orp)=~}&$h1}82=h2NKoS!Da6DF;}wq)P2W=<`V+Q<
zex=p0>!-%P(!VYVys)eaJ>zsCb?i8M{?XA`d-#*_+abf`GE^yFNb#F;H#M*q_#(0@
z+vud=^*#1Brb{R#**J8t{oc*b;HMr1<oOhY@zM(JeRa5|r{uOlZ=%`i*iXXxO&n}}
zHk}t%{QBFPv$<~MR)QRZSiUfAwfzI~ho{q5xcmL>qKtIm)ADe{%d8NQQ|%(U`>XcF
zBr+k2Wn}p%@TftatTIEJFDJ=;>UAw2MVy<j<0KAu9-1^iGU<Jus5&}u{8V}_lEh6Q
z`AztWjzh8+&|0xciYz3rOvxuc5hXywup&fp%HW`l;^4gB%fs0BuMQ@H!m`s#3^@4D
zN#H?FO{Qu(MBGvGbE0op3u$;}?`Gq5?ZL$#+`e)8cKiLAvGx6Hzw9;knbPE=Lj%sn
zdFsI5+FYedCgYdI=x~il?+~%ljL7BWiBpQ)SA!+wA?usj>`#54x3c`MVrjV#B5}eB
zZiuF{r5{dt);z>G(p<_?&ZL^WX~|e?YNbccH~I2Sr4BZemSYuiUl@L!yDTo(-XA`_
z&S~YK&wU!~6G0`5qfm~XsO8Vob<W#Fg^lg3@jW`n3STU@*WDQ<CYiL%vbIR(O+dOi
zc0WG9c`fd)G3d-*@a;U&sF`}W9ZJ&XUvP8hcWS`;eQdWB*Yr`5Is@@3wQ<~#N$Pv9
zRZ`AW-Jy5!(buX5s8LUk8y$bbF6vy+^k#jzxI`A@f+Aw>o)x=YzUh0<mdEy{hA=~)
zqVV6{3mmRV3U9l&f4&c0KIZm`V60xJrFNtQO<rst2+I`l+`Mg@y%h$N&POQDJCaFQ
zuk&=@bWagppDHf~45<`l$l<O}$<G#qeqEx*D|zX`r^wFK?`BtebVgNU^0v=is<roJ
zeOf5D^S`4t(d~o21-`eB7U$=2pLcr>IW$MKPg)*avT&R>Iy%8=4^N$P9{`EOMi5##
zh9i3%$wdigl~F<JB|};<5V{%)QDb|PF5SAUXeM<N>>~KZnIMCAxxmgic(a8%(q77~
z99XGnT1{YsATM&K6zY+g$iHR1<b%0RZ#;(d;Lm#;-hx@q9vqO<9EO8^f3^-4Va<2p
zHg&5JG%n8`?GvlMi`0C6^S8D7t8Jc5dgg7m;{t}wB10v^$nhL>C$LWMpJ;UVb{$$^
zaHc1>9}i$Kn{{mL(GwQY=+RH!zlz7BH%HN;-U_pKG?fv5@?Dd_<sg`l=>Lrhd;Gup
z_s*q<FS|8#l11$WH{jnoB;rdUWb3oE^ZIjMpsIYI+jm@oi?tpCoT}^DE6ED*BT);X
zHwkCFhoHH~rX?qpB6axrXTk?IkFe@@e=_~y5Rylc^`>8{YI`$=|E0|*VYQSTKmPg=
z3%SNZWRTp9f#}kuxgON@B?Nj4{n|Z!9-f`D+vl63^Xb*$FHGr&q43da^?A}e%JEwC
z-}L9>6O`+bn`d=k><A(euyEk$NVAvFaxRqBEYTCz%!1B8o{@SCDU1l1^uVP1YBbZ@
zbX7%;IlMh>e|KXjQRp4qSt4VVc~iY#!e~~XB^}K45USPrkuX#2^FJ9+!X=7=4^i_Y
z@jxq=ZWlOF1pi3nPo(wOvU>;`>~YygLHP-u5)ujh%7_WmuT&GUAYfk{B0m!Ao^})+
zAWOx_oJDugo{07SZ+!T!W1lT``SNQVUTryZmI^-BKJ`5#&?IF>%zlQ>`(S;rIbid_
zY5(ktmI^qm@Tc27GofffQ{!Ee8%#cww>+B<#ba-)xA~*@TGXvC7j}2-dqJBs3YH6*
zPmiy~($j-dsca7YypZSp43b$}uj1%I+lS@$!@h<ODaV)HMH1q!G*659v2F_-5*Kz~
z+l<T6ZZ{EGLAb7l&&0}`XYjdY=*o|a+lzf$vZ8vr=zSD8TZ+#o)K;llM*IpdQpBMc
zk6n8wx2HuD^u?(YT0i%}(S7pd9wvuSi-(5ywKq}j^2KFcQo-46Jy=SrJhMF=;O8fi
zeYQ!OkBp70^=0mIT(>rC)zNLKvFYCEV@7w^t15`bn9&OTo^a_|tsWKCWpK{vLna`n
zJvVTHowj9B;<T)o&!3abz?Zs=Xcw-jc1-&w{{O9I6EZsIUUZgGniqA|H)&Twiromq
zd*v=Ojfn%BW4PUX#!A<dWA)!+oSG%+zLn$8p~<R>EZJltb~#&L=JdzX4>4Q3^uKj5
zt(ShtU(wGSG}q{j=h<04Ukj$&A({mh{vOxH{`}SD=uZUq`+JR))kWm_vv%qod(EeO
zb#1NwJ9L@WG4|jXduio0@7q<+<#&j7kca+sn-@?t^W^hm=9<*zkA-bjG8IKpRBFcu
zbuoP|5ch2<9j^FTMu?Ij-<$8tw|2@3p)Yvw^xJAU*uNU+HF>!qirMSu({e&$*1U&T
zw^awH9*$dQ96wdIJ!}*7cW!r4MlO}y>TbdVh$-r3PYjKU@8t?Jzhs?MVOJRE;=cYo
z(4raK{TpF(q;y)gywjNW$6XXn%v`*Ct?#i~{T^N&SXJnb9Pnxtq6+WJ!<qBwp*0!j
zSEjFS|1A<_u<FIG$MTEik)riir)RDq#YoLcK+GPbhK_aQu7&GN?N2F8Qkn2EW}9~W
z_u;-OrHkE}ha{Kv`l^fi=KoJDJ*?R;9X^LUV*A}=wL<P)vuE;m(sU`LLoxI8bo}FI
ze_=jj+RZQDkcQLNAfclFSaJImMHE?tiUom927L*qA}iQkt;w8Tp;W^6Rm0Awpmaw>
zsR~4<K_7}-TTVF2#k-iR-FK&_?_Nb7svn#&+RTYqbY#b)!uLeW#Pog$B71xUF>q)F
zABT)F(C@ULz%^7iM@fK071EoFXc*;(-d?jZBa38p^Kvtu+8&B~x*z7@(8kHTFJ%6+
z@HcvV^I`1G8+vWE$Z}GLUvtP{)>y+KUcFDz<o$<lq{ip@rDTd1ru(>PpCTnOzk2j*
zeGh<J!waBn;QTf1`ek%mYj4TvpJiPhDFEYpCPt>(QfS^j8#cu{F9>eW%VD%+Sn4a4
zlKoNiAewkt6G^#*-m0{W{Yd-zckt}fk~KV~-O1$<$bGG?ata2gBevmJn3Lm^W0@!^
z4+BEoZ$7LJVm!rGYbzMKWB!>MB`Pwia`wpbt43~?;cc-^bbX!%6CYD(%9`&@p6V!f
zTdp%EomEsoFY}wWw>2ewTcx))zE4flzeXNbU+dAc!|dpZ)qkb4zpwD(=)HTJlSszw
z2ldsc#frIK^7V6W<y`tXFZgY`+jMs9<bsOxTDGLC#-f~K#P_kh=rlOmsfo5S=xmK@
z*XFmm-Me^^qZYXkZtrpr>ii*ZhbfJM>Z8}5W^r%XDy2mHwHifFcy20pFQ<jLakHA(
zVI2G)M@QwMZbQ<bohPi(;>SohoHuwmd;PqpvKn=JA-`Ui89uGlYN-k5p~W#&_Uqv3
z&bp|LPjhwV%?S6mQ{QqF9{OaEAZkfEBvMkg6>_z)bUIR3&=I5K_{ZO-FTszPr3Q(;
zNftgOVxaG*bBhdj(5uU`?ftttw|jT$GwIJ8y|ie}j+_fD$Gf^E+E+)P#n&9)W?xM_
zsSl5|5odSz%4=+xiNQ~1MN|~v^66IMJO*0gB}I!7Ns3CkVaQ>ass`3#Se9dfZppoE
z_2Gdn+4b(DF`CKR?YFr;S*R#8Ph3A=2~lmB?5S0>GU*wPq>YZj&UIgO9H@@0)Kv=e
zd(%&3EX#g&I3q4KmGyFRNiZ%|RoE&rF=;SU+%f8%c5H9c_^D9K@vw?GQBgsfqY=kj
zm#4R!vJ%<Pit`6Aqfe&JYKQ$FWaQKr`J5t@^W5rp!=o*RUX}drANPJoZ}ne2($}{?
zuknpH5M1VGd}o=&(3bC>c)+)e>z~b<yNFTN7xQ@i{LRkwSHiasg;1ubx;9bGC)rif
zo1tq_?|fF7eRZ_q#@b(n(!1M(RebTi#+7MxZ%%J-Fz0s8bDyq9PN$+br(yJXczXsF
z7@GXa8}3{#*<UOVf1u7{h5pq-<@K=2@eyumAFDsN)#>Cuvh3%xL!de}914Q-k0&2b
zq_3CRQNysg0e4txON#FU(*O~BRS#aYEw5BQ#JI>%*nhLycoqWD86kqbA1zrgYnjZw
z7|B8kzT0V?v5J*M!84pG`eq@VrGbyT(~??1Q>d{_Ds9Sd)E=v&>(F_aT2^>h6;<7a
zeH2$mhk>7EA5YX;yrs^6JBBuj&)T(db~P(P;Z3<qR=$<c`WHnnflT|gPW~6Cb$LeB
zm3j7Et7fLjnta^4=VDtaXj$Bo*4^7|E!4iUtn|~Ek92p{VC2Ugb@hE(`?8~IT+TUc
z=+<Fn9rRzjW-wmvTWX-GBWml|SGA>&C+%LoyA1iP!qWVxBOS}tl3xo8Yk_{Fbm_`V
zCltM*2c`3iN-?vkd3W{aN~~%bxKV@d4xO`11u?t1WIiWJ^ybR@B?ms~N>5ZSqFSK`
z_U@hsPp<cybaLq`)17;9)%!841+zOztr^kZTNB$wu7@)9?dGwcze5~q!OO{JHDXtU
zI=m`rKI%A;=4}+<Xw7QstgfnaHESZhBWLWwig~lyerz?qxYnpy9QpX`i{U3-oAYXg
z__m9++Z<ty{Z#bzVSawBD%*>e4^|gc_3DI8Q^NxbwddLB?yoxNxX`p?R(I#?jA&8#
zYRz7J+AzvwG%V#@A<4oINMPn`Ox9UU78<O%+g@K$MvG_I_~(Fddz`CeC3E5BqPiEt
z6QcU8w>FDk>nl-e+}+f+TRP>iTI=VF;X2A442tooAzp`ny*Zyw*;ucW&t9I*{CM@3
zg?~Hb++sH#<(|$Iq;6`KSk-pD4rt2G9M|_z3n#*vKG;>grvbHP46LQvDLFo?2k5S^
z2i^}<TBG#&_vHA5w~e(!nMxMbgs>-`)XzBRcAkCI_<AVsvJ_~xC0Ci0A8CwZqYgGB
zJ%pnrLR`j)8nV2Rvo=TQs)=GSF>ZTmhIik+_29Kr2g*ZIYC^0N?`K=n*7sNfwalXz
zQs=AHYt;&rm{JKsaHT3zq|G|grXevFDu!7-!$@6=gn3kd3oN3FYF>P5)vAeEHKtaY
zJwYho$K^^+zHVriRexVyV&2r`qgk<>=Ve~F#yJ@GPgtuuRGlG9yRDMHVuF*qKh=kh
zGDQCy%`=PdCq-G?=xBNDqDM!o`Ik@7jY<4F@G!|uBqJPT8*6)?M#f{&v!)a~x0L4Q
z!o<nj%k4R_rkpPIa<{h4IlVnky7zY5)0uLW`;={MCkoqPJ<*+D+xNOI#(S`NSlQ-#
zzl3*hEeBX{pwa3sN61pywW@s-IaMA=q}C1?<{0cXF;O-vz2QnO)=Vz+P@f)Lx5cSS
z`gcd$)rC}^jBva0vl;|=Y>c(jjvXmON?UT<PI8JWio9DWbc$<Ui7{VpjB2oIl_ILA
z3Mf8Jg}n^v80_M7*}hm8WmJxbnh`{HV*A(J-G`H6R~9l495#=xe(hG>I%Us&4&>9g
z%|?d|ia|>CPup)tAwF6M6ny(Hzmv_MYxCE7HI-*owoK`}7Ts7HRGHINZ)0;gCPs|q
z6Du<zMG@2lB{=b+vy4=@%*@;@pCvZDeg8X<yLNEZ$!D>7b~OkGuN&amv_`>)Zt!uG
zt=mP<HSC=(wx>=tS=A}p&8u`C>V1v2Jd>kO*5j+_*f_6fXf|=f%YmOF{RC_JkDIy!
zyJL<3)qNRxS<{A%N6M!T9LAh;KKpjpn;gq+UdoMSKPf(wpN}r&&U2fYn4VSiX!Wlp
zq&B;kA+|rR>^D=Iz6<cKo*Qbu9lXpxK7q~6j%#%{i?eN`Rdv^-&m9ZCjYQDG=3M$u
zfl4|FYoUQU`D>ioj1Q-Fs@57+0@SC5hg1*0tJ_7!&z<vc3T+y=YvZhr?7H2aX+318
zbdE*YC8I3^+mn?qPUEnm%CoF9SJf81V@!6kY_nCbbuY5}uETwp6VuGKieb;9=g@<5
zKbp)jQhgqVN>MvGjy6+o9hvE6+_>D*+3V9y6h&RjM%;DHx;;Hvxu?TnKYybU#=fp)
zefsKiv%AM%RH1sOlJgzBTVkC#^kiZ0CuSMLnRn-9TI$hVtE7|qw^k=ylcORn!U|IQ
zwNCRKT9&fPzNH_hvJQWu*IezddR)C4reKTLev{#2z28KtgIjko-FeYB&Su;xrE;8z
zMB~|&G*>|FyH=+WHD<EcTTS#p*mqP9cCIH1G_O30PJf22i^7HT*)(X`n)0DXR%&88
zmx1+S=yiIqx>@CWV+d(QOV%^Rhb$vQJaAK41J!m83j1rL==}^4(25$fClKN)p!nTp
z{MIn2uz?U*r@oYU=o*sE#}TOEE$)3Zaaq1Yp+?;iiMXz(7)_&s(so_~k}&(%vZQs1
z`nAX5mbUdq?U(Rn=YZ!K=iZl`O1)GoeA&~3axN(-*!M=xdd4!(DD?bjc`7A}SE7>X
zlna!McjBwhnUNCZ%~tC+;R`hJl$Sj?QlZs~S)`mh774=%)<W$F;lmgTZydv}y@{Sf
zZl_*PD=DlTsF*I`Fif%+HOD?`b*sX{^unz5X2*6~>p}YCZ90=|ttPx;A&ZPm3#`zZ
zjL1?<V;7tRb$ZK+0m_FOpG`E!G%?N;qtuwH5=3Vn_Q!-%d2~0WaLzqf95lHJMF}XF
zy~Mt#?N~1g8`9NL*@W3+2JP0qbPTHKs<wL9(Y(NVa9%8}%|Aletx1Qe<HuMWE~{4m
zOc#V*0MhQt!V7E8P?Vsf%RQY8Txh0n;PF+WIh#O<oM<k}8Qw=9WnHvNweO@TLBc6b
zk9fJ2hJ%PS7aJKdg_KtoaS@R-PEo~bp=TM=E0Om}H@b(VeTSUBg66L2P}^-~<%6L;
zRzlv@sDkA)soSj4UNzcuy?H1-TI{Yl>y_smOEE``U!dseeYBbA+m&#F`xNXPXMxwq
zJjht=8>WlOGdn`jeGrP>>4~^lQZuEOR#pCo#=V}(^<})LEKxa&Z!1`{@Zmz-Li8YR
zjn4sib;7DJqj7`DV<^(Yp60)kFh_66k59uP$1>HXry7@L7dl!&_&*AC%;Yv~uS-!a
z{}}V_+IHpW<l|mYPd@B+E6GsIy;Lz|ah}a`53A}~&WfiXZXtt*!a3h(I&k4Q#xWf5
zy15*k74(uz_&;o_(`rA$_pGgZW5~$zb{1RA>R)elE*?GfQ7p=ocaJbv8iuOe^9IaI
zgX>3cIXLB(NgVUrk35_@J<)ydVu?LwxsDb|?QJtJrY6_5D@RO+J((VEvR3N&c=X+y
zhDDzGs~6h~`MK!WUsFquWBVzIqIl({CWM7EBItTHud??@?iPy<OP`y5s)027@(Bn=
z#LSAN%daP9eS7Je9dOM=8WYbqNiJl!H42+vni3#UHAU2s3{sDxG3J=#0lXp3@e4A}
zx~$Wxq>Jt>RaOwn9~dVL(jycK;;Xq83YT6bbDAzACs&0;OW=WVX#%IzCq+Qu=9Z|B
zv@X%T=wt2SirJd=G>|h)@ZzYcp&1>TshP5&w_RP^eJN^1HvA0JIBd~gQHL$1+|;FL
z@_cy}8BGeRPkbc%2&|td(AuIG;78$1aF{3MjaPY+DcpCg%>8uk`KL!K?6X{G+f|Eq
z=+o${OycV3c;#L^UhRj`OH}Oo=+mYA)>Qoad>4DPub#L~_LTh??b{jQDAs*z>$1#Q
zvExTVzZmmUKI56zlYF~54t_c8d$|`IevaqnzU$iM?WMikwr1TAO_c1?`yn1I>HKh(
zY0B3eJF`^%>;-mmS6l_ov@5JzY<7xDEJU9|=G^>}hD39dt5e2&dwqv-tj?sziXCcw
zC6X}EckiX5eYiFI(Z0n<`%VUz@8&)<U#Q64X`H6cn=R<v@D5;^W||70tJY8jy5C=x
zXJ*}3PBW-1=ggR#og#=h7}913wuj?0stOLgaNqUdbeUfiStnjiiw7RD+Mg%2#6ltV
zn~EC>dlERzGFm(d(vUU~;7&k(-gH_apEjpNaUQ`4P>InvOb2HI9TCD(%1*2-WjYmQ
z+~lCJ;(K-0A<+L0F%J5Wy%aAD3rKU46g-es8jm2@El89!43tTkY-T;rU-*W;FP&Fz
zhDQMXr}#k?2^fT63{;>B{$KikkMjOmxgV}pl-K`X!*-LFB*oMgZpoDsiqi^2ltlkA
zVhNxa7?nyC1Yh`m-g|C-Kl^|5)Zzcf{#a=XF?o%E|A=95h-UQ)l5#+59zHbxhXTV=
zuS9-iX4CyQD>GIi-zkGiDy0NaC<P(vZ0z9TQ1nqa^OaE=?7OvtqOk;&1qviU42&s5
zBoI=C5K`1EgftaF6(o|%goz}<|BPWNAw@t!OvKX*SNcf|l7fh$Xd)U0CYecUnIaCl
zs?89BVr7Y-mXVUFiXfkx{`}JLc6&VGB*an^G)xc?K}{1?3Q$E;QWViJ)I>>5Qbcam
zVr&9I6B7oy@Zg65h*~IUDk&(UDhP-oLYk%~D5996N(v^Lsz@jz7%Gv9?oJCZB@#^%
zACoYWf+?6JW?B*`ieQh)Df?T1QZ$4}O%VYDFjFuoK$K9IFbpN7D40q;EPvaAWJyqg
z`UwLdDFPXZO~Vq1n2?yFrfClqWfd(j!8E|q6jV(_6q8Xx6E#aQO-U{ojua%oK?yK5
z5CPgTPh=)7Ow0u%0SQXd3Np!5&`iwJ5P<}QK@n3GFh}k|`Qy|VBx0!of{>CDj}W1i
zGzm&UBtbIL#Gw@w%p^oCuwU4NDn+3RNSGvoVu}g^ikb?jq9!6nDVn^DM8X;giGrx5
zsfdCqiHf2ipR7X<sK5EfNC^o4lu<3@qg5gy+(V`Gf8Y=_3i*U8hVY){H44>xiHLz?
zqN*P2^HSn3K?#Y0dlIXW+jHfW4nX<T6(Jx}`4HhM0kRj5Gr_zLrjFU1j3nNxk6i8_
z6hwe5z)$b^;PQ!vVngbFrvz{}up<G?1bzCy@0t|$G6+N|!U%&1a3$|hABOExi;yl+
z3jgx}2blmL?1z$deLIR!jRQy736P=5SM@+IBvb!C{SW-m`v2pP^$)rqD7jr#;|?qZ
zSpW}#Dk@VDq3fKK`hUxcC-FhaKh=1V(1a7?A~XTuky0TQ{eQ9kT>wtdtpa+80|-~N
zDgHTALPVsc0Q?}0-~nxkSyEDg`yaveACH6GT$ChGa)goxG(kHc32(p8_<eXn5Br}Y
zf0%#uHcLPXLLz;^1kl?bvdd5(0E#j#Qh-E&F(fcI>Lu+t`1s?lG$ja9CPqX|Ko0|P
z*%Xwz+yNl_fAa<F>F6?wm^%7&G^tRbNF)Ygm1|_f0x>Bv6CqraB(T68B?<?@Jdi0s
zq#^>c0RP*ufb*;n`sFqzyV$fP6oVka8Her2C-%3GtAUc$40--c(NAgkFxhIhJyMTV
z21%Coa30@|!Be;po<c%p?~}BfL;}2wE6awW`N7E|rf<mx5>fu}g#=JP!I{NQtd9y5
z_8z}iv)JH6XpW?w#grXpihYsojhraMCLo$9FP&9I6Zs0jL?S>+Km;OKg;783#>G$-
zFj56XAs6@<1xZmDOkh3Gzavbq`FIE@`hHIFq5@q&rj-%?zwbcWK`4?B>$L?*5b=bw
zZ|<Y*xafPvwM28V_@5#0Z2BM|XGCUU5Pz$jmh5_5Arsyr7)9&(tG-=|f1T(0q(Li)
zl&h$!ZU@z0@}cPoUG|&cAa`yyq5xOAk6L!r0J;0Tzsvc0Fp2%-0DEjvD1r**%f~NS
zfK=}g01M?p2v%oNWJLZ%0u+EWq8eR@QQ<1S)Deh%L=Yr`K#&nToDX@(><NYf$EwBj
z{RjLE+XzB3+b4eBD3~7}+XHAw?tG<>xVR&lSQPXb+!QPh@fZE(VQZ*8T7?U-1C`OC
zMFy~cwCsMO7cb1Nvx~PPh9Zkwk_YoCre!1rL;fUB?dr%rxwPxA?B>zTxS39Yg)l+o
z<l$5jP!H}-k#a-s|0S@~Vdw8>$_wf8#?p?i*+fxlZ9Biux9~EK6@PL6#T#rdOEOGv
zNV~IdqVMpnYpv<2tC~N3Trzz#g#%5zTB%KKS1B^IqD;cP=4O(IF#;%QD_CXkjQ!<x
zJxTQQQW_wMf29(JM7T^0SaAmdl&AcbEt4_32ziGyu4(gT8DCsFVd+=wV#O*!0!Ua;
z;K@f#h=0cLz(X>W=LXF~UCeXpF56Uz+gTeP*{O_!MwXQV=Hk)jvRXTEjl=^5HmPW*
zD(!OG>qTGgUUAo=-9ypEX>WdtjKu`%aJLVviyjNzW}Zqax;!O)RP|d*Tck>ohtkn?
zYqIBG7_3*RdneZmIc=jnC|*}<w%n|Yb4<*mjMNV33Mb8tlP%AKapA(R$JI4H*lUjP
zN+*wDUYmh*diZS=s6%R<lUV~<dD-8>Mu!|!U&!k6=!y`-r~V78s_9S3RTr}4J8I87
z+-Z`p9{w9RZCIfmpBQkXjDM&u`uRP4Lclk5CS1sNrg)s5qItQvEPW7=Z0UPmqF6J)
zbrQh!eCPRLzrGf^mBZQ{j-@tS4h9->3fv(^=4Ohckt|G$BAw~UIQVn+=y^2gW}d^O
zarm4Ej4@2K@*);0A_AxYN-QS!)1kGkI8E`<89yb%Q*M+TmpLdNhDrId#yU_tUJ<?H
z#swsRNXg}Gnucgkry{RLcVhD0_i|j)M63O*%*dDr(N*X?j9Hq4NpB*Pq<E8;#O8e#
zH2r4T&I&rh{=U_YxM`ZJh3&X|lv#?z3LtjnOl#Glw6+21wQWu-B%bJ|(N)9E8fo<v
zL2%ilEOclz;UWG_D><Ovi*xP7xn~CQD?Fb~_zA38+GVRpJtod-5Y=7Xy$}SLJ?<-w
znmkbG#qtY8*u_e5gDrXOC7)b}+G5gplsQ63Rw$BM6%poWxeTQRAC#i^+LX-QXymh{
zrDG3!2tPV9=&qp#)1hi8_<T#b`DFh4c%DV_NZxn_lAXvnFRSvwk$ygThLFPYUA*Oc
z<KNPy@$39mUbdm>OZcmug->%*u*NL?t^SXhYvzXRd0j?nLQt{01$Qnw33X|donve+
zVVH)?)AnoAezkRK+it(wwr$%sPH}3Rr?zd|Hc#z6n{4*S{@Bev|0a`nlF4Kyc_;UM
zU5=mA=GKO}CtttHkts3HdvDI<<E(#sQ?i-n7o0C%))DWNoH%Y*%818%MNt;Fh^_Az
zmOVn{R?0LPJE}HtK2yAhRG&bCYA`2+S7vN57f`AdBFQr*(@{jm|J9V^U`tGYU@1{(
zNpuYxmvZIq^pyH<DQ+jvOv03><Jy*yN`Q|K%ilXfF5Ulh=UuqEDrW75-oim4t4IK0
zD8DYhK@WXCZJhE59^o5?T2WF*g-XzFGlzFC;g<^4=wV;&?B#5T6tSuyQcC}zyED*(
z=%+ioThF!4!Q3vXNEDCxf#gi~RW?^5L3GG7-&g?a;L>z6_$G`XkwU;!wrDdaf7PvK
z4=M7zd3%4ryrvfc`zSAlu0CE_&ChS<VYja-YNal_Tm`_uaZQ^brpWRXt!E?G9-s{5
zKy&+hb~!D4Pdb^}T8>aNThNEGd%W06oVKPSlC$^wplf^)7n;bbHc($^()FC!v6UNu
zr(yxa_LaR^yXIvt`(Y({g3_akVL1cUnyv%)JKoc_OfTD1XIa_S|M*ERrHg^SO;16O
z>#&p`P><2O`h2q1?n_g>ZrM7o$-m{+nPc~RQm9Mb2BA_sdb!r0=$lG6JA?hoA@9PW
zjS$wg={cTKks<^WL(a%)97ynUw$os6yO4zM(hvo<G3)3H*N5(U&H>AMa!QnP4pF%@
z_KnB&vMH*ft{KK7o<c^n$Ro$Qnytsl<-2bb9fS40B<Dg^xf=1eT8)7cj5tA(Me_r0
zQtwQqfI!FW#M`byOX;7K@hh3W(WrunG=4+kqk>abtTehyBScQwKXcNFO=ku1evX49
zqPYT#_x%(vP#fi?ay%fOGj*0Cfvd~t=_<{6>3UmuqQv1VV{$?%hw``U56{N<-r!Y^
zQ`t!^hUn!+MS3)V{h{YG;%VL{8{s5bE<c@%Ol}S;|3DFULYR<~S-5t1{z_G!^2Wiz
z*>@n=tHRUc_T8ZR9BBrha*J5d-R5>w0ws^1@CAT)<d8z}sI^weo%iAkA0+R_u}`V%
z$g)fDR(^SW|Hu*aFMC?iO07Yjm(&O5kRA$}QtKDefil|V^X!^NI>0GCHYg*Rx_KfM
z^2ZldLplj`wxX`n_k-3%PAn0^!m4%{`RNP;Jh+5uTa;`i`Knb|dosUv--`(Jf>S&u
zklZaR)qr0GdjC?@%ON>pfl_Y2V@do#_aG*K#fF1^fK#7bEFAJGw}$DE<t0NF;Lw)$
z1jUWYAM@z6jXE(y9B9%*XbVzI*gh4Lu_i)*$AfH^KcqaBiXMMj@wvq9bg)*=pVYze
zeenLtxGbyGQ4+3<#7yA!_F?knF6;VNZ{tJ|@*4a@D4h@~7jH#C4MvAi)52q>;JmpV
zPqj@{IuCbq=wZ}C+(_qo9v%X8BBnJ!K@s~w@ej>8^FY>qzEGeRIoQS^t<Qwce~0J+
z88BXl8fRU$Oc*Z|#)#sx6LN1EmJi9MZ%Q>=fQk+|@Ab+<^dQ3P;>9n=4)NQ@_0m$;
zP>aVNdJPUO5DAsS+vuoLnI!Yl=S|7T#w`TuZ=0vl$TYXK<Alr{<R5K<b3!w;o`p=~
zxKRrBxCIepnFO5dXD>L)xT)?q%wxt8Kvxa>?qM;TDswnp=uJT<<nOU~QNF@l?_{2N
z`1AX!U%6nq=S8!em?H&sjZALlvhPHa`UZNIl%g!i5F(dI4vH{m*2${)Dy)d8G`P;R
zu2O6}QjDBX03k)fMbBc<ET!$sk8dRXuZaPPj0<qj29v60Zs~k9RUCVK&svi)mItm>
zxmP|K>JoieW`ZM9y0ZIUs_u{8^1UYYhR>98Mh^F?K0-&sK5~F`uZTN1`Ud-^>tfX?
zwxuS`r$r6{zy6b2!xlp}RaH@RC8mY4f4<isVpL5}ztj>GRwvjpBRL>FsSBCO4^H7W
z8&iCd$F`DiRV{-PjZfkBFJu0)!qN0ul}lAZhe4*qbWxH+A?%|c^UyxuNCgu%YxEZ}
z4>lM{v};F25eY<;)L4H@GJ+7AV9UD?gv30c&5Vg-$rk=t8u9TP21W|e%kl;a?GgQ+
z^+<yZ!7~$+VeB0fOJv8vlR%aGD9cwZ5KGL-rr-qSCA~3fH(WFWp2ty4NUSMcN!Uko
zq$;jVNPnyR?xw(^Q4<RRu+9oL#?-5~6wg%d0lEa1pkv}wnUMFGr}0DE2`*dR@Nu$+
zptqVaz@2a){bpM)Xo@N=%dqmT0c}yiu#5F%8)K$Poe?rsWnB_3Fm1d91IvDY!ifrg
zmQ(roFl}t8VRqq60{4r*K?394bE50a2u5VWmg8sUq3%aS)2K!Hs*W&qF|wIV(t(P?
zp@6teM}Z1-S))uunA&*Q#J?FD4Cn`iH*7Zxxk6>mYjo983EgL)WU#o^<H>@WbCL{h
zOaJ_~#?_I9rL;>-Gi~eq(V@zc=^WAPjS>PFHnaS5N-G7`l#di0c3x5eu-@WbBX!vD
z`hQKY73qdZTQ6x?xOqzLF+3J>QPWjt7YjHMZuIRFi5xP>l^$C0$pc>fUv4!vw*xr8
zMgrHp!+xNaJ(OXO^1(lOkwAj+QE8!Pz1FzdaD~pa&>GX8>R3ntDD_ndcoF(t%#QAn
zP?xDX!+d`qC$*G7UQaBx!z_~-aT^ATtSthCQVVT_@ZR1s3dHtpYY2kfk&L*kWltDg
z{+?G9Ce`*Kl$XaT`vqHkk7gntE@B+`^(SPvS#RptHpOQ3ozat9b)m>KEMlCWI3&=o
zWaSMq7qgDwo|rGK8|Tp;R=Te0-L@|<x;yir)8Y$9aKRN*4f&)P*_(W&YvzPA14HO>
ztFH;Z;Yd6@fsbh*121wXc^EhsO2E(|d%i)c9g9_K<w|Tphn~F<eF2hO<Fg1KE-ip0
z_+)^BSnHCj1;NtOO9EjukDou*6=ScJ6E8I+5fxv<aPBl$ta|MfUsde$ND(AuZr*f-
zV9|Gwe%<S&Zz7L${N_M^^1Ew^`V0qm_u8iU!V`KyUP?f9PJ~%^)luSZ6snJ5Xi2x?
zFUEMb<D{fAAmT633EKDe=<m&==U493Me0aR)`dZT-Wu+-Uog?4C-Mr2(qyrysll0g
zHrX)<1}oIyT;*C3(3|$)ni`czY}3UjxJ-Q61M{LO9Sc+I>3auimqA23a{kM7W2m*u
zizZT*=QEr_VXsobh~Sdq-k#D7bJ&5|LJLTiT}|vS=_i1pVB^CCuMeMIVf2O-Y($x0
z>Bmdq;CY^<_Smh&iF0A#_;R_wR8=KElp}z(1G^4)2rsiWIxMUVrl8B{XDr)T^_c9&
z;=blh)>4oXRU6jc>i51s+b2wTLjf5IH%Fc$L|KOWx<Iaen&AD7rmcaM1@DM$X#XkP
zSJ8N~8Dw*>=trBae*Hvm_dyhq^C@mr04PJ_$q@^wV^pLS5keUNpz>g$gh<k&%^7^;
za_unqXD>fb0}Y9<pJ)yRor20L>=BoZZ{M<r7pYal@ORxw5&|MGkuezn8hcPIqEcPg
zi$?@I5w%@8Q+MiP3+h$J+yCB{1I|I+Us1)shuJ*TV~tt0M9z&4)KLqZE1YOlRF+x1
zhKrY`^T*}0tO~BR!qt_N7-*2HrfFjZUs9P+BYXyzBLgO}hNKF)Rh>Puq`S;ytR}6o
zGOG+NuY_(1&Fa+4Ham?K<sN8FvPu;(J$<HkG?(dU_YJM7k_L)iX6r)ujcGARa7chT
zITVV;nrdSvKEI05<$({nVy-d!)NS+}JllFLP&f9e(M9)+f2cz-nYcUSVri!xW38I(
z)2H<gusx>fC@Y6u#cw{QT%QTLFWq*JF?m;%EyBA$`mfb!w94eM(wL1!#VQ&wQ;I8H
zW4K+`DaZ>sxD=zNnTsiuk)kvIwBgYFP#!i*I*d+_*)j&NN+?QVbJmDGHdK}5oM!Xv
z?{iq4+|)TfV3wUOzQLN#Fk?zBHd$I6OhP;+s5er`xzL;x!?4q}#%XVj>CH#8W=b6>
z4i#%4FC?$z@al`v(V<+D%j;9tpgO>rI`~0DSy~b4na1@o;tR=w-f7}<>RukXS)uGR
z#--siHMNX2C_90Mx9%QOg%q8*Wd;*t{F-dYSDdPd_~Mb~V?}`|(%HFb)!>+AgtqrA
zWzM-|mNli6%4XH15Hn28xT2AdDX&^lP|tf>I!J~iX$ZneZI_P~b7`nX<tk26&!TEl
zMpmP2pl*;&8>Syh&oWmqX0PWLuR5wdw*m}mnPNf=E*aq;a7vS_oI7O6V^%2Jy;Z9&
zS!=00Tgyi-+iSU640eI4)M73eSX6jQ+h&3^10$*~7&KF(IXdHX<>+*#&zZ~XFHmE}
zn6g2}*!|18{Q4}(wb@GEg-k55pn*xfKRB`cR?9VJR`~xObA*qcIro&AKI?M~ovw73
zu9e=gGk2_5L5VT*!M3A<+;0Tk{zbi}((rN0IndJDKcmO~23Nb5dw+P8X4;r*HlG*?
zmX?pm(s}ikNX66;$XwN_lr1%zDyxgT%@N(XYCScr+C(v0y^xA`o2_!NT4h)kiype5
zVp(4aYhl`QZ0U617>4m#Ugg!jvVA(GP)qIEnjvd`nGk@Fj43gwyRT0!%An|}^7OjY
zO+N2y4Y+p<pOUqztD;O>cC}Q}40lnb^uZqDGv-=6QG`vUCpc%Wq_0Gc@)09HdN^E{
zyHU#iLv>Dt(}%VeYsD(2&rva(i$qtPrIH%%HQzd47Cjb=%-uqW)upEhTuNI!J3x;~
z;-2b^G)MC4R7mP(bGuHqYDiChVL;bfrY-BNn!QtWDi))`Vv9M~o8+?BvaC|0FQH~!
zq^VeLaE+WabB-~~f6UtA$G+iiX{okU8m~~5Io4}plJKa8;mDk3zl*}3ym3|J9;+<#
zjvg?F`X$myX05s01lgrrtt;%+-lgZPh$PQ^ujONU#}&b3wRIP`C%v#RS3X3RK_gp0
z$RLG(pp-15eW6?p60>SBIXk!0msGPxm!~pg3a^@6Z6eu+9TaKr6y^MyA!p#+{yTgU
z5n0(M95Y*dbm?=zTqjj<pYC*mBtJ~9qmH&NE6vp(6fK59LdvpKb-`6qZ3-H8u9$!9
zQr~!Z_fIf>eEnwF#eJ6e$js>+Zz1GDAle)fAubk6`0$>FfPv8dVzVQKGYoRoA0vk#
z(2iPI+SZ#UO)VAc^M&Sqy%Lo(rF*%V_4<0aKrV;)E^<PoRaHbm_p}9gjgS7$^Wu|x
z!7c%}BRY?&n$EzvgBKEwU1!2Pm!iiEt|Iy{Ts_5R_=%e>Ve$1N3{a7s(V0eXBfQdv
z{edW#|6YmRPkt!*vnjR$BC7WE8)?CtFu0*7{W$3w>6EJXeC{3Wl8H|xmLZk|?Va;s
z)ZZ?Zk64$i5(3L&k<)pkl!LN{MGD!2j99pu4RDMx=HaUIYxDOHPF}O29zG2NK8x2}
z6fLm6Gya%cY~fXcd!JxSI1bgDKA{prBEL%;+Fut(hItMM=*$%0(ou_)OpS>)aJU8I
zl#Qd!5oB|DspL@oW_9GJ$v<VVvC*NTAr9k=vcmYpiyG$@Kzo4)LRqomtZvnCXLhX2
z#Sn9*2Z$vVvJ&MSD9M#9KW%0U(w|dEOYYT~**hIn70?ylk9%=z>Rd?{YW7$#V@NvO
z;yEA8^AYx-m46mly|oC9Xy@;99<&V@S(45(<IQmBV~(_fU&KV<K%f#X(i!8T8UJgS
z93$0}twKZ;TosC0S-~i#JB`e&e+Ez!`NAQ~jY)!o5s4~5MJTE~VeP{vBE94bJhDIp
zItiTy1%HsHxrPbX7qBoJ%KnrHCPn!NP6p}O&(e42C_jY-m{me5Mnw!I$O~OO@}Duv
z^ERl6e^0_euJJDjP1E5;@n>JRWA!f=B$vSpfj~g{y>I0=t%A((hkPi=BPa1F@3U8V
zo?B|q4H-h$8t`YzW=s&c6ssse6d`e~L?S;QO_>cA&h3h_g--YjV~25J9z7}|w|b<P
z*WTX{UH_R&lIP7ot)CELeWDLr0s24pmnZUi=k8Fofd}#EHbH)S_9A6Kh2dUIi2nRq
zQAkl~h*^3tqGFLIs8_IpARv!`ouD;8Jv%dBuOLQq3y%xu(yaJ{3>7jnG6HMVWhEFb
z9MCWSH2gt(Cto-NOh~k^7Pp8uI<J^j3047rTv3J?dYLlv04>Vd^Al$5{?km#k7AyX
zd$y%0FT&4ykc2j$nKg+`k~9beZwP@7uc5^^rBc#`<nlHjjLk2|WA&2P1?BeEGZ>)N
zqujAL;Uoe&dl#M<U3t}srnEzs+8cF&ss&rU#mBtyB!D)<ixpf@fGqfP#6|bZncuvc
zt5l`kK=utmu2ckW1P6m_%$oU`!6Jn;4zbk%+50+&?~|bni4qGIyWd8k?k**2a2^x_
z{3Q*R30E7xF!%wBvoQiU+79Y#Jcm&ht2^Db_bW6Z&1e-yfr@4?dXbNhD-}18A+*Ai
zV6Q@>@e>J$ta}vx)rrWcB6bfPwrd8!Rqt`?A%U;H!GP?Q_!Ny&${560nWIWZV(~o^
z4eBz%J`yjt_PR=SJ5V}u(Wsp%d^n6DNAEEl%R+L}7$-e!$#ZsfOY9wb6$+rG>4<p{
zOWOoLBuaa@6%s-MGa8Ji9>ej%(L8AkZOncgz>}2p&U)-}6X&sRCm=E3)VA8$*zO92
z*MNtvBEq<vdJ^a9hO16S-Se~}Gz^&Lg6C9+gW;#wL#g>%mgY!!M)Hs^)m5I@PQ`jd
z|Hu(a31$pzmWTgSt}OC9%KV_Ff~MDF@B&hgyab3)XZZuMNtN2M0^x=>Gy3TE9BtLl
z6|@&8XrT|r?Ijz*5$c;yQ2{U_IoJ-^`<r8UM_d#!Hl>Da!(>6k#0`s&$fJ``s}0__
z%R&q&PY9I+y;$H*HCJ1b7EK^2)Yam#4yQqqc>vWXDcMF8>m<h^&&BA=N(F<g*f%Ys
z)<hB<cfvs7%jg)cGj;id2y{6*q0V&SOPNc$QF;JZlCpFY1AAG7BbU)J4M864RW@1J
z0y83$G=dT1i&x-Z8<Pj#U_l~52_TX}DWaLfp!x6Hsm1U{_$PW2ZydN;k4!vH2|nO>
z-GY@9iM7UNTSS2~7Wfb9_D(F%Rfmxp(mWem^NNRB-g)Y~N3(o_$T{~PzY->X+$Q93
z<r{a3Ku0DkEK8&(aQ8ZK1(qMA9lCnG0H!#HrB3GO#h7A_@xujW?XbI`xWnyHnI!=&
zh|8UDh$XyeWRjG+$@*f5NDdB<bB&aBnS=Xs9f`75Qdw1=h(<UxYtC}uc94XC%qgu@
zZD>?zNMY$(ma_{0{DxoZo&DHhGVwXU-AR^6l1L&XsFVX-(z0qrA7a!5n!r2i?RJk$
zI8RZ~sNC*t2AUU)&lg=7e9{{ZQV_BXs~{wd_fysBU~OOI*m-5gw6R!fgRYobZOxX-
z^J*;btUy;~jlEB7M8tqk(-o1vLIVrnejF+U@*UR*rYq8jTy<p+5(95CYIkKBhD*SX
z$KuMl3b)|LZ&J?(3!Z4}lU=-ru+gDZm>k3`gE44@8@Z$?kBl<>lX)=DFS^>`2WC{7
zNbEsLiC_{|ykw_F4&KJdwA#LTY>^kkSmQ%$PtLkC(Xf4zaO6)WGCX0{xA~XA&<H7B
zH((c6lnK)p6817-jJD>iI4Gh6lz^v^H_;}w{X;2@Q%`6(o}?6des5RRoSHTR94as5
z9?_3@BXcdD@h~sDZ1=~x19YwO#H4I$U`}*`lV!JvD%jTF&GLRqGo(^(0!@S3Gglgy
z(IRH5ew}g)01R0^tm=3(n?w*PAd0eph!QKHpOUgj3yzcz)Tb|F>hsO+%WpU$bT^x`
z1*ueEK=sURfD5;=DxRwxqF<LNn81Jl2ljb8{bx}E4QbXG@dMQ;@Huy9<`VPjC6SqE
z6h&#skSRmB@VjjP5OLI`995JR$s+ItH3B*+NZ`8!1QGRa^)vjw=qVU`yf-w2GO%)G
zI|9^W*zVSKh2C9zdqESec|gAxNleWD-r|mHqdik~Z-XQUnIxo$qs-ve`!dkb3M}g{
z2!QI${6S{aNiw$^l#P<(<fZE3CJHgYRu~kENM4@RZlmfc!tG_6fGxshep>Xcuc=9!
zFr4>i_NA0QJJ#==x31hW!G|5P1-T!LKeA>%xfaNcjvNqHI3(dKF1J@tl#W~|S3PsR
z7vj!}ur7)0CI7^1rm7Ooczo<r7e^LX9h5mz>+|RFTZg`(+Ee$kOHTp*R7=cfj^E_d
zkl_e~Su913-bs-^1Z-eq{8gc(OLJmw+Ss4i<oYo3(AdJ4__z{`<&X7@WD727=3R~_
zoc5JMR|Ip@Raj3Zb-<HoC^pS@*^ZtHwY13hSBK~s9#g>Xy*}A>asOA&v}5&kGT^n+
z1&uJ;Qu|3%(~`z%n$%#Tu5x*jJd-W%mdgo|AN}hGOk&m=mc9(gM|5RJB<0fnD-OCb
zhN5<+Y0=zFV^(*PmWcl<v3lNFOQs@z2V1d1JyVClA8icN&R3uhby-I-1|`|cdbg19
z&)*D^+$l35W45Rei36uS>~EZqqXNC(u;U|jAftk*Z#a?f4F;b0-dh%QxHL9qsec>o
zK-Qwn5SbLlA}W(S&*p?XKg;4oZku!ojASkXDNJhhio^<IWO@ht?W*Xs@bjC`Ts*#j
zdmOn4DZ)pSv?M0i!gE)Kp7RUWIc#%J?*uQk1mgjSIo1nwcenEApAO;`5oIGEJsXp*
zD=#b2W1P$kypJU~YKtdg1Rt)9<wtjIjTG3(3TP=lPtiX1Ob040-3Ldh+4%WW?`dNz
zoVwQIGU_#P@C9zfdUMhQZubm4b$fEHDhGP#g)8P96f7&8w*}8j9Prj{?ttL<=*E3(
zw~KIl$q_!+<^Fs}xj$g)S{+uCKWhpIeBhka2gzbD;OSDzcM#<HH8HVI_u?6kauFka
zZDbeb3S9P;b@nBMts5kTllq`R_Nv*I)xC<&BFp1OR`Uv$a3n|E+4sKYv%cYtF{Ixx
zr*GRwlA`D!A$^`FieOJrvdTZ>nWQR-Sm1+iZ@i%<+7jd}t2(5jD6)d!TY(s$>F>h?
zlh*xRD4L=?Z%U`JXVt7FZ&F^huX_~qIh^Fj*l)~-+%2MVo*t+Vw+C9(gd$;!p9!~M
z{xC<o1;tc~R%%TmJ#!BWFa9XhgQh~b4tAit1>?U5+UptZ44R0QqC1GGXe$}3s@T=W
z)!7+FT^()ATXGy*IUnow{wUa469H_<p$c~y7Aeu(T$LkozD)I=Z1!vQ9W=$X1?RSd
zgtlp7t36uHo?Uu1I{7&-W0I;ll{+@p{bZ(`BD$`#l_pH8Rda40Ti%x|YBAJH5$&aJ
zl@CX3$yXIaQ-wN&04?bT;m}BQH6NXm)&`NR8pB0?4l%70EZJq6I#&<jcH1>Mxh35r
zbc+c+HW6$r_9~jHtb<IQ$FrG2+L&i#H=AXR(-G_)+S(3H(fQE&l9*?4?33}Bdh<10
zsioN-T{G@15wmJjT%2d7ToF^z%kc_Y=)%T1y*fPkc5{q_!$;LyZ@r~ZY8tFg;!o{^
zEc$}uu=<K9Vp(mr^Y+WNYx-r;Rh#+|F|HGz217Ta=wf(NS?udLmYEc6lbL$<l*)X+
z_DMI+uqkZ-JKMD}f7p2RT8cuM))lLIl{o5k`cUgDpQ;bRN|T{f)Gz~Vv^*S>`fTc<
z5lZ#REwsoc#o=?QsGId*FL|KB#Z{sL@pd&FkB(*u!d7j((MdybJYv?wn1CE_!uenT
z-7CJnQSTkc0v%*RJGu8W%C6_ni<a?&+OurIMMUaz54b(>>mT@_y%g|k)xVE|iNGXr
z@fH%+Qzs162s>*$j~{ic2JgRQKl6A1hOmqY!B`%=1JJ+skZFNJOskN*&^NziKeFh>
zQ@x`L5{R5V6w8~FuVHjxlueTO1}x}zywxK$3z_4UIvv>CBa*47)s)-WbjHn84{b3v
zFU^^2;Encd$Lj~+Ni-o&NibJ2(bQcVJFpdb@_iNB{!+>~TC<o%--M|EowE{$OUJ{K
z${J|1^^}IsKOOh~Ea*jzdS5JeTwq>~w{Skzo1~NW;Pi-4XRh(=&`t%H`dMx1SsG?^
zlKGH?V*e(|U^fe0l;SF>GpZ_(Ng_=>KvE4|;m^+Hv+p_DLM`0%uB_G5Db<--D(ZFR
zx+YVTg-_8KMz&(<^pokht~sxDvu;&5*F_m~Y~ajl@pyjcoq<u`=8|90bw-;g@;Jj6
zXWsNi?knkXx1ZMKTC%m*%O*ZqftoMLoXq}>RC}wwaX5@Z8X}ovhWgft9XU_zTnE9#
zN;Sm>8wrL-3|1>=s|XPtNcIKpsaNUH0Tm&eYoW<FZRC0ghL?kjnDMv+UGZEtT%)S@
z^oQW+H@PW1Na)uOWVX>i@Q5i>Swu2`)wRL?>TpOLxE(4=-bCz<V;|B~K&VJZudRoq
z%VG9p@K!CKP<<PM_<Uu~)5S<rr*ee(ac7tGlnm>|Z{8#p^Cex!r3qt&2N*X4_Mexe
zC86T^{Rb(CU9ysV-5bgdvJf<SEyHJ>a$wr4G^Pd!M$k~j9@bo;14j9L&E^db_`mnF
z^3q1vczxj}p`>cmdAFbz`h!JsCAS{&vbX{4nXwB$!T3rGAvAdMSE*2D6Cymoo}!-l
zx@XH1qp0J8_4@v1otMa^fE5lw`jy6ojX+M}LjTiSMv{g^!B$xSTh^LmRhpZds;euF
zrIwnTE3LKGV{xkKimh!~)p`rk$}28Ey3NI+f1u>F-DZSR3I^!eiVXD*BI+<d!te0C
zKZ!^a43ug}@}fEfTDPSGE(q2T%_-n|S@JJ?gYP&W66G#VsbM0VFoT>ni0Cl_YNtUf
z>9{GZ?OEtI0HLAs$`sCwQMeJNcfoQHFY>>z;=nf((h+i_o&_Nu_}AF?Iha5RW%wQu
z(ia&_3Fv#{s|qOkU9Y7m{wN%o^fe643=Ojc_J>UWb5|e-bu2;d8e0aLwLijTWCSCk
z2o`l&(1H|p4E9NfzhIlCavJ;w?u=JxmG^V!7bfOsE$esK2^d#xV@iaPQ&k30Q1qup
z8pr_wkr@RQ!G=#VmDc{{yHxo@|7_<)?fS~U=<M46eW2pfm*RWoR%S{jiSRL<f_UM3
z=6jkMS|H6`0pT)FI^R>sVhcfF>%vqmrHC6r+^!^slYq$E-IlCKBK%dfkel8vN9Tuu
zumKfy)T5&QGllVZoKCTc8%cFpMPB%K46DmkFlFfXWeWGaV}wEI%*XeU`o+K>Td;9c
zUUQ99ED2=b^&=i-6hVe2DT$so-KBN8UIEeG>LS9sGx8uLHyP62mgba*M4$i^I4B>n
zUs(l%VRib?H^VoXMtJbSU~@T4ZbcR7K6dY4wEFw3DN9&5XXm}X_p62ZPmiCimyu2P
z<sS{DCTjY+*a{gL=f6&Ku+IhP_fKnM(TtStYhxRcNYyF2!tNIh+9|SPhan^g`|7Dw
zfF~7Ewld&Q-E7(FW=wyX#Ow+0CiR&w=()q_C_5&(T*0gOp%w}5I7GkyCz3KnT>eR^
zHDx%-Kd`%o-qFtYL4FI4iu;%2gI&19tDf7DQz_*UHfHnoyB-p(%6Nv<hMq#TgGqvG
zs8EbDu&kE%jCDcg4;*Xn4MA$>t9{+oicsx8aRF(@HS^XeQ|0+j^HYVinPGA<m(KUL
z<XPU58hK$%mjf3~5QK22jTRwNCqP<=&u;^RiDoM0NNi)LM%Ezf?!0U5Slutf^GeUm
z%q~V_JX$N+v-fqV^M>HpdfUkj%c$2Br+OBTjic@2N@y2cPe>`g)n-sA>SKbd#L1Xb
z0#IPe2h&I0&Hl#`dCOI^l>SJUufJu`w6Qq#uX!7GM_dv7Po2>O(y8=Vktq$nafe{c
zcoQw9-_EI0kybqxy{}jQU^dV5pSX>BPAT(I&uCfF>eFRpT?@lE+TOILSXa*F42P~`
zb&ZK)pvMy}5#X;ObfOO6V;Qr`Q*&+cZ$&Io^iVZQMRXd8)nSBwIg^PJkl)D}#Gewd
z0#dR<1<&)3=R5sOnkRk6=9yOv42|$B{@jBP{++A%&E9TG#~4n2N`qv~KW}kYga@$#
z<7&p-=8tW<D%1f!uwO<&ZlVMdRCyMk6mNtYBIiG_l?0vyBCwKcnch|&xzf`$(+l5v
zx>tS^?)ID>=ovqvAZ@%w|D!V2{NwYrvip~QT76>qvwU!TPkgq=>6{%Bu44Ho<Tna<
zFlyj~m$3xE-hKrVk$q8<;q<NpArrm_Zo>@{YK49q!|cPuz>4)ND46FzK=KJ)3y8Ny
z{MUql{>NMvBme&gT~+aaTLcUth84z)@6d(L<%4-0M<PB&0YXO*3JCxF?;-x**8kt<
z{#_p!QcNJUG^*^^&1ZuhX1H9265h+d4Kw)S^FQwJzYar)DZOEMiA}b`iD(!RAp>Lw
z0-Wb=NE2m(iH>SH<R4R^nHv)&dtt-C7ujgT@}Ex;1D=A=z;qY|cQGIp0vr&DbaC;g
z!J*q`TP=_gkETRyq!DHv;YgFi9hL$xU>cdzhLt2G*NO^Iq`0pC87YFUk>O2ykL*eW
z-4RRQ*c3e+<-kG%_KpM-!SEtrp=w7A1cMjxcrtDf3|Mg`Nt0m+En)1cn>TFpZ^0hB
z4c@y?dWpTi*i_%8VD@hEx^e<e5@f-biW2ovg7df?NmId?L4kSB;b65?g02QkY2cjr
znn8ddprBwb5fA_i0Sil{01E(z2m%)rwBQm|MC|u&y_)cKxPQ%pPYc6`i~n{R=5Mq9
zCVv0^sH@&M6B*>W5Y4~;y8NdYJ4*xW$gle8(u-!ha;L#2xU{=qJ}(lkEpDJep%BBn
zkAT)DC~!GCW?K416N33cFnwoAz1c<3`R&Amn#0V8l2(t9D9PLuXOS_r$ir;e_*t-P
z?U*qr9{k045aD`59y!R^u$I`p91$hTf8i-V7W3W^gCR9%LrKuu0F0#q3<pK|C#?@w
zoOLERt<Xw~F}_N&Zx$+;3g*7pTK9`e@fQ2m<E6fQ*=Vp4UVOKH1V2tQ@Mq(+BUb90
zgP6XS?sE4rp%$g0uOAMfZj^P<`IO?MrT8u%qTW8*>O(h{;_07IK3|QBPBpG3eOmp{
z>j@DZBFVZ#1_l;tM-;mIVFuG(q3Pi2R-17v5t6XTp{_&)>%=zL;}@LaMn9WscIc!D
zIM~Or1;1YrFCMw5vVW*3A929LPWLDCbGMm<yh<qN(&c;$bi=Uf-yjail{Ov&IGrSK
zqy*i$v2R;)Z2BgKCND#}nFhXNFE)KtRT5C*$Qa?%%=_g|zT5udh2j`fElyN+Jo%^B
zj_CCwhe$$@!rmPKrfRaUhV_}ZWO|vbP*ml=&cJ#Ty2nS#+f0@Pow5}+p^#Eqlfb8Y
z?4*h^)*Ld8cpzvGuYpXklYw>cSXAQu-2Q{+>+#P70Wj}8vzN4cch2$KSI=GD0}|^m
zO7e0bJ=6O$N3+~*OG|UDP&?`estY!}>t@Yp&$4W}9mQb^mT01Zt>uc{X?x&bHA`cq
zlIte*ifrKyY3^CGd+e!cN6esoyl4zUu7%z5pKyh2#TC(Amcr@26dlSeF-TRGW=*Qf
zsM!?J1?GTdHdXH4r|ElbAHus*@t#OkA1Sq64Tz&ah>bfKg+wBsfR7`MRq39$1YZad
z5&GasR6$<2A54g)uhVxZ?u2{XJlj0)qBSS%?p&?+skp5c92KPKAiAfOycW=bv-Gx@
z2+iFI?ZfpC7BWZ_6=6jtNzs4bEFn}CMPU#NNEHMkRg_UcC8Ls25P||G4m3K_$L^vK
zg()h!_Z1-$<f3MyrrD+uNn#Ve0FxMM9s17P56Z5Bjm*w|4Qdb&o_gI>v#rv<>azxp
zCTSs3;iAIHuD%6Xg^0YKGH!$MAnX~NIDn_o-nJs`$=Vt+%~1Uyn|Bi>H$qlQtIa<Y
zTFBmbj|BZr=ofG(SqRQ}c8uH^$oBG+^E~n1e(t)-(brnK;og4MT6XO^!Rj<dXHr#V
zQACa(yl1{a%;xD3_dJQ}_SoS$X&Gtesh5xtT2K6Si;g@W(DM0IFaHzT1)?3ybw&y3
zm1gU7@DZ5^*c}QUWr^*OA!!;tt1(9+J>?0zRS2xrKIq!yE<(E^B?D$$K?q|sXWU?p
z=mgI40+9wtKZ0NkcCOU;S%Hrz(6Bk8s3DL-u;qTB$Fw5&q>!3MyyL2O6f?(X980`Q
zVFPy<2f@s}z^!MbmL4S@l4+%BC#GK_K?zj5)@l<V4m&}OFN5LMp78pW-xBAB5$!0M
z1iEV(bUV4mEC{jhGT<dpKu@8AkwRS2Iydfr?iD-+{`4D3<t5d~;4r~oN@8Z>!GLla
zt`6ROw0woCdI%tOEc=OjK$snqB{hm!K>F^V@+tb+UR2bb872G>mZ^S7eqN6Pb#cF!
zHjmU?YOG;F#6zqHu+8sZOy;CNRMe!*77CR;x#^46EnSa!v%Za2lh{hWi2FW$KIhpp
zT8T4&Bumh)mw&ym{^hy7*84OEAR+O=NcwrnjV3J<VYO2y;3Xxv&G#XQk!s@Z(R7eu
z(DTD=9D70$CvXe&Ubf%#Vd$w1Ah2tqAJ)~rplh}xGc1VFeip7?=q~E|zzt?x?e)E#
zHg<TFC84Vv*_iExA%UkE{4m692G4dx`u?QveDVN^Jnbal>ii})0OVk&2TC(7dtdtT
z48L?q@9D_8O*hndUH^V(oW$d#<G!S*MIg^G>})l#>3qg-nSl?laYS7v9^F(V5J$2+
z9u-`X6I&*4^2P%-@$5W5f{pEU2DsyP%D3G&6dwsNP>6P^^psW`V~$RSzYKJQv?0#2
zaLM_KW?=CxbXB6@U705>Lc)|8C_wLLHuRA7(qH{d1U8O#Mt<q!w#&~5MbI-0)<2}S
zDFG`ig1J@YoD=^Ns6hW@LNh@Gwv3u9E<%rPdwb69G1=16oA|QkO_w3wO{4sn<1I<d
zE`z%N<OJJ>ME6Q!feS@=T%KnCAjx4QvPK&tqUz+xnr6ij;VfyuEa@X5fr1Dyfbv{M
z`iNI>-4IgB1>3QFxoUjzh6iM$Nedw{d;bV;`q%}}B1PvJgvblpre9wld+h>@!^F?J
zUqg&jJO^bE$D{P`;Sld)!5?mk;nO>qB+3SZ5p!bbH{H#!5i#KZ2yVz)42Q>ZyzW&Y
zF{J;8QajCdA!K>a2ERw~!+=bRIY1?yMIrnF016gW`~v&SE+{bY?At1!7k~x@APh$1
z03<@aB9yOuXK7hNB1_Akhj-zvCc<6_?ELz6f4Xf(n{K^z>#u$Yf6=TeQ)Ipg@NfQH
zyAm&s-RyNp$@Q~_2Jg<P_PN}LH~#t-4}dN;s6(I?P?+|HHUe|J<q;-GNC%sxADv4=
zL2LVd4!ZfVB#JxN=u>=O`k4T>%q;_IsxyEu{cv3M^!M_0a-<(Nr3$8%oZriDyYAaI
z`iJ;TnSZu}US%XWll-B2uJ-Mgw4v~UF+^7SA%pgH?tx8w#!kE7s}nDmtinRCv@YKr
z7toG|44V-FcNf+1c#994h(Ji7!PECjRD=^QRgARXtK;t$s(n04_wV=oNej|Sx)R=z
zmF8oYz*cdDSh`#1qxj6bb>JJ>?E@j<bye>Z%3)E)pj=0K-&%A0yFL^bk=sE#zIsuJ
zCMm4YdpGssDO*Cw^xiINBpNmCc&do)cV4=BzfVagfx`V{OFSa1ux>{yH<^40m(<zD
zl0rs8R)OGP=S&V(b)5dri%aU>i$lD)NWcMpX6!d_=><|=z|G1#1KpQ^kv~89xbMDJ
zv8Wvb?#fIzBiC<6Zypxdb&-jK`(fh^66<7%M4d?D9zY#wvd;HD-1MHFgy-T{yxhda
zbeiA}ACTu~_v)s>A}R8pH>Waf5j3)EouXQwex09>1Am(?{WZS=Pah?4Hr!n{f64DF
zsRi*v0{XV{>u<1vII*_Mf5Ax2z=*{Z*(e;Lv1>nY^7?$UrL7-Ou*(I;`0Sh|NqGb#
zGdWtBWBqCS;#uU4#&QN+>mNL#J5^>mSHy9ywdkBDI$it*j_Y3JIN2wqWhc%6|D{=5
zhU~0}wxHy(W@8<0b51a0>>AWHYXEW~4XQELOi~QkRp<1M8JT^t#*%y@@~G*>-d@q1
z)6A_0K2p9$*{5r2u}k_`ZChuH=3mQv0#}i>fP?_YpVe?nKY%8r7;Ot1tsHHS5N?T~
zbk=mWb%`ne*sIl!E)f?Ew?xc9*Y;~PMgP~&d->cjN$h8AP);#KY!84IdKQn6fn{6*
zg<K~;7<5#dTETJ~7XLIeF3E6!7M>oGdiMwRZ|hHEvoP=Kp=4boztzf8c6Dyff}duB
z4)o4B0d(5&JuwJ_MA8^6z(7&=^;%)!L^Nn4{U5lzl%QW(g1?ZjH(>dMKZj)L@w1d~
z{@7uiT7Tz_o$OiPk=9p-NIN=JBKtH^vsNN&-qzQ>t`{&cjHrr=`sMNMoiS_q&DjBn
zBIbyaq2<Fe4mA*UKoBhc(Q{zINpUOR2+Fb?)KXWZ_t)BthGkuN&tq#`Ph_;uW4of-
zK7T-oa-|JD@lK7GogP^vES2C)#Q5jGo_a7njsXJC{=@j0;Wh<}b%cGfNFKM6#H3Ud
z&U144UIR6gQzzo(@rV5SSsAaD7hpj@#8&;Ho~u0~Lf_JXFy~{#&!yb0)8i$o{`9O4
zGg`?tqCh=d6z7nX<uot@T{A0-jhJOHu7PAURiy62;Z6asaEi?NGxZDJ&C-SB?T+=#
zIbx)(%2ln;7nP8|j~8E<kC92BYgnm}@SF;F4LCFbcfgl;kWc8-a}E&&v>$8!je=Y<
z@gf(*7Ms(ADa%r(?PeCvwQBGLUK&gI5NT)JxE~w8fmR`SbHu~FqS#M9-U;fz>HQx{
zg~wOM{4*&R$r|?~!Fcjhy`60y5BQ^%v1da7dD#oCVzc1Rv)1ZSYGR&8;SZ)6!8L_F
z8Sw_{s^VNAz4c$ELp0om9Ur8WQw2?}3I;m!p=8{Li<<V%5(Ojw{`(nbdTq6z@hf+z
zC;aG-S75J{fm%fcf^z0@tTp!gD(~ew*NV$0p5D7BX*zJ*`U38MdQqinRW%s83dAU~
zcM$!fm0e|;$JeK}8)y9SUu#f=^v#Fl18>2;RNrP<kSr5C`NoX4CNxRiGxx)tZ6{z|
zl(0cMUu3ef^%bMzquOof%=8l}3W<0*j;#cd&7bX$am&~0c+Oes_Mi60BgsZQt$*`U
z+whbMsry6CweJn9D`*`Q2^P9t<KW9*Ah*H1Daj8aB79IQ1K^NuS|JlufCq(oI1Px)
zwa)a?`DylskO^l(%}<k{X7%<;D^ZUKPOaE73I=1mIVJG}ayCu)J)wN~__-NBAM1at
z6Pk@5L@hn}x3ruMemT~9SQfmZgK(sYas~LrUZ&#dYby6E44i#a>SsvqXT%qIfJR3A
z2j`8p?i-wodX~7)Mbq5ld;HZ!_G}(*>cY{<Y-3(c1^r^Z7gtA;7mloxJ{}+)wav~p
z%R7P(s?Jx^O-(I^&Ljb#|Ec0?PeA9(dv=m<v*%M=<%2dNM^Hf^?3=B#chb@4^7-rO
z&mkw4KW&CKn=Huom)vaGHq<}4wBm)AoL@p>d}Hvg0i}d5oEn!Ix<VziRwHke&(XK@
z=47~etTyB$qJuP0DTvQ_oG9m|gcOm~8If2j&(=;SNFvi95k^IQQ%(ju_lYJMsf;U1
zTNJ4^P~1D?c(3#!J8S}P{37Tg*l_ijxhIK-P~fPkIuYirBEk7PR?C>g-fo}jE+X6p
zOLxaU_Ce9zKe&3bsZ@Q?FHGH@df$@#Cxsp*m%>>q!PFMYA`+>MG)74&*@Z~S@;qoS
zLJrTTuSIW0MiqncNkx~JPKiBH+HMclW$MyhYEpK&Xia6k;=L<vr_A4#eSzsQ#@~dk
zS1%3GN{AHgJgzk`%i~i3k=N@}+qbQ(q;S~{4jPt95bn%RMWZ{px#uCb=xYl7rCt;f
z5Rx)=*z4dALyQhQfoQr_dKIRdyBaCMYq6aYJSpF8qK<eldc>>vNu-`hLZBCZlNsf-
z`MV)JyZNF<Mb$m2L6yQ;yt1K0a!Ob6^iQHX<`-m4Do#`MQx_*;!u{2gx4d0Qm!F;N
z`!WmUGD_7zJcqnH^pI*(ipak5{tdG=s@IIh8{=E|?&RRzAk;m4N_5OU=|Kj$-5k$y
z4z+95z*QQS*n%2OMiTCzW9*P4sjiaSkUeVVl9@BgW8evsomKvRDgDRRjeS<8M@5-e
zEFZNTtuAPpqhX`)>;4Q;6QdVX9n!A6PZ~%H0smJ0WRNnB?kT;fBF;^zh%rTw&@Z?!
zFRZ8v;s1-7Ex$36H+y@l?v!oDy_I5Sz1UAiC6Ullo&!8Za&Z};U86XI>9V+*xovNG
zyu&WKhJZ|pUPRvY_2M4MAH^9M@H4e(FhC4Mh(qwIfE5^^1Q)F&Ruu$i>d5k9;#Lik
zf^jw=w|%KV)pC`A)TU^GkU)8k9L@3Z{s{c6)rd&GS}!X*I*>8y(g^T@E0GWYik!9<
z3gt{;(BuY*NcBxc8p5;<olg4TZus~SiA%z-_J+9aBYJOUl*B;PE0<TeOiVZ|5wL<@
zJ}4puDFWb*_8!995Ckw!vIV$v`4-ak#KkP{IOAS)*HshtktbBP>5ZbftvYev^A@^e
za4+}`(bF4N>^dyP`6#azj~1S}vjhxDvBE<VO{maYx>R*NEpHK})1{QkrTvh1{5Nv#
z%RD`RASNuBVXF$FjxYljsQNDZ1~|UaHfoEghrixfcO_O8oM@fm!YC<2l8~uQOjHyV
zWl1NVgNq%z?ow?}uNl^w!Ho`fB2O>&sfA`;+Y2cJ2z}?5!uaYnyxPw<XD2h9nUN-m
zzc@okuesjh5DSznaL+Kz6!QLp=q~0>=`}xb8qQ7!<xApYj=Y}8Unw>`6%rp~@fr~3
zHxx|#2s~U@<WLG;OBRi%>agPbb<64)Mzfh0Aep%NK+~HZdn+zowW)FFdc=3W7wj(_
zoqS*Q62kV*`yNfp1=LIyBj>I1!2B#t`5KG6%@Q*cj;Su!rjzUu-tCht&%t#)$GFj7
zaCB(}nzgt2gJ<0MVSIL`ZRVD$RF%@&wUt{}^IKVgya4IHS1V!8SuJ*1^<C&YSR^C1
z7QG4AoT>7y=1SL@7vEtKoF$HA<T@{HUNxGwa@sHr=f|tk%75LD)8+{59HfkBpq!l@
zw`aTQ$Ihl35InCAx~*(u|IV4YA%5miE?z2QSdEDVn()ltnD7?A2V8zoh#T~jp-2iv
zrd-V!IdaQ)GLlmBcQU3X^Z*OimK8nJSP_1DwIRJE8=T`I_66Z7*fa*&Aqq^7obpIm
zsqd<{+(teh;$<LT9F(D6lLA#h@|4Xf0nQw`8{hJz$3965&)&x8r6;F<+x*77tow|=
za-5a@rDO`L(frnJL5n$wCRO|B9CO2V<0l6_OZxV^mYZoZr0E=$?OJEY1W6uhp;mLE
zILq)${e@Rhp^!?(?_bX@o-xV!v>EZxJsmHz1P2d+Xpv8Gh4%Q(!fiMFLBV*`gF1gy
zA3Q>ClPG{CQg_Ai8hd)FaXv)57Nk#Y$#2ag5Z#Dx@pbjxyxwkwHShY~*e%tv+Z5_m
zw2ga@?%CMW{}QB{`t=UxYUjr?B7^pp`#H_$bOxQ;2jDTEZ0MrA7oJ=2Oin8Oks4}8
z#%%1yUKPX6;i-fCrl<9T7p!k;MpkU;O`2Kfp{Ws*pw882yO?cPPY>2V<m5Xz?kxoN
znu`=Zrpo8WY#Bd^Pep7uD+Ga6Z<p<m3UFgR2^^nVlo%mEB)x$1!qi-ORloHiJ#25_
z`S>$|6-GqL^K6pH?yT?Y-W~Y)-Ac8t&{>TY%YZMj!$Y6mb48`Q%b7b)+s&CI3ro26
z*9_j%-3Wo6-M(>DBxXF$K8qhJ0hTE>*0VS=%_U~PxMca}`BF<pMN~v7VRX;HSDE~B
zMNma@?sVBNn(ukSvTO`ZiQrSDLBrrS`2{Wz+YRYhWC2l;VL~7_kaXZNEAV?X`ubnu
ziBh<9EhW7yydwujVv<=SZ<3ag7zIlca5F+D+hMjG){49y-LAb{zYtX70@=t;=lvX2
z){@6OSEntPRTl|oncS4o2k%mFKlF;f<IZ(%X6CjNgePo4bjJwf>I0k-bJeAyrpuDs
z>TtAf+N@P-+y6Xci`#>?ped^Y_5v2s=(KanjtO4hiw6@?9{8xnQmj+MLNh%!u?_Aw
zQ0m1!c;owy?Wc^6eAoL{C!Xq1MyqQ#Wgf#rEeC6lcRgrv^}O9KyV$a1EoCd^`;W7E
zrd~QJe@C=>!U6y8hocstk-Ps=cAA<g&RB`VjMn3CVL7tiKaP&xGDsC5*)%c!hFzjb
z%-DfbW044f@UN;!RiO;mWnl_l9U}g8JR3<O_%rNllQD2yz|5_~XmaT~C^UF(Me`Fi
zBJd#53{IV1O#AE-+8#?gDJSo4qsO}HgsHUS3emX1o$Zvr{&zOdjYpDHqTJ>*lg(|9
z1ydksI8_mozA41_G;*(15#=LdS}5fz)YRsEJ|(urlxkeQq}#dWD5b~k@-Mh-ZuB|;
zBlz@RM>16ThqKG#q2AE(J>cA3PwKtrO<JV69Y&B2yy9}6Auc9%$8_6z2a}UK1rlab
z-n`#-cB3<R_c#<mmrRtizrfG`^Gn~Hl}|j#zl;2xBF%k28}>2EAG5x!q6ls2v+5f3
ze9!B|^B`=(1L%F79SxE09$Q0L9NQKg83(7NSZwBzf;}(Yc<i;7bP_Y3qS-Ec+7Zc&
ztvc!mt!Zvc8Qr*h&@UyW17ZUx__mS=Yo!K~B|8h9$oJs2(DYPnF;=<_-U`bL*v@o!
zoudr0y?>wia)YKT{f7Lm`#v^4P<~7cs_YS+zc`GxeVPCaW6-%y!_Q3A0>akXQNmWp
zfoia|qdphA6zhKj57%Np%uuYPx@s;-?rx1PXfgEc4hizi-Y9MFesPv@WgI1TQLAW%
zA|di!I2WBk9t<ynz;o)xv*<bB=N{ZB@a$vtHpA!G`(hSqKE|dO9osX=bahSXE(x>k
z#5;%fTdUd4?&BQeoGU@*n5lDEWt#J@F-DEG5sghs=Q+99vHX>)=v-67b&i2%&cULp
z(|UX3U199jcFV>5jqfSU700B%e;CFMi&6Sli1Pwnda<e4O16p0o<*<a|J+nmiA<5s
zfJcF^E~t*veS64#Tx+nPBhSJx1!(nB{GP%37B~4+^Afi+VW)|?+Ue#RcDb7gc(l`U
z-v15t*^=H<7Yu6{nIk`oGPu|i@$eN!R4zT-Zz4H`?%)3IuUa^i3s#CMTp?JBn_|p9
zT?um;ofe|X+b7+LB=@(|JC0<#IwvOSjl0mdO^JVwd}psOXY<{jg>>7v<0<jO$e|%E
z>ZyTg8?bVrp-2JbKMjH_RpM+B7~an0eXZH<ay*zZ$Di&ZIHA{PP#=5r=EqChZ(e*V
zA$&!rKRQ{XcE(c5VVM-G?5SPyz%5+qiSzczx$WT7Cjp=FyUwlebhu}ZdY_p>ti()~
zlq*NfA31xP#0=W-C-_XZ4yR})mW~5es@9es9O45!Bg=j7bbvafTI$ZgVtmRd!!ADD
zzdPBsLOHGneSus2hVLHJkE_0u#PFdjcazGU&T-{lAlG;~a{Qgb*^45?wOjklbv*`m
zHkN~KCU<-^S#!3Z>C))?d+0uMit`q9WA>BVqbKeae9&lJFU<b|NkF#0jfEFr>>Yi!
z-QMW8xp~iW;~q8W%{g2w8RJCm>&@1Io4M+#xz7Fkao1?B-Q%=kI8#b{^B5s>QZJ{w
zM@Y@H1H!)+i<s!8hp`o#`8o-eLIa@&M-lDk2^(=~A_&|9NbG{bMTvxhHTDh=m$eWy
zii*0FuAc12se{y~vsej$hwWtZ23;45;z|@N-b^yiu2_8DRQmOg?lV0l(KjRX`=7hw
z?fjegTj;KG`=!0kxraBa%-Y^`%p@Hl-Pdb)F-=-Z#Snq@%|f2;>6{+ig63^S)hS0L
zEiGGX9l*j=U8Y_?T4QziRN<kn_q{jt5}$Y(PJC^F0!4$JPbKz}5QyhS)*=5bZft{r
z0#;kP%f-*S>k4J+)LchsC!A(5>raQN&Pse;;_fjNwG$J9VjdzPVd%~kLY#`T8d%nC
zJnK)LWRLl7H?@u83f0U`Dq^%O&U1*rb~6N&XERSq1;e_T!|D^$)67S)PYYL-sNNcO
z_iK7dW^B%F>gzHqpzvfN0|kZwvh-jpNb+}#lgqqyJnvj(KVqhOyke=%Y8&(e7!Kd7
zmozhDH=ZZC8K)lx&JKSLGvF)C_0#w~_PM?-J@q<!cIlW1JD;hJqpk{|@#nnMxra&M
zarDgC7teh1j^^LDc;b8&*JBu-*vB<G%Rna}$sQUL*U0otljENr8JCLCwAk?r!B^fU
zcT+jQUrP}%`c#O*o)ysc&g4-110T7WfcSyzkHjCjCFsKM+i&3NI(Dj+lSmjlU$kBQ
zA|5&`P%lV>Sn}Ipo1?oe^zjVGJL_C`)b^>eVO7EGemtWDBUaAhH8rm;LRE!2u9xq-
zo_&tSdE>h8+M*`=bXIWj)!EsdW)BuB&b@c4%*DjVp5rJ7_Z~E7$B5jwJ-LqbL|wmZ
z@fVAyj;cF^TrJ$o-A3lBmTvfygT%%$jO(X;QH#YofZPwK$x{xjanXu$iSOL-1M|)E
z)2=%zs_k<fbJ5!m7<-P)b-TlaUp8^>_g5e(LV+njy^<Y2O}LW%<yxp8p@a7rH*C6`
zJ&R(hhD0(r1b<o~fj}jSBS;-f7I=X3Bd!SdC_z{Mi`JEN|2^%KBHo-%TJ3*r<`3wB
zm^#O^3w)?C>+VdE3IdVxvd9mn*rlPM&BJ8+;W9#wKx7mzAoPP}A|$*@gn}@L+9gHq
z?ooJOe&>Ckd`$zi`cEnv3ioa%$X={RBh@<z>$w!rcg#61O+>U2zTEUad=t;sVEgi*
zY7B|$ENR03{r)`>{@bc)zhchNa{Og=#b+23>l@$vSDB|*>1*bV)7>7Cuu(xs6?91=
znp}uN#izeRu==h<1TU&~S*($4X^Cs}!DyXDBH=-a!$vJmG4iY2POO~d#%V1pnYUT1
zs)?N^N_7}Ua;T@QX65y#yu9k2$HnFIsJ$Z>lB)`53U1bQtYu!bruFhOx_#~*9_C(m
zonoHn5u9csb1q}>lf)a{)OOS1_#W;|-47dMdu?p9y^G+;w9%nv9OGm|0^TYT374%&
zJlv5A5J9V0O+9CUWw=5vptW$YliJE5MHDT5Lks}SevItmVhRr*sOg48Ne_-xJG#Q?
z%vB}pciCZG`bEEab{O<)_H$l)XL#}2`;!@S|1fMi*OR;=A|l-<Ne@v8I`5I?H-6-{
zuyxt{DeVe*@?R^F+e`yHkUyAkNhFQ8MtTeDg}w;qws_;CT@R^pZ(^CkFwRCX5>uyf
z;cI7lFR=9Wez_QU)|MwE`Of8iQ1F*Kb*)VkA3Oq&6fs6+n*($VsH+1maqV&A&v|?C
zYv$|e`T5uK`w;db|0n?|QB_q{RaBBm19Kij^!&2ETSKVr4!fNXN6v_hAwCCv`}wBs
zn(cI`>c<4MOx6LQX#xB-X6AMDoFqM-u6XczIwi}WbE}&dtwj4B&?>C1NY&j*E<>MI
zo>iQmQ(fV><Ee+#YuYb`XP%Op#?J0M;`>%kKKiSjqD3y}S@Er$ZaZU$>RzoI?BmBn
z@EtnmL_=e*0oxeZo%<Z;wjoaLV)CN+o}adhQ7E2d%+wiBB%0L5B@71VtW0rSR^(Yk
z^0Lg^n0klT6EaD35d-;RkuJ}V96kVJ1VC-Nq*U7pfJ&ca>PDe>{~mRSg{@YElIL*!
zWzBv`PzWI~Q{r-;AhYJZ#(aM|A@HrtAp536gnE$YE5+QvX9c(+-`)0dogH+Vq8!Ir
zo%Um~Gm6>_h{&TL53&XC0MMq(k|shF3M1YCGP!_c7dp{SLK`UZ5uhj<0FK8*iXU<1
z_`3nx0Hz`F0^}h`lr+9141}O5C=tk3v&JKk*E0a12ebki1uIqQS$tM&3SQ^gm~Kx5
zJ*LUNLlErYTcGE?{o1$O`19dUlMfM57ks&R%tPAG4ozm}kt;Ycsmo@Fdz4MxTiz)V
zd8V<;s+W>tY{4$~b*p!L%uaQ6tleF`!{-hmVen=$DXnU?T2MYKIf}$Ps=O$IQ50(n
zBjU4!M9gD2tVdg&?-x1VmI~gk?jHj82CI3^<98DpotVk!&7Cky5C>>4Rf7QIGYmK1
z?eOF8^}h3&jyUHP->OKV{k|s?j~>bWv$yn6bWwm5Bvl;%(|ue&n0b}nUMht%35b7j
z+MO?FsTszjyZYVl*8}AozyHB43Jy>Ki&l#nF1AT&0ivU>a%lI;%r0fjJ}8JczC2C&
z&a?M0EpR*CylvCCCs^&+Ek_4-#_~Re6GVHh?bGTYcp=e|oQ^uzd|5){S_*SX^qk@S
zluRbK+-xO=W`NFDf$N-9U0znBTxXiA+`@iz=?Pjmfy$JgJ56D?*A<G?PB9v*T)bl_
zexfbfaGul4xI6w8CvGb<n5f|uhjKNu3Q+d;@eZFWuAygk_eNJ7Etj6N26a<#jdKp6
zB^jI0l&F{25n8<(y0L9Ac?8-kngm4*$|YBM3Da(;s^E6bgQ!A_kOZVaoQT#LS?ENM
z(#`6&8K}GHS*wf{PwBW`)BS#$Tgu*V-XDpp{x1B<Wjnh?Bp25S0IY2a`rGC4>mkKV
zkTMGeUNGkP_a-WIrWgx=o!-D2N>bGduouUQ98b)hJ+LeIlOd8L;fHCII%2e{mnkG#
zm5I2#yoyoSh>k37<t9El`W5_v^#~+E5+6JsKz&%tD984R(BFx;R=?VA@ALS4OS&8D
zmmS}Mq$xYvXYt2`dl!`X^)rrzoG-H%?ae$yuKCTs8`NWoa^XDIB;98fHzLE*q4KU1
zn3Ous9*M<n<4ahGolMB4F*ll7k@Kx-DbuBgoW?Zxi&cW(8mZObyUNUB>ZWlbr^P`;
z#<8W1MJt;pPa4%>JYgzS<HTU12gHfUn2L+B<*=tSdd&b<<P}X>uxQaQ)aQSz!uR_5
z>_dk88JKZ|;n7YsvB7=&Up<nSthuE#QDA#Karx63qaORn(cC#r#<M<+`%OP@b=x7K
z{ckK!kYd74yfJfxd}{_OjLEo`pQ0(aK>D^GMZEobYrYzG(`(yZ4wAXA&sTs}eF$Qs
z>bb0<R1b>W`tKbG*>`^uO0ec2#Y8S8-0&R4H#OksdgEQ8N!IIDPVjXdm1|l_)GOUe
z(PDUekI?TAo?0hxl)hh)*BR%F!|5%YyJ8-NQ1Z_nt-!&pT6&yL%c{)kj}x5XUT|AU
zWvWY^Fmjf6k;k4VZdVxECPSnFb<4VVeq@<=D2e0Cn!dQhbIm)_I^09e8eHu^QtBaY
zS>tuTpUCgg!p|Lb&mC32T|T$8w^gb7nBMqFbAXwZnR?7q`0(a==Wce^J3PggF7=F<
z%x@)2ouYc2#wjvp8L)~?fVaB0=`MIE`5;;n8uFA@e<yO4`p+6U9Y)d;FNSJ<BfFPb
z&>&VmK5pjggb1eouz(r*K3qqGdykyOX7rOGH9On6lu8Fc@bZ}ZwS*QUDp&^s9`PAx
zo>3lB+Zrj!I*qi7X?#XzIUz+s^?cqyX<WAF9veT1H{Ytky58U?57yjMhMDe9(Kjk$
zv)N%@^NhAuUr^bd8r3?>$($$76c<gG$wmvf*U-@ma<yv{PdkGN)+-lMEn^v}-XPWt
zRA%Px^{W%>2|dO!e=O5#bsF9_LcDJY^C}%{2)t5Jnl*SMIgL{Q3rx(NhMiP1c7Y(r
z(sQ#JIO8Nk&{Wwk4g)ZlNb8=6^UYyP-~huiVTRzfUAVU{a3#(oJjHDymnt7Kq(vmH
zMYmdgaaf%Yxq0TNd<q?2Vj=k|W^a6AFF4BCwR)9&MCXTdD|?hG9Uw&S6Hioj>xHai
zoUHS>;@q8)dg(&p^|&5ko_X#1c&om6p3@d9s_i|3hkC?Ij-oktNj{BTTkY>S+26k9
zJXZMn*kSozlgdz?(kx&(mS&$u@*uw*`n++cn7DB{)MvhNig!5({}&=}izm4s=8iQq
z%u0x_EpdErk_Sa!4<F?==iyu@W$D_i>No0EiNWc$ozH}s5sXB<)=Hx7mUN+JC&VXj
zuWZw;I!^8i{lCsI5)vUJPUn8_VhjmN11K`6yi+jigYEPGBfg%!5hrq}s|mTR{j2nN
z{XfzCUzYygo-6e!V)|c$zL$Dde5?6MzZEoTYK*PZ{Gs*Do~eUm-o21tea$HGtPTR5
z<&FKA^`Sm3&2d=2lE0MZ?_JV~uuzVg-1$d<@ZqAy{m!bc{~eYKHVR!QDaA71cl>7}
z!v1oB(BD^AE6uFS!5DI&Kj7B#Mc>=6I`ywSApW)Yxpl*&nuw@lTaaZ=hp}c`YNq@0
z?$gqmqnGf?0=lIscH}5lXSm|_hU}uG6SujL%)M3YpHj6?bt$@f$88y^V0&uB*(x;F
zH3>nczD|DIMEss_ME-*Pa6(k9KzT!%nZ&%zUK~!HJdN}Am_Ko^wEg4h%^OK{NI5@1
z9-eEOwt@8ppuoVOpeh&)6tj_!w6XT@^kcPYh0QiaFTP;(nJ4*w$9MJWT_OBo3Gnu}
z^4&Uz$wF{9(lQJ?MTL8$yw0?5N8vBlG6zZNrK}TIZA>;ak=BnaH3IbVt&>Vq_NA$E
zE0W!3LHXc}4jj~_*ZJ~(Fs(OmPMIbIn?^*WwVNmF-2B;;-NVr9cc0Orjn4r*<Ja?H
zhXDE^wkSUi3JKSKj~m?S87apK^0tHYAw7qof}~nxCXwEG_)g_B2$IWn=Mo2Pi4z41
zRFQWEG575vfv0hS8a@V>cXU@pEu5ukKW)r#+H9*jPzodqY7|N78i&}h^>yP32&Gj}
zB9k{UOuV`I5O|U&%_3!1NrK@OpaT6)Z&?Eqt?3|&S`5f2Q_wn5uZ)t?2fFn(f~y{&
zcBi$CF%fEN6lQmAoRw@=9Uj@48QY(nX(m|)`iJT`(TJRxZ`IGzqJpYi257Y&^84kj
z3*|rP5@oxJ97|x?A{-PxD2ej#L^Z$N(=V~q0%#C`>Zs>rLrrU43+j3E{;9W~4+>Q9
z31}Ed^lrzR$^;m1vE%H$N-iRXcvFgIqU33OXqe?@jcyqs0~9Wb1}_?9H8U}jBr$=<
zFv~H3EsZ`TYo&Aw=4f;aoKS<so2kA)yhO+lxV5ChC223BQC+#de0ZN_y!u+LdtoGI
zzxYIwJyu6avHE7?zw7y@DqNi?$@1+^bnk}({!Cn4xoGSi;kVZZp+j^xYxL_R)vw`f
z(35JFB|$izQl{EOC2WX(C8jfgoU2RWO?fpo&ChDomF#SDafiU5rh+Av5Uod$Xj$s5
zsLbYqEb%RWj<I3&srZVBxk=m={KF<fm<ngPkksZ16j`w89F9vpZgDS6oFUKbWF00z
z%%$pptK@#FoFp?cYf#d(qqPib^2!?IQSo5WOr3s~x61c?c2|I}IH^FtN6^US5SC04
z&FFU3OBZ^MRK!_k%~&t+Ae@QKmpJs9OCo!yVmzt2*ZLdjTNN}dhNe#YhEP_m&PXwc
z#r<Rf{j6^1XsKqV9SiDwDl4g9dWjeeU1s+Qg4m(OT&S6p3ped>JgQ@>sl$O)5rv_1
zDq^7tux`ht$g^#d)bB^-8nn{W()}+!8Da;M%eu#YAKebfdFHv>BT<D@x)>!vOzMG0
zV;i)1%eA+nENVDaqMr+6vc1xzy;4_O7y6W)jj3L*C>X945qr4yT6zq*Fe#rNH3;ES
zg{)ImH_dRS$#v}Xwr9;u%Dzp{rIl7Vp=p{NADx^(&M|-Dv?v-BwM`10-3%bAP^g`2
zpBnO;K@$Zv3!ld3itxX(Mwdq2ui&|<w<@1aElXDWcg)1sMB6>sB5<*Up?rB@k**4z
zy=&C=4u!=nGkW!hz*v~{f9FHb|8y|sYt-SuhUcNNQ3W_|$>B}Q7ZGjf{t(uW_DINg
z8al1l32(xVGj){I)w>Lx;asNHu|>|!P4?Hq6dC4MS&etKk+n0fOI#y)$XTYYN^QQz
z)m<1p^<B?J88w&ere!rc%4omNZ|??*qqOemlh$3YF6f6J@hroMg!2cP9O>OGJD9(T
zIQQHPmhp_Q&&A+cW%<{bdf(;ZC7(N8X1jH`V;_d#Ca8BQ@KMGrhjxiN0IA%%oYfF!
zQ<lz$N7-rA@@qv^J3rT*+>H*Q<CPO-OgT$?UB(qzRuiE2FK4GjU)fz0=|wGD#~~-F
z9Bsy$5>--HN=RNRoM7;3;cRs&E_SaoTqzk3aonu9uVR4|GGxxUQpFpY2dP@1weq^M
z8OV=16*kn2kA)q1ItbD2RLW37<x3M}++SQkz60%(eh)tr=1x$1m0`V9JotN&CMn#%
zg}^`-inzHuv*>mc<{hHD9U*U1ity`g5y*C$88|5X)jBv)W%?r#Mi)BsFP^ppa*wLr
zw8N!vTdrlKz0|%8>g#G%Juv2XRU=lYNmGKwLrSG+rqz}`Ea;0hzXnb|m-jEx+1b%)
zxlPnL@_j>X5A9VO`XT_S;(vmjE-ZCs(ZgA`xhJV^7WL5Psc&@(P4}z$X{K;5w)ed*
zQ&Q}|NbZ~Wkx25U$785CmM=YiBREIENq!_zn<m4c>MGj4cye7i)`8UP@1%ltsvQbO
z8QTd>Z?7~cEu9vl+$dC`uZfkHDO5p9b+08+rm(YSmoJPnJ^uLLZ;7|`<D`iDot#<o
z9n`9~($CCxJ*i95)BZR?`7>*t*_T8;%c)OQ{hi*81~U6Kum+w+=~UF9swJl#u1-}w
z{frDQ#StY|S3g3dVAqxPOIJe8$+BX%B>5*~F!Rq3Ee9;bHRDrvs{N7W%_}UM40#?M
z7f*u8SwufXSpFiPWeCb5lxKE_Ujk~Il`+DLLzIR2n1G-TR5mGXSx#M)vnP!0*D|M-
zC|Z<LRdCg1JhNOw*#lOho$&Hbc)rMoWVE+x6#6(<u!`OliY<9UXH*^zZ`D<u&fIx5
zc-(Yxtdw^|Ori(J=%DT4zFaULj6m8C>4N%B33^eHJ*z&MjW3w6h@N0b_b!qBhF!m_
zQ33Q2;G^w-*Dfl*J95_wCbm^2Yavwlx(a`yry{~zIi0EsP0mVKb`w(I^y%N-FCRj7
zUQdi2Aj)^ya-aBlox8Za+|+J`FU;<D4_d45b6-KXYV)x?UyT)fY8-*i`kaqdP@r7I
zU+Pik)9G%VCv$?DwYiu7-XjQfst97UQ=pE`{gwxI3PafnJQQ<4o5HHp6%_c+pQ6>d
zxsMh^z0ixnl=~DZSQUbt+6p8ep^&uu3XVjeAo^J$%eQ@(5Gp#xJ%qVOQ48I~ADoF;
zr>GZVlTk9v*k0F5(D%!0ShT83X1ZQMQB+El`0Z;aL=Sp=`{_+*wv_6h;S*UrJZL;I
z`X@9)EKs;KJaLa;DpvD~_t4y{940!|5|5$|MEAYD3+quG^4HEhFoJTgXu`it#-(Fj
zP6X*p5rLK%{KYBuK?_tfsLFzK#eq91^VrWTqAuUvxzgjasCZUXv2}yTa;}I8hgn5R
zw&;(ghDmYs=z0{YsG^I8&It4B_EH-~&K_}j`2Ch`ziH)P3*OiRH-~!%IV0oc=;pIz
zb1EhZA8y-RAS_s|Z1phrb-A}+2cwnhs=6D7T&3@In7A=gkW75tB~`Ufn^CWYN<L*V
z8A2Dg%~BpGZxQLaXi*%@E_T6X#lJ6pcP0Y2Mf#t9=Ij*#>enLyuYMI_0Si?KEYvjh
zm#)TYd1v&`u9k<w#{rUnL{rYz#@*M{IE56WBC3LMS2_$*LY`raw~3RHOV`<31SIuH
zLuel2A*2p5&SED*@+{tHb?SlT?7Wxeg_SX=TY63ID^N8}xfDa_>W`yOpQ5>;x5>3F
zf`ruM;K?<uQ3UT)a*H+$ZeZm4*C<(J^5>NY5{{Ml^-=MLVq~m-*!a!)p~~awyB~|o
zIpC>te12{)22gvx*YSrup!`zoPTZO68lwq=OI|v8{@Ux#woUNQ1!zn|<b&oXfQ#84
z_<1_I4uWIJSDLfb!#4PESY|wZcRN(1L2BsknDox6YJ#b~jqd!Y`+9b7xJTia2EuFE
z>Y{pHR9fHScSo%_8@lW6>50$f%uBazP1$+dNkvOV!K>L0;#X2i<#SVCREjy0j>nX*
z9)W{sud_c_yO*xYRCZKr(a6uP&vfORXEuFWsHoiYX2R-CIUaXrmKk35FItqA=Jn#z
z!!)n5mv_5X6=Q^QvaL|$6>n2Bi4LBV5^|wwS=NZ<DV<mtXPZ!8C}GBR9<@a3Qi^S1
z&07`F!~F_E+M;~8PMO~k?(ys&2ptY2p(P--s%BDiVA#J$y5s1K9l?^jG}7|bZO`0B
zobS4K_tNW*rZqZ|#Hwjs2MjAKDkm!M)L}n36ez1V;BkJ9@v;4AyCl~O3-!|UO4RV#
zz1Am+kaIH}wAkmuLnwWn?wcXH2YMaY9x2o7qoOaaHPcR-kAIE&CHwRfrn(_g@vG6`
zg{LfBr)=9@kn~R6PPi7$l5yb*cK5rs_ABX#;I<0r?HUP&DuXkv6{%sWMp0FCD=#*9
zdX@3>qMTucTH(GJYqHF<M{BG3G+=tGWQvw3l@-fi{4?W2%`2sJolI6cQ;^HVvF|8e
z?&eC5jdLu5UZ;h2^=;n}-o+h{k7Me!VYO3}#jIUg(`l{vG{-$rH~s7oR1RF3EaB%j
z*Jw6k<{>pbJ&)*ARfJi}a#1W8vxHS;M+Z&U!Q|>^Qz=ivGf^IGV%~AH!I$plY%i)K
z)SUyIqL>O?#RIxKrtPCP^-101oyzj_D=*6OG3ggn`SXgW;zRoXPa%a!TSOI}x?J@N
z%7sd*J$rEGwVt*YO|A$VlMH1l=$3ySIXxxH!?B@gth_iwWv;#FyBg8Rsoi!+&I2$o
zHEGns1DA5j@nalmr#;+YZKcfmkqT5dds@doW3$2dGqNQzLpyqd!w-vy?h1N5+|qQG
z-w6XzP|+}>S$nzasL?82WE?E?TZyldiBTmr%n-j#esp?6hFBFW8s}(ib=2pXYz(Cs
z0VlBaC{q<VL{vvE?#2-0wSu+y(#}Gv!uyqLdB~DJ<ueYagYrp(9h6tj^dY0hk>*OD
z^-#o7F;Nw1rH&f(%AQ!F4%FKe_3_=_4v;!;Z&Pvyr}KOW@|(STKq0l-U};>Yu_<55
z44ZevNmHH3<v@<oXF5E8P_pPSzbPU^&*JZe8YP|;Sil|_xwQ$+1jT602Y6kCckrd9
zMbWD?A9qWmTNrMA_D{FFyVIhh1*+y8qN`RgWW0H^Y;(hrO0)I2*OMI=Y%Mg|QsAe0
z?$$-oixF7Fp&?RsXM3BWqjVA7XDVWwE+ERB6xU;9%nqfFAffa{kq%VQ$*A9@z<3ck
z#0z(&<2w;MV}@S-W<%5VNlEG>@0#?)g{5t&?s6IBF;^8=x@hzAQ5-?GDIcp_l9;r)
zYHzM3jgHxi)H}cFAVMVUx<Ga`1D@+k;qv(qBWc0N>~V6`xs}M3;>xCBO`@950gM(Q
z0<zA?9J*xT6?hBqv4Vj_B&?+>aw<}k73m~E@`H8vouu;)l8%tQtM4MXcWl^74{slB
zj(aSE)1Oz&e9OS1A|fJG%)~o4v`s7T^8XXpFtoLoc`B-^($=csq0`ON*%J8o*!IAl
zRJ~#2I*?C^?<>dCLy>SSYtqIiXa}d<)09n^Q3z4hEg|vua;-=g{C_5n*LEeHl7f29
zi)1{G{>*X3F?G)w*H=snm)hR<2vc>=>{s{ii~iU-B!#d=6_o{2!=&a11I0wxFPNt7
zO|3=X)g~Icx0e&wo`)`#HmU4qZv}c-<9Osb`M#$EC~sOVZA;>#4kM^}Y3IElADAKk
z2)V>$7cZh8vd;<pC%OsvWlD7VDo0#B_^F+^p3AP-nAJw<+L`j<viNefk9BC1AH{j1
zHzizE$oVob_Rg<0u*(lh&*t|nYQJNgBKZ4u56aadzUfE#ttXaz-y_KUnd20E>(wrO
zeMV?QHdl368&~bUF6w#Qx)e6KqjMRLiw_+B>)`z(CtU*x>0fOb-6}Gh(%zOU%!Yu>
z@&0UxV7J>BB7QCF(bBMb)+m9{uhhtxDeqH0qnXH4$?5e!I{Gq~o9T?OA9yGRD!nWc
z?_`>yNlVm2C0E<SmvsHJs|z>1GPGL<IYG*>)HyO(D2`T9Uf9sV+eb5-)rKds9pZ?5
z*8x!rU{d56Wd83A)=5W39ad+ytZHEkPC2Z9sXS_^qCT8vdK5QP-?jT_^f=I|)~7+z
z$YWy`3Z8m=#U0M6p-}r!(#7f=M|NQ?o^V~J_c8VP>4j<I%E)O{bvL-UTvpXh_a`ah
zVFdeGyhRjV{_XicG#}4}#%iX9bws^m7S->Yole2Vbvmi8p55qdk!o>d*ruMxzpCYl
zUN$<~{TR`4;TT^zsz)^W9r(cuB+Kk!)=;jmGbUE9FbeRr?1ioIO)pYU9DT`@m!SHg
z#`S+48aTCF%CTfP_`_TMJD53?p;J2OQ_-c3E75hDo`>S7X}>EBoPFG^emQl^#C}@T
zzH&ajPj<I{EHToV^kVm>Z&cZ<Jl>QABMiD!=uy>kJ1ieS-4MmYy^w}v5kuK5s!hZW
zq*{eka@OZ7SbS#js?W`AYx_K`vZdNu=E=6_$Cq`#eiUG$=W<m-iAB=s(<|l8Wwd+U
z7{5zna}1<5uv^bPcgeN2mVBUv5X`=})pccUPiB_6MO6h~p-Q+b2>xbD*E-+T<~nVC
z@7&N+W1CfkdZ-x%-_f6%o$?BoVlS7*gpfB#n?%lAr3Yv5_WI8D&pd0PFT&U>g_BJD
zZOU<-`&T#*3Z)Z>lolYpqVTm-F-KLto|@Y?jOkkyIxEWe)z8t<-3-~85{`Dw(8pEn
zB|G3U=1q=4wL3Sfgm$TMQwcEC3aK`b6PKf{aDQ7}N!ISC86sx=3O$pfne?B9{IXxF
zYv1G1+m2dILhX2_)c-zbp)6k%@Sm1nld<9TJRFptM*EzrrR`+Nc|9YEA3tOgg7<zG
zLZm;??M){X+ta0aUor~+YsXf@GY+YQB(*Kdj=G)rrnHE2t||y&LlstxTBw*-!f_*e
zFDtB;Y3_4bNRHR!>wDS`W1Trso~Rg_d9<zM1B3=JzJ_trr!$1^QiPGc$xm}=O$<_c
z=8kcU@xleAJwv+Rr|o(rJu22JBVB8QpO>}4TA7rZ`_}bHvr?^c41lU7m{DubZ?C7z
z&e(zDKPNv6qNTwERS{Ja0t)QZ$W*+}!<(mBi{uj09gat8_WAGM5Z<{8ARcNU6=q-s
zQq7I^D=*f}CUwnW$ma3;8Id)kgs_|V>RO5U`_bz5ar|z0P2w5KfUs?K>xK&so=)gN
z(7k^;;`ZfSr2P|v-uDcoF4E~ix>?R9=97j;D$xgevS?=O-2Gl#wm!8^5wcdnbTf2K
z!@XK*eGIH%qvN4?dM)nbi<jv0b+wV9i!f@|7K}*8>-E!AVb0#m-^r<<gPoyVIZA%!
zFY&p|=Ic?)TLo$y+LpL9p!Y>iWi&(F=29bOa&LW(8BcXAU+`~x*t<UyTgFoLv$$y5
z%XEE@wM5-qtkbU9ZC>p99Gc_7+4HsiY?)Jghb(SjeSK~}1rYfu=%>Zgb<R0o&#pE6
z;njT_s2U5m=xTcN*7vU_3|B(vXE{L5H=*|W>Q_lUOv!SF@kA!wtsip#B<qPeVOrZS
zPwP&v%z7Wh{^Ud?<%P`mPPO)Ptb@*%(vNvnLy<0iu1KL6@1M9|R|W7MCtp?TI9*}2
z^I?xB$1W$r!K=s4n%`$O9@nG5)L5HJiqc8eat@T+^NDS)#G>Nl(5{kVm2%gn`x;2`
z#ra5VG;`au55M8vsxo;cpwTUGKYr$4^c9;4(9x74B;<=rvkqY7+rNIZ0=pngKuBgB
z1Jl$qeN>Q;J?TUWlqUu^jEvZ1ea7Rc+q%LbHt$kOY(oR1C=y8W`!B0LdL{9!iPn~S
ziAXJ8jWZJGge<)WZb9Yfp}hh+Kd?H20D)4X1C;>x8@c#ag%mZVt1QE$9@FA!bLEP;
zahq8f4u^Y5?FD4jhv2m+3CM_bG`94pITFPmU$oTleFmP{EO)A~;{%Eg7`uNW1kl`E
zrAQ=;MNc#+X{c6;cFTn<Kc!0fMHt=5otp1&wTPFA>tp*7$f&9cM68mLNHIi|0YbzS
z(h(-Yh9e{Z#L+B7q`(BQP=z4UKh2u~N&jB}MC;l=aa2)a(M%CXo!)2%-FE+3aO*Ch
zR5q1Ih6<&KS%U<C9}o5)>EPXi`@>zV<s!;`zkh8!9i1IXkeEAlVWTPk!hD^yUP@8i
zm;U(w*SUk`C^#f9X#XuhKuiQVA&C@Kf7gH8CkaaYkokyF*s}tNq46O2kv9L9VjPx%
z&ZshgFD^6*m_$s7E+R4of(WP3MSpuRkYLmAYyfWygfk){Y$lu(Kkd*m0C465-Cjl+
zJ>EHr>@<c^1j$50yO}1`1th^pQpF_^T=f!(gaQ6(P}v_j7xyBRe(EGPM_~SfV1y5h
zq40rn36H+56c6y7jj2#M5E6+F#x7`%N+B3|&N7e@4ww!m5+#WJCsg_J6^1@|3?24q
zgX$B*_GoC$GkD@Ua4?UP2!!;W7hUvw$az`bXFu78K;aN18vZmEjDqb3poSnnAp@|v
zA+nvK4o7{{=EOIS8S&x5bvgA1e#2gd>yMQ^#8V!7#dJ?Lq1G-E_!2R0=5u7&;{2S(
zon|rWRvkelCWCvt#n-7O>Pz&e4!R1(V2}>D8xi}q!#Wf~_$t83*aR2JodMJsDp5rr
zPsjdVJ$<_%P>{n!5Rep|>N1j!r1X_34jgPMo%V~M9_qZ73z>Ss2y}o#`>}Yj@MDZE
z#tN1ZeYyoBnLS$ENs0m)iXf$?W~yn4WQk-miiwK_dgP03*yNURTWyrSF4~+&z#_-1
zO2R3y2{_}e2@n+s>k^W%83Y9FrYS5E%2kPw%)tp2RYe4mfH~YSMD939A|&s_Ex>pn
zh?q`CF&K<k-gBG)y{3>jGGQ}+dt)k3GKK^0Mxq=O03cvlJNX%_45I@f5-h?{kpM9E
zAodVadtmV(2bmA18RA2{n8;8x0#QLqr9%)?2}xb>QHU-uPzs`(KrH}dHkd*qh=1+U
zhu;)<ckg9ic827Ikq+bp&Ita<;voA+BE$<RgeR_2ARLg00N4tUN<k@KV!*!_---n=
zlJ?B%*>Zj1M5iO?Ao&waMC~Dv9v|RjFb)tDqIt@RkbK7$ATX7N7)=R~K0!(s7$_M)
z0J(}l+9;V9D-bY2OGW>7Yexva6Up_Ihf)N9i>xF{(uLmwVlN>^AGhVj14$sj*^GcK
z5K5Ri71tG$7N@km1-a*FBmt6oJQ%CAO$r4mswd^))6dV-uP?jscT?c^tG*;CSS39!
z(wBciuLsc|esv-kX}&92LP0M^v9DAWBEu)jIY`Y(l!%_$Y9^l-CK_z=PPPZ>&kMBs
zwd$I-^8o1a_*{cimSZSFVEt$KZoAmARhiB=F41-m7~AwFng%%s;6s~%1Knuigh2Tw
z&i2lqmqVi}o9M#*J(|qsv*iyQ9ep;Y!$OL^9W!!wh*}mPg|gFpptIee%<ks?nRVm}
z!sL3sg;Vvqe9^&GBvexOiJeWK77{S!KSA;oQU^&7xn#YM&f_)~(d$t)0-_m|RZGhB
z5_>B^j5+N!>C{^j8|l=aAm{4VR+(e9Zbdhg30aWl9_YM!UA)fZODzk7^x)k`T(tIQ
z*lpKh3AhwQ91O?{4&UE4w-RF6Ai0r3$>Z}rh6TG~zy;Kc6;#BDFK8&hkUvod$V3uj
z3?N~`Q}0wp_u|s+SQoCwHT5|l%mfH1ue^W`W@kfE7%&`FQS%~#2oL`@&q9`I^Rk(d
zK*jh=c~u`XT)0u8Y@{W#th;D}8s|c8N4zKsNTv$Q7a&8h{hpl6LI3bTK@5}-L+e06
z3SGT#0#O)9fWM$MF%VJU;rd_3J#h<e(D$OJPD3CMcy%k2c*7!ZQhL2xd4Ff<M}g#j
z3p4j#fc{rE5l`#>g$$1c+{iYnB7V@I%3XTyCXXIr*vq)fs}%uxTneOxjS|DQ8X<;H
zblAOw#ZUZ@@^^SgZP3fR%z{`b<_Ka^5Jj@I7cqQ{AKqkBpgOc5P%1?L&h~|&Ddh&3
zXqLt@lt0Q}cLlOb^-_@nEtwbw%i+l~S<8d4n799O2Lywbg`%LSBN!)r0x(isexLh0
z-E>qkU#vf0zaV$wHU()&P)3%FvLEk0Rsg&L5dwc(%ud?>QU6lkSI0$e;2JKX8i<Wq
z{U<acKj`Jv6u3oH{_v(sSQ);Ebbx_Fs6#A+Av^h3NUBRrh6ZA4XzPj3836m?){hf3
z48v$ZTxtky1V6nW^w?fOJrXH3ridM32m|dPQLcu<LLhU&S7k4i3LUp0vbT@yI478D
zmjumITqtzNLPQiYiXdM|N81+y+5nxCH9V9jeKyeeq8f(^O%qdu5QEiHUKLY^|9b_*
ziP?cChQ(xYp>R(C$xe|oLS0Rp0ge%;l}Tup$vDy(w4(V1u%U1|SlsR$x+NPBIRWM+
zIb<3S`+_O%7z7v)N1AcqUKxX#0bqm}Ng{Zt+H<_sgP?jq;V)FktgNHJR-XiD19+JQ
zgUASuq69+<A?24a=7t1QT|n9z(OSAP26b0MOJ~AR@!B(3VhErxPIq08rF?kej#emq
zJdDuYvBc7&JZ$s>VC0Iu;*25+F6oZj5Kc6aLZqCS18s4{I<a1<uuhwUk_Jj4yTSh)
zE{=tuHb`L%UJKzCLO}UF5c2i}OqCT(le3ZkU-5>XPgc7g2m62OKkBOb`qYrLPEVW6
zVvKctW&!Gm@E_|w-hQC=fstz+UXf{zu%L?wc~=@Lrst643XnL?MJyQtGCQ0jR`^Du
z4g)0O8k<N#b_&mwQ!c=0TLaN(!{m^lA%<2K*irwjE-IivFulJyA`VA-VdjPz)~ske
zsM@%?(i9|gz#IZZ54@4t5@Zwnq^pn*Y5#*sKu$2kzdJ5H$b5|x$hb-`lr*%RHh~@`
zDQOb}Nx}#e<Y7Ut$N=_04hhW%vImIoz@wzIGR95rMu#*o21%O%GM+I+kIh;@=pQjE
zJ%8P)aSH(H?C)?3fuNWdt7Ec9faD?_U}ixOk`W>GU|^&Nq+my7`qcskWK#LkSTrdt
zYHQeP`em@0NgJ_VAPDB2nAo&RXu%VdSBb==pjr=!s$hnp3}M(gv;rRjKsXjXdh``I
zCgO~7;v5~}44y4QN3+msI%+Vz1ok5(0g!;m3}jA_kupw!AmN568pvSD<s$;6Wh+_#
zgXZnxC@T1e;4%jlIr>=q5fGDqU$`j)!vJpt!4Ub#90|^JO|}UW(a$_nr=<4lNIc|G
zRS)uypZ>_X*15|h5<*q$aSFP+K`1z&rn;GZ&s5W4X4E`17KkW8fIxzOhyRb^v>d%W
z{&+-tNwiFwP%h7JtI~Fn?wkrJ)EXYXPJ-xg6k8e@7UnEYo1NXIJ|CTw2k(Q@ClsS5
z(DuXTOyT{+GCnb2LJx8PZD-6m6o%p+WC%n9y3SD)*jFE*?dM=OcM85Zg{-_zU0V#3
z2IZ4Jk;s+w!oqy!>dxYJQpU&u+TkK?)I-f19bFWdwnGC?-V#xwey<-nq3#199SF{c
zN0BacB!q$;EK@{P<be0^Qh;?}6p0YH`P1e8>xNKUt0WVpz5j^V<{o(-rW}5gn(@e^
z#T^5)Afkr!K8%(HloVk2NkeI^oC8kQ_(O^93wdVW;!yUW3O7T}!ASjp$VV!U9tlR@
zK#l@plUOKcs}J`4jtSp{RwNOWbSwmYW1j1HXb4F6YJJ3(KfY?ql3Bk7ux~t8a3)rv
z3v2cn?$hhbcnrpNZAwB(CXkO{G5S+XjH$~?z6$uR*M-M8L~BmogNN4xWbI!5=y`&H
z>1o@@a#H^sqFv}i>{JMWM-I|Xr)ye_W*WaO5T*Krf&`EI?6=A4Yz$B9!dUK=a6ala
z5IOlux48m9X;-K+oaDxaAvm~I55n>n)~5puI)h4tga#1f3c+;Mkx28f&(sntYpNq0
zzD8zt8*G|Q;3Np805AraDe0;yBoJbuhHUr=;=cZ{p~Ma$J;XHkJ&EiZs8CC+_udaQ
z<}`)Uo3LvJpv3H{LCe{LB7{FQQLq~{Wbh(6A<@1Ny1#!(Tty;Sx*$`kP?QtxYh}>p
z8g(`{@t^&xkfNFZMdA2)0tAU6AOXNTuVTT;GNq)20|EosA%+=%9*rQTfv<RD(BFzu
z!}@40WbYb5BE~8dHAMrMV62L`$i3$n{YNEWI{HWt1w<2>#*n%HALyw+|0t+W{H6im
z9S%n!y0;01;t+T%VH<=-5gTqHiN`YnbRK%7h&W;bheX}2b5EkmI|&g(e+6(5^1jLF
z&_DU4FfhQj#->s=!L~3)i%3$cs;a87l*GTJqzj+y{|Z{4*Y_0Rh&z=2cp?gq52A8Q
z^cORMWG;42$JGj<V8}66_^*z`n%KMp;4ee}lm97_RaWM(P(KRJh9Flw3C0O;Jpi)v
zNQ8?(Gncy{4+TVFMnStWL{nfbXX{XlZ`DVk<wL<BQ7BqK<?WAnSb|%hHku5=8w>l|
zCIa^r-oP4eH!7718OaNVH>;{c@)@bI31=%G3$GU3(6Lo3grecl#mHGA;E@?ffes$R
z5LAuzhhoA*A|Qgy6gTQ9+ZZxrN3=MM38%|$gh=e%?0s07a1uc16dw`1?!XV)FDd#x
z7hSh#a_Kv#@(-XGeF@tEU*Lav6xI5{7@HygAO5}H=(>A^dq%2%KsWik(>-K|_z1MZ
zf$k7~+W|^p3JRp2!gQh|0{!0iugfIz9s}fujC^Da!)1NPS6+Kr$?SA#3Lo>bd2?RQ
za^ST;h8XB9QW+T27%+M1rWmSFkiiP7TMQT9OydLlMhT>fKB|l&LCcc5NELx_mZ0a<
zq*7UQJEy^c;gY588^z&C{zsVI>~KGrrQgZ<@6hD-9F;@ZXqHBwCxOVy3i}C9Q)+e;
z0I{D5(R_11b(zS{K!!y$M?)<N3t$7JJYZd5AJ6Zf(3TM1JfV6F?r?`Xh~yAjCY>W=
z(IG4}y}^uLF|cdQ$!;Ot(4TLKk-M0z8w3?P+7Tm}fPn~s6))C9`ggjb`JBI=*<~In
zY8(X}VhLz=0l-l|Vd8sqTOdQ)QEoyqA|XF_(PO0nL##-&K&WLMNy>S`1Ty9x3QVc&
zoSu}-J%`nUv_F>}#|#JKk*~<754azD;6lJV1RPZX2qvh+raq8)hgImSL1bbFiOAaM
zToQS}OfM)tZK-f+54J%(!XL11(s`c}RT7ZUHdIU&>wlx_Px`){_?{03>*g^C$tYY;
z?8~4$!8^}S69{?H)I%_}2vMoDVIAgbtRT)yN6lUXDj_1E5I$oaQXu4goC?Kw0D0iH
zXvH%uNdFuU(NdnM44l7?9&m6v2!Quo>{bBU94s;LZvZLKbWhHQAc=yVY&6oq9f%XQ
z;bg=#dyN1(CxK+}TMlqT_(jLDr`^=(pjiF?`g@K&5I>EqpUL%8iN>(6^|QWMUCi>8
zB7iS7gJ=YR5?Upsg|%<}ZfW#D<LAlDJ}F7>!;5{Q>?Ag*ocM*X39b>Jgcr`eL{#8?
zf?}@(^Ao>g=OUJ<8j7M&{Mwx>U%yoj3H~~jA_E@-*z!K<e`_c?Kr9n81ULcokfIPM
zId<?s;ROQ`P`pt<+0$zRh6<}nAa($z5D#1gAq74VK#(elx5ICtb?Vsm27|Cy=al&I
zRuGqAO{9hJL(M{j{Y8_LqJ;@WPKH-3=~ND+Ticc&Nv8*obdEg;JP#zrGE*Sz;ffEK
zPk4Ik3<+NnWcUb~Ia&o%lbT}df)+9>Eeb(1Gr?o&)o1{?5HK<%5`yyBQ{tbRSMjUx
zWTf_l<Uo!h6a`&C{Egdo%BX*RfcVP+atzuDN>L#WsIJhA=J!etj((XZg`1H7*q498
zlp{yr#6ms~Doa<TpVX-$K9}O*^PQP&iKu+GNrLC=VQ|B9HqMalB;)Y}VVSgG3>cF+
zF$I@MgG|AZix_<BDuyXh0?knA^ZDjqNj=>PJagA0bl&vivwZd`Ym-vBuJ!^M20IQ8
z*7_D9cqOm|C@M-5m>rf#G_<l?xS9U;nk2Z)`!W|8ze&%o$7QWGDROkkOE^|K@R;XX
zOpY6#8RGt~-5#p4r%kfE8c7^8yT%fjXj3N@HQMmSJB~Wiq89Y&qO2Y*23f4C?0}K5
z$SJbfo0h#>G!PLPV^WM`8a2dohr+mTD1@gGS~PBhnBYxCjx5fsz`*x_$RxpTe)sG?
z+T*AdDjnFSf!CYG>E@d`Y2T*;sO510=zxJS<$7bc7&xDA3@6taB-CX}l#n`1;znzE
zNKA~&W*nPOSUrr3)~+DT4%DeKk{FG<kRc)6o!RVx*i=UKnVp#)FlF4Ba$s#kVx1{;
z$*n+P<}oum;v|1-b_WE^$VxRJhj9EP0gu*R*9JR;54VB9Y$BI`v;u*)1C<9(??0ri
zgCshfmoV(@06S3Fu8WqTvT85dX`}dVq{3W~UQ`JkQV@l+YwRT(=wsh=B}1?|VbC#m
zwc$ZV#3B8ohM}crbgOjKyt~d}OKW@!hMmP(@9^=x=XO2lm<3Hj`@lYAo`m|Z%=GZv
zvX;W~zHrUn-1;}k(d>L(%ZaM_^izsP>YlT%;YtKWuzAx&9dJ;kfn7y2X+Y}f+{rzL
zms7kDG9f|qmhw;I*Pz_^hnjp(cg=i^MpzIG5k*R2=L<uUmNFN!vD2!U5X;vmoii|a
z*kxG`o}Pi~B2yC;6#X7?2{3eGgiOf79Rve<hVZd=7|S#>3?>PXdtD~S((dE@L=4cr
zN^EeU%1qbucXxz`aR0=iT!WF_Ivt919Fs?iQPPX0gR+5FEPBll%s-9#25IXA#0dqE
z6Gc3gf_lV@)1$}8xqBX^4?s3=<Qed1CDP6zD?*7vY<DQN=}W}r%nrJc2yh5pbOhbx
ze7Munqr)}{uA$*lK!v+x6gn|M-1l=ghhoLA438RaW3ipYkUAPT1_1i7;YE3uwGglm
zWU|>Pd24q-slqdok8p_L3(Cm1XTDk|6m}g2r3(oYH8iHc$PaW;8^A!Qs`nLm^R2^Y
z$w7=38*#F}*s0?T*bK~CTFZn$P&kNkKqyfTWMon8(&MQCSJA{|EC*nLsc@Q_cO49b
zF=HxiK@l@3E?F~e?a{(qb3n-qfhF%2!IpAKU^3Mud%i;oS)X_C!AE1*aMjPpaezsV
zB#GN@n)9?m^7_lRg@DXE2?J2snFvUI@Qf-*n+SZV2T#rHLl;(FC=m`Mc)<&x*zCi=
z2zSpLgkHEzo<vGZwnwB6fneYg0hm=G40s&77)2M+CJ`V~%mGU>P*7D71q8)Vr3*_b
zFdJ;4Tm<81@e1Y<b`R8D6bq09AV3QcM~Ts(YFBW&)M6&kpoAFNQv(Q!2%?gSJ_x?`
z1F)Wo`Vs|!Mu?~yKtn}bKq=*Vfa41-ib&Z~n`nVMI+n<Hgy0)lKY<}cg|uvJrHqJ*
zBBMnue{<kSUx5YFIul3p$DHt;2;u{*XkYYt(K@D)1JSPrk<8--?~%z13R&-1Hlf|g
zjl$~cxufWM$}HySnwYJao9Z5ST>@t0uPcWvoH#i<8nbZHkBiQrWpjza160G6ao;c^
zup{Ty;!am{3q(*H2y9q-Cdv{xejL*?a=>l~E}guj8qF~~0vcdEciD^raK)DgJPMR1
zLzc=@ke4nT!%GzEEz_Q;8wQJU-3ktLY?5sy1swHsPA^AgIUAusTZA!m;GD8^vB(a0
zc<wqp$_gGkP1_qfv~~_|TvW#bh5SCBcdWP)B#0gBl-5*yJtr?W0qE=IA|JoxX{bgr
z6uy73uveNkpQPJJI8S>N@D=2t<28&&?F$qg^SYVzKE7WHUhIVDr?alUcmaWYkrb~Y
zpn3k@-psIix}6M%8a8SlGxh7-gjj4+B_Y}%YTE~ODGy8}hVOtHE6n105+m44Pk^@D
zwC|v<P6-<WyLQ(!A?Gn=^$-G**BW-5(gXKw({Z^#J1y4D<RL7+WQRr&ro4tAqKc;x
z)Re)}C@89?nlV$MC7Ba+VkrzM(()J8+2q|?DS(r~%8O7J2zbz?Ffby)mw1*Bau_f`
z2@x<|!I7c>Y1j{A4+22aSGUL%Sf1$WK)_<TW@8Hev>@bSAD#wfp$3tcL!p=*BK_Y}
z=4cOK?s?RJQi5_KnF9%!4)B<V=5YfF1<#*XP+<A6LXrSD=JAMcL$FvWf)FF-+S*hK
zXa`_L@^fa1yq(%P3iaL~mD)JD20-is7BaXN#eoBP7irfYL|@?){YPO-;WIzi{&Zhd
z5c!Q7N5ugT*#*etdH59rldPl=R9S5g$4|12m?EmGNGKx6L?M5kobFK@!!Apx`s1W1
zzZ)4@m5M2-;#=n!{T#z-dMU`j8m#M<F(H$2iw0LHfOKld1c-im;%PH5au(T(ZdJ-C
z;cH-WN81F4#sfu#`4a}7JP0!+K#?mFEFH;=1h6WP;D7OGL;U_{qm|#S#DCN2WXQ~k
z11I`__kZ|vTc6Jw&q!Gx4Ez4W{YJsQ#TF*3A7I$+KwTCO%0?2Q^I`{7<HwYct~Qj^
zEL@2K_<Hp^x(d#5tu=*>$bT{a&s!t&h~SD;YpT)D#%361W00@;;14MNQd0?r8Gt-R
z3W!LAk`hlC9n-V&DYGah*QkzaXC=&nDlCFtA(pyKl{*RNKer(I2)YD3xl)IrJ@K>v
z`JYI@H&Ea-{R7Fd)ng$;nGC;jhGo?~u}w^n%zETtK9me9G!}2Q{}Xiamnr*$1;OR6
zL2t~Tg>)WA2s#@93<{u}QH+5gnuX~yFF<JyDaC`@TGHL87o#yw1a^+j-ol@G%GPuW
zLXdONq+sTQaV(M|KoUL!rvwTFIPQq)(Ten^67~e61(SY2VNZbI8i%}6fz21|gXD>+
z2!YUR-fF|?_~{w({Kb3!)huBOFKZ<dV={RdE(MH8OGH2XKr%a6%3MRq+!By7#WYbF
zM-Q|Z1FQsl%Mh?x5TLvU2;x4jH#}Ww48Bm<wx_HQGA=W|3gCkf`T~TB6ng9k<GFIt
z12i1@IH_X_rT}6F?fy!zy44Iiyq^98P(Z#&SqeR&@GuUB7a*q~^ST#6x|d)jg|e);
z;H7~93{aF|^vM{-JeM!1(0JH=0tTBK4zV_kMPGYxMJZJ_1YbfCXh1Yb#tayiR1*ra
z6Er`<2kb~8!bleds`?7DmH<pZv%dqitmC$&xA`w}0rkMg&qt$5G8hgZN~SlWkrgM{
zl2{(j9cdEg7`V=&f@C35aU{V7H_d)5U7a@>X*Am%wk#^?^#?!ZEA(goJsQkbjc_N2
z-jYT@YlIvHgQ=9TgaGCpj;}D}J|-`z<~GR!2vHcH5wwcPO=u?+rU))-#TPG;vGS5U
z6UZNbF}=SAWF86Rn>VQTjt3z02Gd!7x6P~{)d9tiIvR-I(=b@qpzXdrCers`#?`tY
z6l%SYPq>L?HDjo?;79{!cNto(v`(DLo^P}-N(Z?vj*va47LJQcK?V$2rU-f!Ng(Vg
zFr*6;BM>tNl9&sLjtm6?1WE`%LNEl+o>$6ir2N6$JAod9UZ#y%E(!Y2R;_;|qs8Xb
z02(LB=%x|!A{;m&0t98Qctr3-$mx?o3vkYlB4&nx7(qe1-B2|kW2lf`p~$6T=g|<-
z#;_u3W&5n=8m|BjN(3M=LIOMh9T7SjtQ(vbKMQl)kIL9@CKpBGT+YZ?*I(<Bi3-1G
zKSEvRP6k<*)zA>QA^HfR+TKy^L%Er)mcYeH<IIJobt6|H7K}94nNY_P-Tc7dK#c}r
zWg%rXnI^!<fIf60odhT$RmcjJ`l9gJM!qKSvYL+?A7I**c#xtGK!FGy5ninXgfBoC
z5r7&`pW`9?=SFnZX$o1i*=bEmAgTR$+Ln+xGATz}Q!LTfgPT$N3Y8tIb)P^tyX6ST
zhJcjk%qXF>2MUju>;KK1hoH;CLz|tkYNGDU#N=%nR+ff|W57S7lQBp-^Arc&ULx~|
zFm{XDW(E`aJE;hQnr`RNJt}urQ2o!P9Dp`)ft*<b-j^kG_sm31*?UM-fJ%x<B+Nun
z5ECSTp$rg8lOZd>{6HS5K9JI%LE;_=iWFLuDJqmUA!smIkF@^O-^)kI@bI(qhuQP$
zclck}{%`vzEN!jj&o0{CcjYH0>~0YUR=(u(!{j;M5bZzOk|PLHSO|q{;wNMWA@-6T
z-4Ap)dyazr6N*56-4eogJ075dO;Fe&>AE`^^q;Jc-Hz@ySFU;@ilyq1sJ?&~TTw?6
zhunGnI1gSO2kcqC2T^BJTo@sDL@4`<ltRYI*g}L)(V2*&)jS({PM^0d400eD3HGK2
zm%0!3e{CG&+W*=~$ET$I>d)VQh!2?_;GLcH3dV$W1%YM<n`phafyv-kMy1D^mv4Cd
z$6-U|B}^x{0mn4e+!g6xY8l`+IW+>%nw=kE1cv(1aOOF=n+~m>VFV~5kbrOeI*z4y
z0B9PJutFiXv9K73wGeyG8VM0KJX2cxDDXdNktl@d<WdZQV30z9^#J>2K$s7LB1EJ6
z#vh|{L50H=31tiwgrShk({O@*<CsB4X=(Mk9Z;PDKui@n3ks-!Lu>yp@kjnvQ9r<d
zzQdsHC-E;q_LLG4J>tRrKtOJBLLwfRQ~>vNv?PO%^rh}ku({0X&x#n)-9G2Af#54c
zxVgKb`QxedB0S^kzgZgF!Oj6rZ}jtD$cpyV>;xVNSdFX{A*?EVvF8#U{+r|1lQ>}{
zK!FSEnQ*`(f;<i=I1kQ61u!u{4jk*Bl4*}|ju$^71cBRRQY3-k2B8Gv97G5k1y?v3
zmVo@ZN5C6r%M7pqu@EybY8DX~3?UfgQZ4AJ8VVg@k>aR~3~XhQtV8kN`cKE6tSfs{
zmS6hBma%LZ+m}DpIP_?>B-K(=oy%FVej{<U#*QQlbuK6GBIJRSMIukLzcS?UY2@dv
z;5;@mjGn1Ou{@-#1(I^uR-xd7JRp|N=VdcuCA;dRnVXL>+a`kZQuU4xAX&~!o??i?
zrkl>4@S^;0ZJJELI-Q=UWhrh6xfd)|5RnVD3dc7<Et<CO%^e5b3Xm4rU??o^(3z};
zV5LR?ZL@n0<|$J6Dn^_}hVnufq^t&Z{O7DiLyaNhB=V^cqn_}kA{wE@3R6i@T)#dW
z4?*Up63Fsbs+_o5upWd!i7U$rZgGN6NQ8w&Jqy9EELChBIQ7!<QYY_W>XjcI(T(Y{
z&gdM2Fv+Romhu;<)O<*I332l&=^}#xOago1`bG<YGA_PP3>3x$LYcD`#D4Nzo%82+
zj=VWk3=1@jPCQO%WTaQQL!o7L=Wx6mi4cfDDWf7CUK=aGr8NVQ^<e`p3EDgKNXaf5
zJrys=SWM*j81W(pynu)l5OLefxeGdJD+(c%DBHbUp+9)}2Z9mmLX()EIcs46;VNXJ
zdt_o_e#l&5JVLtykN5x4ia7|JG}KEKG(nmnbcw7j-50~wWq|A_ng-jcbIj;eC-c>M
z$wT`kA!dCFg^D*l#Z*hsI*m0YK~oVE1xW-DQxi2YGsFC!+tZCq6EP$jDxUJ($d4bp
zWp2NVBQhK+exy@PGzj9lJr6<l;&_>Kw~d00LqsV>=d1B8#RQP`QDX&4(*hSzinuqh
z9%>!A2GD+kFkxr&m>Ym_4#4b)YtMHg&s2zcojPG*rjCY*6C;?%BFS>bWOmS}uBwd$
za;(76N*2IpwS}=q$V#)0E0`8i4nzvkk(eM{Ghh%@OJ1(n(_x^wW(Hvd#}XZ_$N3M%
z@W}FzE}aZL5e4=i5mHW~5A6dFMAm!RIoIAOaZxk^-n~bW#R{xppxE&^xKd8v><$?T
zV<MWnL5R%HnZISD3Uo-?q|4i`OJ8iV-u1_Vpk)0>|EK<Z&2$7I9tTh$K!AbxV4xF7
z6GLCvf1iSB>xJ#9h~yzMjmxHJ@)R<foRbHFLN9G%)M`Qm1K<k#tdZ7-qyoYn1VA(h
z?SND9%vOMx`3cEi{l2gAZ^Zw8c2MvV2a_RSTHy&OYJZgisSsrukR3>XiE~=pMMEtI
zk^mX^6(U4$1E8@9iUn{ds|q`_j}b@AvhF7oDF?$k71pU)K7fY(pozT5{jlX2b8*OY
zMsGsU4m=$sj0xa6b?fmL-o_6*cSm?#P9E`OBB6HtC=1659S`03*#O@_H?j~v)u08f
zSY8(!g+QXH8bEG28~$Zs!Y9j5u6s~|8Zkiz`Ka@Ta`UAi3J4M>dPo6xW7JYF<}PF?
zTI}e1iW9Iz43YZL`pr=Dl%yWvL)!`*{z@jOsHCZahAN+B#4Xo{?&1DJ_c{9rNAdx~
zTRyqbs<Z<za!|*aAZ1*mW;AwCa}erK1k{6lGBgr=3e(g%(R0g%95+66G@5*<{h`YN
z@*eq^vOOFwf4KP2X>z?i%T@?<s*jr%yb5+tB$@rjo&r(k7_c5Am=tz^79pdBG7E>E
z6t-AG&V9=mH3qCOFcQTOH5<R@^V7@N1wT9sPt7qo;K*4RMMIdQ<DP63nM3uN5dKAv
zG0x%#EIE>)NAWG6Vt?RnUb(-4r(w1Xv-vgZCFfG6oOm7KqvEKKFoEm0kK=VdpqZH_
zSP@PLP{~R5H=Jt;L2@429QCUh24U!A=%MRaBQe)Q-Lak1I!;wdK+p+F(1YFYUe5iF
zaSJgSA&M{|3N+Xgie)f~mX;tSWo~)w)Gk)_6UVc^<~+u%$+JT^UH^Bi^!v$-=p>Tu
zi@M+!zuXm85*iwkb?r{xcpw^w<S5*LdjoY0l-FUj0)j1)&>xH=)Q3bl8<0?A@mEtg
z4g_efgQ^C)k-ajvFlUD+WlfEeiU-}rIuMAM$_Dqi^8tWJL{&93H3$(iJP?@AMf#%9
zjmY6_0YG*}Kqbdb6LPF$&d4id7c;h$)fz!C7)}F`>4YlkfNT&9p_oM}fVLdiWE@2c
zazX}XN;MZcN>qsfp!QXS2&Q?3lmf7qRMm58nlxb(W~6~4L?{9AHPHHm{OPy`(FXr<
zSD++n2kge6kS9^Y^ykM<*$;ETfRG#?*bBG$%NPn~2PFLkz!4$j(+uI*2zVZmG2IF)
zpd(kdGPrZnfgze+Q43GdQiqCB3>6M2;vGQik_TKE7mp4)0|A&B>hXcXP9TI}CSrES
z2$(1E$%)+z@z)e}B1lk)5okoWv8p<Rh(mDeN1RmDAYW*9zA}Y4MM(t@BoO=HBqIN!
zKh76Kh<9h8KZ`jfC&CPr{IF$95(AU*ARUTIAH}p_kNAJl{KR^EcRzDf;IoFNS%!iU
zO7-;fhf=&n6fz|PfQm!dKVyJ6I?5ixYM+IcO(}&<CRsTp5B+eyAFKDh6bI8*sfVX{
zSs@S<JOTzVHW}==fs%!cU@r(MMLUQYrP{a<rNs^irbnG7MlURbOH(<Rp%ve!`9g%K
zpZ2fd!I*?%F?Ee&a%Vrj3ikeT9KTokH~n3t;XNXU=cpM2NCt4jy@d|(zq!D!836Mk
z`7-^Oq8-wMbPuj2;FNa>Ls2Xl&{STrTriGzbrWFnmdBcgMFWZ2PfZL?Vo>`p#$kiM
zz`5lVA*nJ!=8pi>7QYmB0IbXjK${tq+k_Q?mB!)_iOq0|F5_b)z$PN9Vi#Csf=NGk
zWS8!IAmQqyQ4CBmk;wuC@EGeFSuJY7p`gNLy5-4U0k6R|-~&|LaR5IM2v`Pc845+>
zyaIr$@}{5%Am0XW$akec?^2Y$W3qbcf=jhU5W1~Uz@b9O;K2}377)5a*YW<1Q}s<F
zgcL_GRzOJrW?>IB;C4HICP0bEwFZ7inD-op9<}g+uxvYnx!+LFMwJ*oWbk9ecR<uI
zPUt5QFw_x|$l?d6AsHkn5l9kOk@U}$t%MxYh=f@oB!nTb>a(WokyofS><U9HDhAtD
zElm&;3`A1GDxE_^B4Oc~5=jGQ&>_5SJ39A4u<o(E2_fKl#;{>2PQl!uI1d+zneX<1
zc%g3)$Z={Q5rG&*JgUY=d?`W)?>FSq6opblsltV;moXw@BZ9VQ+0tar=MWE@A&QxO
zz!|oXF$mHt>I1px3FM$tP#q~kF9V(KSmh@{)(|3EYv5JPH5(%ZkR#;qQwT$Hmf;7B
zoCh|W5cq6%@Ua?biO~fLqr_+-7acXFDK=26nottp79b^(3T70R&|8ldLtbOvF<=rk
zzo_7ctm$OR#Ua$SWbcD<R>I>9LqyCdIs^xOWj79n3_RMP>IU}(vm(Tob#jW9B2kWN
zb)d*~d5~#O0&GB1(WcaesEz^GyL3*GfJ{uW3_Yx2rUQzQcQD@ArbuZ0G5aU>z@Q2V
zriA?mpEMAVr|Jrn4%M?(za5)iJ2Vkh%;&szazr@W8JXGsgok)%3c<n&;lFA95+-k$
z70D+A8%teDXqS@E`=Xu{qcEAUv3Y0iCNv!89eB*~r^FgUN>l>LSYz!%fM^43(lElv
zB9Cfh(D|W3zY1B<q&86-S|Ns9ScmQ|I~imkg#bG?inrUVOw{!T0uTe|gbz!Ea2ITT
zz9FBUL?{oXWJ(zeC+4^1I*S!n1H2LcbU*xy#L!ALvHp7sK3bqlLe^;ZLYX0~oBc&R
zpYNi~H-E84gvZrK{zz|OKtN#=hPl*tLHDqo!GQfUI2xd6Dc$yJAH7XPL$M)*viTqx
zqv=rg>3LpP8l&idn#WrdMxRHMe`xb#oOGnJADECl_q`t)s;H!(tHDMuVqOFb+{}ns
zN%Dh{HK3TU6Tpp=OnspsC}eiekaZWak@{3W@YBJ>U%!Z6QUo~vY9(*#0*Bwk<zsj-
zA>s@cbP8CC#iSy<!Up`L57|RO&I~vYfD_W34zr3KOvh#rghES0aE~8TiwyaYZt0=A
zcRtyQnrV_KYMNqN9e4K%!w=%eDZigEBe=sKCO!r<fe<{sEG52Px@yfaSnnDW-aIJ|
zcS;d>(3JE6&sr9y>(RIcxdVX^O*9+B@)R^4%#8CB&u3%u1RzsweCSP}5$JjoGc3&z
z&(MAZk|czgh0W1VDM`9!F1=xl8<XYPhC7)R&tblsW()EXYzWaX+K?_`*=3688X(eR
zmQA&E-jd<4+_OzPRMP3d4(-CmT4<%nnTExOKk<Kz>h_HLN)O;fJ9np(ze<)EoPZxy
zTJ<7P5g&{Xr`8kXhx*TJkyaE25{-yfptz+-1b@phl|+y6fkw0`PYNnz1$ZGrfhh3H
z9=`%we2~VyXRLtiL-!Sb=Jf3@rxnztkc>h?NNrk+1|gR!MW`QVDGo+Kq?#H2$u1I1
zQIu^HW;~6`$NDLCX8-Ac_k?IPj7SPSWO}NDFm`Xo$$w+>>GTjJDbKVVG;{*MARrGq
z(k38UFQmZ#Kx(+zJENfdcN@171PDNcQ>QIK*`Y?VQ9RljST|5FuHk~eB8V(>@}X7~
zkihLwz=*eSNW`wNRvLrv)R%kT+mEQ&X$cY}8${8}s}&)kR?;2ox~kNuDvGnAG465q
z<mV5Bz$i$}IzmEKn8i*EyiKe%45W-yJVZ00G=!AxLMf%4Cl_d7a=SYkLs@}qxhPCa
z3YT*t#vYkdQ@lw0nZNN~5o*xkhj>aNWon+om@`yD1s=VsdVjVlqseLo?Sf{mATZQG
z;Dk@xEC&4m1C`iXe$UnXn83Ua>QTDi_9&(fXwaLCd=xf{@i2r%Q!*w4AgT(i4?&1g
z5Tul+mhF<snG`&UX-q#LMzf$DvAAc$Rr!!Z+F2?IKBym%H&T=&Gv~2#?(sLyR5#y?
zppjDsf07;?`SQqmF-am<vP%JQ>^e?!Gpr%7A(VQc7Z^4m5*kJJ@k)GW8UW^aC&Oc^
zFWs`4KR&<PJI~GOmOjf`Lc!ed1g0eZA_$Y^VAH{wQv9I;6mc3Sdy07>qyfh}V5BvW
z<;xa0)p#}=td>FnzWyG>BD*QjLLy&i)rV=V>hahP3-`WffeKLQ=?aL&voIr2Qb=+M
zxS?!^p+Kk$MIp)n5eLXz*NX~CL3N2q_c^Jga#ILm>_#EWUS*sv<fx&M7J=xIQ5q3C
zSqloKmI4Pfa?@ra1O)zG9f7%pK7isEY;T){Tz~@u(Q!iu!hs5Uw(1U^0hA0M*~w@?
z>uE!o3q1A|;+)Wg+bEI}!wEn>X%AsQ=mWFeG(aeV9=Zw%acLAl-ea5sLkd{Eq6b@i
z+&4Z>bX^0Ay$lR)Dmt5h36<7>iVBfP6qhj?ZRO;jic#5>;*3JdO7;)81zE&~5!~wF
z*rNc3p%T#*;QEIpMbB#04_F4>XIdzM5lBP?h$lfH9zV)@8)|fCg>{d7{<+Lsdxvfl
z@pIp}?%3K<XQ;ie5F~|+2|e=gcSl3u@WJd}|C<g4L#Gbz4pcC`c_<wcb!4$TMgU)~
zCF>SwbPz<)1_J@yWi+@?0VLrMVBsOYTtLC$h;|_PAr9<l*wWMp6_2DEY_c6(Qih}p
zkjMtk$9JEcgHN;QEpOXM)aQNZg@3sBiY!DNL?6HzkUC)68M;8c9sW6k?2oqZ<N9nc
z>lPST54D5U(y-RfbMYQ~(CoLvpXN^gFIskfYG8qwXMnGCF6lQ^M+$s#V`4^8|2I4%
zV{8|Lu>V>47w^opM`(o#SwOzt4#L|P{(r0|e`h{7{6?qAmw@AS?-#a#{QI>ySudE1
z6t1<RZH0a~_wU=rH14wNT>9_c+v#Hv*#y*?spK`h7|euEt72-}8<4@-OKtFKU);A3
z-3ebw-=cz0Cp$2ed_wzig<NzW6DgV6_`P&?W~m^VIs%%RcQE+#?!mu?u`7P)B{-i8
zeuK9mPJw0Cc7v|RH{b+}M$g5)y`Vm40tAAfVL>QF-W0E1#>tZbrLaO6vJ+Wy;J`lk
ztqb=-2f?1>r`|v7{^`g+mHu7Q*UY5m1c6L1H8fIN&38~LkZ=$Y??-}UM~J?w9uPg0
zeaU>|9S}vx*s@xBGC@;P3B+!^j)GjUbxIZxk_bG+{|E=Dx#2WCB<Mi-Mi255hB7pZ
ze>i*8)8e_8wgcq-kYDOpVVSC`k|ijnYDlOFB!*@L4>QT*2lpemdr3zFa7(*5e&PNa
zghKx8zJ8Z3CB&)#-f!BEB(OR|`U74xBtq<A1F?U-oBuQ<Ho}Nh{cn2-wkI&+fbl6u
z3qIhsGCvmSo%gVZ@<{{dK5umEV~FTGs2Kz~Arc<{T&-xOEutk`3dY)mi_zIX3EvJR
z*o0_VWhl@|V0`#o1I>&Nxg;)NxE31l*r{V);Z0(3t1z;Wqg>n>d5u*>SP?&Y3gOar
z9L>lyWI5Uehl9w2mmPT)e>g%gK*%xxtp)k$B4TfOhJtbZ(FfHb5T29nN5JHy^vaE>
z?yW5Wpi-S3^N`H$sE8PufwGXg^;_cS)d3G_0d|OZS)xQVyuG0UzJBvGts^NGlJX@!
zNTceAH3ZEfSb@`#Ofaqm!7@xx-9LZb<kTgDiPD&5#u0pO2BGh9^O+COPko+1ZUf*u
zTv%h-SPH<?F1V9C7Z*|sk$>`qKMtnp?V0XTxNBjL*Wv$S5Mr<JAPMge1Hj!~xsap_
zTY$c7Uv*I^qrx;u#?e>g6gM8}mPz+wg@&gDyQk_rh=}1i41KsJJcO_W6bIXS#{oV4
z>^A~iTTtaw0Gy}elb;8%h;+)&<2(3|V8|&#KYk;3SRB5>^$RKUPw+v}1Va#m{MmeP
zG91kWJ_#%Hz>k<g<{z?~HjyA542PL>1iL56N?^WR#=;W^d{VuGP@<rCJ@&9W!Bg5D
zH06whB0^jfGt>caw&35dYH?$819L&ij1tErDH?J!$jc^#x@0a*n<Pgf_z8n}ny`dq
zk^1(SHS6S2fN6e$L56NqAR&}~m`+babh$pgtbC>8!`;$EVFFd60q`IQfaozJ3H`5>
z(_g@q@9OAS!>ZHSMs`<&ogPx7VLfhpPj!g4z+hM&Q}q6NTSs#QIy}WXh}`zVjiGcB
zkJb~1EesbB44|e6Yz1*FH)6vbiZ9qPW+-KfQv0O_a4}j3Pc2g+G<_X@=$DBY#pMc&
z6sU2{GJi?-!wOmI0k|55eQfwmn~z&+gf;MV<XJ>64puybI+`zS^K63?cT<Ju5Zts1
zK8qdvzqqmoLEPZ2aTAs}6Ku_kBzr3Yfic7&Ay^xfqr=n_&jY<YA#<!g8-?hmf=EI#
zK?H|Ye(tqXDKOo1AJAZGW~tXebu?0v+6D;_K(nJ&IzN}t<Ps7oH34D@hk$qfF!}C(
z^8@umJi%tYlvtYz3fzAm^3&3L{48@aMUZzN5zS|CMGx%)DC9uId5HVu_YcS1KaI|H
zd%%@63js+H0&jFQwkd-FIGi&<B8UT!*L6OK{%D6(?nl25CxG!2ZKs-x-t{|hy9ty(
z=9wJ*xT+@qmjvvR3_QVzG5je>Og<)X!T8XOA-F&<%dV#QVQCo70VGp9p_879ChsA@
zwn^?0f`-)orIr#C!kWTGh+r1-AB&xnt2>k|L`rlYKNZdaxeBAa*0Fo6qOPB!H4w^*
zD2h4Vr4Eox8Wa%LwY_OehHr7P7kvtH*n$kEV>IO^FqxXf&H2TJTg|WJ&6`4(OBkW!
zszaxqDUM%~jyk@K)5|TW(v)<TnT5=5INmInx)35|2sX}_Ghe?_=w%xYri*@}fuAXU
z7F*;dj0-nGLd^&l;fAy>tXK*GCSknD#b;OFhF6L(3`|2No#Dzd@zldp^SQZBv6rG4
zsa$SqlA)emiD-6V<RFLyB@;5Si%Dtl+=he+5DLr)P@+Z{0Cb0sXvVX#XIe53)YxG|
zuxlTHWM5SYMs&?!1(SWnO|!}AoMEuK2nL++UC|L~1qgwN5MR~(SAxAqz)D||ZzH+`
z2mu1FVJA=EaPFOrQLvJmK`Kd8DFq>3ydR%C`kPLex6|R#Mxn%|&LVL<T#OHp+{1<z
zY-4^Fa<Vl6$)bRyrNlEr+>C^yP60qV24)3@mQbx=w#e0XHVy<%e_a1G%X6A!2pp+P
zI)Gt}ONCIY7#r~~n1L{!e(PeJ1v%7`WERnGuWJY4SWX{g3@&JHE;j8)m#1w#bI|*|
z$|<6XC^|gHx<UjnC_{OWA(9ZV!2&X)B#J~x?UM+z3k)j31q`M82P6uFIfplK4v1yM
z48tRY&26C{LseCsr?L1i5k+~=(dk&Dh<hKM_~&ukJmrusYuPKC4u=vw6xRT!4wh8$
zvK<22-xeB7UiM3nU`Yks<a=T69K<=AY_5nDirR!86OjuVPzZ6bI%UBNudM1JaKQ(s
zUdP?B!0}27TjcHo>L@eTiGT{>z6e?Y#MWFmg=9sM38B<<%n%X?W`MS_y!u$~HvQzR
zOF)D`I%Dq6&>!FZXWtk3e$Vj#4<YMqqh@;H&i%CC>w09r{GN24qM!XA?bvXeXwe#c
zFylH<*`X^F#U8F97|BH(=@b1<XOD1JfF`BRm~qZ!+pm^9o})|o#!Mh-{QD_q0G|0~
z$N_`@)DbyAIe$pI8Zr|VLG*ELR}Xtd&5$F{i=2j$!29ReVDu)Al57K^mRuYqKMzS4
zVGad0x5qY!mSZ3eGb~vh0Xgz(2wZldXhb^F>_c%gF}}a5=N!Ym7W}oC*f|5Y8X7K#
zDljxb&crB0v;cZ6S0psg9fNY(lMaeJj2J$?z!o-bfTQZs3h|I<;5P#L1l-&o(9*9N
zcpO2N$k^j1tYN*CHgqx=rNKWxV}8JB9FA$S6PwL9V44wAitFRBW0y>qb~*Ia)p5rr
z=!>UMhx9~EN4Kz&9D8ZfSv{bu-Vn%fG7QQrfeutTnUP15YS>;nh*4(%VvGTP0^b2T
zXqY*UmrT_<JUJ+Kpo6e;Fgtb*S%_{KjEk4((;(O?zPt)117_1WAvr;yb8aVbI@ORd
zrim;yoftZYy(CCXP(D~dd-Kl8IYa@sCc2QaD=)M#@-CUX2McYZz{m<{=d+S(Gz8vg
zwlf_Vh90gb(gZ)CIH^c{eT6g5QXwML3LwY?i27o9{FHo#JI1TO*l-%!1cxc3*z_QK
z*i@D2QOH2E`tAE4=cF&h1v3t(|5IIn4jGvs2b!jbqv$yr`-T<6^5=iDN4-W4WMG+-
zl2VKZ){4fTdHI1LLk0k5MT!bUkRdvbUkf4|evLz+as0?(E+>KI51R@ls)Njjo$>;Q
zDd5)0{I_-L2r7G#6p%p*Q6FDt>3#B{>I9K>>y=Oo1?wZV+zQ1k7ZwzxL!@4aE&?!6
z2nTaum*P+)PA0TEqH8v^DmHUMlXhkytWzX^vR@N$4_K!wJL7xuu)Eg)3@;l-jKbV^
z3!-L+l6P`1y_yt^-VW!xQ(~L@xC$d8Ce%9t?u9lAl!L|tpl}g6aY~Em#GoOFQ32${
zy8-P8oLA72kXW5Sl#oq9Lhm_(ge-xyQA4OGH|-8^h)6Td^V{j4^ISedB#v`-YMeN=
zQo-nt^7#xH28p=Vr2_Zu3e+S)k%ue>0W~u{Ykau|!B8y}bi_pS+zU^|>wSJs)SlEV
zEFThv5F*=XW+rL`Kqs=mRuppvv!p0JE$%Q&rve_*3Ihlr378xp&>HdtQ(hMkxR6MS
zY?pX}Ni00>7!D?P)=jFm9Ia*k698%&2W;?7Q-cH|MhYYW2v878M2rMT4nArGbJ|cj
zLHr2Qss#|PI}6`cHb^>%Uj<x%7@-I^HF~>7_mx~RcT5^sQlgr;sRn?~9Q){mE+`T2
z&=e4`p-v!Jffi*ExRC>73pl}i0d3Ip|9Y`ualybcmfxIRylhifDQlx5GE{I5Cd^Um
z2GG|JnfkuADyI@L#Ob@2&dMFaK{)UyX?3A^eT64^>sFifR-itnRwV68IOc^eWe-dq
z=HZ%=P3B-pz=@MC#6J~?9q2azi4ODHIK06Z4)>uO09e;@9*34K;L}JM(0T;y7qJpv
zkm79jsReyRS_%KB^w1pV=-YFl_neylZSI!l|Ew?SKIb39Oc_*M&s2W{cA%L^Mf~=4
z`RE@ki(?gGz*Q7HG%bPz#Utrbl2)aINP!V8jGm;$@8{vE=6KkX=#4-O!r;5MDDxWk
z!~S>!-*GI(Oqcsm87O2Ou2RrXB)>kIP;80F3?t4L`lTIXm|^@glMgJ<YO46R`PX?g
z@FPv<kUSxh|KM`UJ_jIvj^JY5d+^aNzr584z|TAYRSTA?6$ApU;-tpK;X>tng*So$
z_C%0e5d&yI^9n=zmEr6`qualy&;1(*=Hi1~5rIk4E{Oud$C8ym2UH~=3R3QQ=OHho
z@qsiLA!1?*(L^$=`@ZL}@{dM*t^Z+RYpZ8!K+L(>703%6NGdQSyxdTGdjc;oWa2nZ
z+*|PTm%)gEnsOKqSpDhAGU}A`6gN+N;Gx|+!Z*HS6%|3U+*H7xIOW6jZMiDOb1+rW
zPzxSeJK_=AnlWaRZL%VCKk(S*X1an<ath{bh?T&Gc?Cx+*jSLJnhdUT8H4io1CRU8
zgAO$yNOp&@N2!TWr7Q7DLDGHF6qE-zgvf#33u|A*_M20=1LFQ4{4Zuez7O<0ANW4=
z_ynW=pY*hU*ZWWTe~AB_;{V>wb^no%BG|Voj}>a%XB(X(EN5ej^Do(@JM<V`VPbs`
ztS19}Wj!8Yv0^vPz|gu70!U3*py!#kc~&!`{A(2a(EDr%JrCy{y!c5DU$G8&nn@AP
zm@PARZ3_4bBGZ#t&2YCF^N`CWk&$sh0=Y<o#!-?aqY5q{5Q>+s_}soNd~&(}E1o7a
z<;3mb+~Lj^Ih@{6h08F7CdK=7#^1BIewQ%rYVT$S#Bf3Aj@>%&QQlACLD5~{bV6f>
zcP)3EGe?zn(E(Y<ncz+5d(%rWdj|Qj$~VW6tjfU>LQ<Bl+Q$(F*+bQJqBg~K@+$@+
zp*d$=7vHJan;Se!*8-nfp==vI>;H>)3~<AG_#Okh8y&J#kwC(j&EDZvJ-_(yIpxC^
z)WMmTGCLY`blM?$@d3ATqVkD!N=QR{#!}1V0$i8`aEGwcNu~Krv^4{rTtdTkiDF?m
z4{uU%v=T|s+%PC}-RRSo8onjru9$Q+9w;u${pJ4s+e;(KkTC%m;93kK4hGs#%t0wV
zdjngX#P+X3lzCsnZf=3EQwwXx?NwpX&dOq%0nCAG3vkgx>5BjUBmeLFzwiEcd;}3c
zY!#6Y>HXQy_CjB6Kl%Rl|3Cjf-~Ls9-e2X7Z-W1sasS9rRDb^pf9SOTxrsq1AMZ0c
z_>aT>1s-4MANq&I@~6U|LVQ>GlIclG`GfjD{>5JE=sg!Bl>EwrAMAgR_s$9u5cNJW
zWgP!Fdw#Fo@0#QLQdJgz$Nh{20O6#6{I2*{{eL*%Sp<@aMXNL_w$%Scb_d$>s`*uM
zsKSr?G`C-UlDw0V$)Q~2!5;Nda7)t+^RmWCu1)sl-}bwK6J!zQVK7vM3QB5oSxY_+
zSh;`Q7toM~W?4zqUDf){`L4@9<IE)wjeC4q;Wd;PDM0TjKl*66>{Cj#k_0)e5v+@^
zsGQ`cJjB0J>;B535Udf?Zhy~qqFwvTkdi|q|LuQ#Woe}1$Z+J>PNtFswn%n-<19+x
z;v1G#lgx}L;hwgrQd%9_SNDmH9;Q&NJLvf~HowbomonS=QX`1bhiBQCv*t+S2!Yy!
z40#lH{4h&Hw;rhYt#8w;)#%^48`%mYz1jpYL;Ol4l7BGVxWZ8t|5Yl~=-=plf2R&B
zwh`S4@55o4N9_7!N=Tav9`_G|2IwEWehR&Z|9c0I{y*(v`M1G-AG)Y)ul$2-*P@nj
zEEyP}@WQwdUy8}>%^;z|6G%ENL^tdmLL5hF|L+I!n<b#Ud!XeKKQzQ8RGQ9z^cXTh
z7v-cwG_PNz{X!~#4+oVf6jZFtFe7)-@1ho7)U8!F%T2(#=Z>jWmh91a7igk+meFol
zE0u3%gBBT#J<m4$CM+K%8uvMrz}z05v*m5Qr1zbb{^lVtM+zEADX5;%2d&jf{Jyym
zP6bQnJr;82ob7`YIl@@bg{b$!2?ZX1G2`vy7g^kb1R})F5|IzmG=Z<T&K)V%jqga(
z>#txRJmGT6j!q@MmUjv$b~dAscb$3Si7ru#v-%Y)e?ehcGO`9GJ5>MDJSm{q;AD8i
zC!MT&$$dUOyFo?3=QKFH@kLa`pXQtwkzNLcXQvv>Zb6JRDUqOsO9s$0z)2`ck`WUr
zAqXrw3mMIbWItu0;$NWngf2j)`^6f?RTlcCQCQL>j0pUJU6-`f0f7@vQV@k@jzMV%
zh87Ry#%1`N3iwr<9a1KSm8OysNh;*qjaKHI3$EqRcFd|cczmL&>z#P{3>Tq01A!|7
zKp+!r<0NGc$=%;OYh6`cv=j)D6&XRu^jVZKd_I&)-Cxpb=9$$aUqIPjtx&nMI*2g^
z-qwGu`=1s1zEwWHdeVrseK}xKQbjd&uC;qKuH0DnYS_}wS5GNBFO^3{Hm*U`bmc%o
z*$xLN%Hma9q7j<uXGf6gy5lQpqKx$JjW)bjkDAJHTHdp)rSg{eHXBp^f!k#jRZ%ci
zV04HVudxg4^1kj%Q;K|Z)VH<-!ek*1m=N9GEM)o*_$VLa2gT;0`7KKSKP4!7Nc>Or
z$L*hxecxkjLv8<`EdFQ2pZ0{2{<&HMxZ2<C8CjW{qqkbihOfxZi+t`&kfTC&1Cj&E
z>-PmEMtb>MKEi<6sl{lPLd`VQOI4{kD0XC`B@o~u+?^WBO`PA66hRv~7%JY>IdvOP
zaF{FW5eiw)_Wc1);@zqLA?0;{w<4$>fa)?o=|ZuYSE*IWRq;~5OvzxWLI*_Bg*zUe
zekSOCPH%4E4#Tr4akR?I=xfZdX&gNt_t=P?-r<K~1Af1dvKC$>Q??$Hr4C4!4_Ht~
zR;5(~#G;O<om)#i4D=`A#);|6K+y?m>2&K1N62%f&gKpYk#4lGq<K+dK&dkz;K+fE
zQF9D4rMWwiI3MrU6AGwQ!%-}RIeVQ8=G=@UBq|;=h4p(Hp34Y#F`R8PK=VF#Oo&5p
z@fSVh=DZ8zBR9TBlk}NDWFZn4;!<vS<z3yjY(u(rHG!8cbpg=XrQ4Efj;B3>;BYQm
zQ=ZqTg~lCR!zU&@!nCmoA$U!61Iqf2Z6N{ZW`^*Y(v96H4?QFk$m|CBpzE?IhgUv_
z1cwB&#O)Hv==2T)1P+nRN)BhhSCG_}qUE_8fLuGTNvyIw!4&Jz-FMG3LIyYDMoHcr
zJPyKPqA-Uj!1Lf!v^=1T_8bF&(rzKd&za`q+IF{T-bRjug@lQUsR@{gQiy^jk}0Kp
zvU(l3B;i7w;8&=tFuv|)Z^IfEUW7yU6OjwS(9}-V9!@vV=554J5#k$}f^QF8^EE6z
z*9wMOj%h$cGeXZOhZR@fx>M<(ZMPZkIHnZrdV`U*!&p5hI*LhiN`jrt#E(;{?N$;8
z<QN<XdbES=kdv8?hMb5VJTkCx7h@w^17ZQXxC%_&+BC}tu?EKr1e)86WIB*Gaa5v(
z12Bo4UIAkOVuqtCRb6Cq9_1GyEDF1*-OOjrVjwUqqps(yaPLu$z5GV5RT3HH4q)kl
z#$~ePbPmr`qH+lWF#=l93=k!@t%)3RQYZ=#E;9_;9?Z<uIdG5#Nuvm&3NaqY_Q4*l
z>*1%!;NyC>&KqF^xJ0?KAbG4r$qo}oOIn^WyNO9$$kn;X;jo5nbaS@kr}!ZuBq1%G
z2FSt0O)rYX95g5W;g?TZd<EguI|rG>>@P6Bv*uZN_I=cqzj&yy>=}7%V9dlaB3Zb2
z1~3<VbyRaWa`m5D>y+WBXcbH>ZWV7_94cf232FqX)JJy#3U=O=nkHczicG)-NQYO{
zb`!*lpzabkEOIy?dw_Wzy@t+irvcks>>XfHVi7gwbcE9wJ?e!a*uj2h$_5@3fJ^bR
ziK(H&uYsznolF)B6f|_v3Igcl=3%%u25Q-A)CDCePOgp=GV<}%_hEZ4V`p*~;ksWe
zi{HzI!8X4aBG@fgbk5g-h!W?MdM+<S$%sJQ&{F3I#c{Eb!2V4Edz^S|J)?kwmjLz!
z(?fIuL_+#bybB)V?M-dS`YS`BpuLB)bP5a|Ffv#nP_!4f`NxZGbSX4?9yF+Noe9RM
z;yt+mV{c$!-ou*0gNXX-#3GGSX$lCH1N557IS4qLlhA;m91{|R1m*~a?C_Od(6+&n
zY6WC^jNs&_EG;lGVh0sEn}Ot}&yHQuw+}hT3?$`Aw6ru~(#c4P#Q?A`jRmt4M(9NX
zMF<8#d1X+_(J{qMM(9OHDduB=q~l`d{|rgN)6{6%@Hgy8WE<@QNx62s)8`DvNEaQ~
zlFAMRn4%a9a>HA;d*7zagoK-dP9H2)#qg{fAZoD2lFTFPdGq3(@xX=vfxh5rrz1AH
zhgVSQ4=w}i9viSRQc**<3q+uxq$oQTjA$}KGAxOL;oWP(*EuGk&F~JONSF8;I$Lw7
z>o@W%B*IhT4nx~Bu?z-&dZlysxmbKno)6M_o>)$CJYuey_dRAV6(#qwr#_q6;|6%&
z2=NF!`+Hs^hg^aoC^Q=fDz9;@+hVq;dSf0ntEsn_c7o?RFprf6V!hYj!Q~hmLZm|R
zP!fu*a7=JgIV>HrXyCxlZA{8E?c`ep5PG&%4rC((+y4UARzMPudU+%&cD@8DT_0fw
zwJ9hsaZ6nC)4m$IhnSvZ@?QXKY#m)Rvucyq?YYxOC~SGf48;#DM6lE_h4WBrO9}ym
zI<F9No_*r*C*FO>pV3WG6*c!E;rVnu%%ME>^;>XkH?Zs`Nw`en=x?Z&Bfp@eFToGZ
zIG7riQ^a-(HKLxYz-a4i89ekumYvL<NE{&)_m3RR5jdgX`t&BsZ?hisX_P(PEzL#R
z&iON%WNYNJl2_4;k=av^&_mt_kSHi&8Y$eCASTiGd4TK^#nYJR?%X@CmQaT<=xT?L
zuSuHJb57pqSom8LjW-CS_qZLAf}<$HilGGFFmKzmh%su;wR4%u#tbmUerq2ir*YyM
zhnYl8L#R7Bp&R<oP!@Y^b*Ux7oy=i&2y1wf9YTQ3d^05-=78uXk&2+;y*6H0I;1NS
zWd@;eVVQxHl1Nn*Ky!r#d`?k!X|JfaQP8H3UY&BIRSKLq0$5kTsS=r)3PBL95j%^=
z0}7bZ1H%A7-GXQC%>!#X1gW?Sk$^M!LK>caTUhZtMI(ObTmaRnBP4_*jGPXnFlL^N
zzpx6P(n(=6H6-(*w+>ctK!g}V>y-k>uxi5N>*83L4Cb-{3Do3r)e41miq#TMCTVDG
zgIh>Lmk=&wZKtn*R8n?&{Ah(Zbv~_oP86?}N~kDIK1Us)NI%FYk(?d3Ucg4Ij1F>S
zI)PjQFfs7sLgTi=>aK@Oxg1Esj<#*&{Sdomgkgn6Q=~EU7vqLvc~c(rIQbbLQ2geB
zNu%?|M3Y2MIqM%$K|PNLzF$|A=hW-ZYGb?~FIHFzSd?oh8zcv_)sLCvU3mfEH0E$3
zW*l287Ii?z!o!DP+n-7yE5pRDQ-Q*c#^gSthloW-ToZ_$gpzlen1mKryyspQp{8b*
zH%li;&gWrwDeLPt3X{kXH4rP+q1fHLIh0Lsym6(tra4^kZsjA{C??$xANh=(5Zr-t
zq)7uRkg7q;NUa1*rirW~fp)OW2y8VGza1fZQkMGrJUO0bQF8V14#2)}BLRd1$ke1m
z(NEJzuEP;Hn>-LbX08C~Ms7zij{xOEb6pT+2Qw#8S0j<)p3b+?&B!}9d#@BiL1Tz0
zw_0gIZXq6HLI6W4;tYlLID^N%K}n|q!Fk|inNJi^4*;STg(VM30L<XHJGD7X9=dug
zG<4^U`CW#k>)-?L$(YBXoka-p6f*Vlkj06YFA~c@U89dsq=IJ9!^L{4jH5q&@thWH
zk8qXq84grIFVn}2b#sPb>UVoj9+!R6(XmwQ`brzzz*_J|->UK5AFK4hzw(D6{Xg^A
zRHP*%v;HG9O<;eegg?-S_ax|E+a!k&Du1;KClCDu|CpQ(D4+H;{^J{etm{dJ3Qq?w
z1$oh)zF2S=S8*^fqQc4wF;*yJ{e=u5I5<<-<f(xxB?<)z0LlSSV{gmt{X+G9pIO$z
zAs6vG@8=)NhDX==STKwrdSA!fU8AdS&7T0ar29xZ_+T_=AoAju6BM!s`3MlW!Go#C
z0dThFh4LhEjIh~|oY{&H;WDcAeulu@N+w+-lV=qQl`#8Fg@-DpVj>8Ln248g3r&pb
z9;*)eh>XNUKBeV07>L6BBGqkhf%n#b>@P?4mV|_aI7%jFqrxVNMy;X1E(zWNI6T3J
zasrORDX;sS3XScV{??WV7bl~4mR`hSR_NG0ApQamiZS5KkoKempRC7F-s6yoI2j1>
z{!S!a*C4UqX6VW9LIerHDxky<PA5EhW_Ht@nc69F*d+n~s`h9uJeaz_g&TEcul5Gx
zneEY_pSewfP;>`uI)j&^e{|xdG3E-P>b62_Ik|V~2tp8-vmpuw-ktoMd76()1CxQu
z$>5I*5+NjGx$bgGAyq*FjP>&1bKAkt-4{4;c+q#NND&?=O?u9y+z=iNpn_y36sWqW
z@KOGvG73U6BjP$aIdIRM&%d)?gXSfU-atL|l$>{WbQH|d(Zm7qEfYmC+S9u)$_w@Z
z-^F>I=!l4ls;aM<y`9YB+0uf6od-s#GB9LH;i{|<k%0o!RBCzx^<af~f^}GFNazvV
zklWB?g{tOW5)p+SA(~_f)W%+3lvRotTAt#2Yn$X;Ic%iU*iwmQ$Te8PK!*uJ`Cq9h
zfvl4Ivmp;RsCG$gj)Fa21ntzr&wpHycDqq;YtSYX20$`9c;~pZ0Dz9YWatFqpulm@
zqndWfI4!cw$s42sBn-xqpf}ao6S>+>N4QqP2KDG)ys@`@21Rz#ktkjz$JNm6hc(%)
zNO<NvdImI)<WmG00qr*lZfF#AZ_N2SH0L493_N*M=Rir3d8kY96`stjw)F^FUYaf-
zWSM71!_1%{ZYcJ>gMtP{jJD8g#&Jm)L?x_7A@zTO^H1D|h3K9Y@u*RQFP`r+ct~O#
zgTU1eVmB}zHPDN4+gydhpD_w;ryvM)3O2pQpwQ22sjylK>ShrPku>zq8gNoQlAh0?
z;qXdjVn~;Vbcd<;dRrUp^%T=pMAH>QLorlD$FMqIiGXUJQ8iTs5keYn`7IaI8k!+s
zn;_WJkb1=Cq(}jt;n4%!2A<5o4q<?|RZk9dG6~=&2f3^jBE+2eQg?_B0RZ)eR)k>~
zhPsjxSQ8<Ex=<Zebr)pICpx~qas_*Fl=^-&8pr9|W7FuiBh|x#FG?vrd21bxWl5Km
zlBV_Z;B(&f*QsHJviqpL+Eo9}!N{6ldbfGJct)m1^-@8y`KD{{M(7^#^DOlAu^}>}
zhq*U7gFV{(<{``6JS4HG$S`rZ<ayqV&tPyk1dX0tur5&JmlwQf)pAa2V`y*e-Zi|z
zss~#Tg_Jd0o3K0Bw>KlYQO>0X|CYjr^7%Uk;MpP;aTzn>8k~br>wZ>;$En?7LHKo_
z8!8sbOi=VZj&IFXReevWK+@2C@K}5)I3oc;iGYHL1B>d&Lo)Mo<3eyc&nvl@kc&Ke
zE`gTjVs`^^`W}x^;n)hS&K>TZo|q`91C7GgW7?GH_V6x3Lb;lN9;1*Otvy40&lKW3
z1I6jt=#L!;PGMZq$lS}ib3#$nK0I&<7#zrN0m3^0=yH-m5=>coCjc`L3$XOp!y}^c
zGE+DtJjz_GJdlh7v0%G{lUQ>nl1}|qRaF%$8r^NS{$7t5v*>(H^@loOP(mLA?>{8S
z$zvn59XZLt2>CeddZX7ktTsTrkk&77X0{Hc3W($-j(FAB^Y)&G??nzzchkMzh#vKb
z^*RadRG`%Jq}=K}mqFkbOua#ah<Y7KxO(~A(h-3OKHi8Z9>Xn;p{wf-8TLtmc6*tR
ziCverW@`G%9vlN}aN3H})(f^$#Soyrz8q$m=NrBu%4W#SYKMp%9|-mGcDcv5M3b8(
z$|ECm$CS2&oWpf`C|r<`f@&V~qzd^FCF-xvTGsr*-@h&$jt*gA$`i{l+hd)BzMJS8
zhZjQcQ0_(Y+tK2FCLAq_vLYg@8EtL0*3z03haPb<4v_Cs?stzN3v-WiIVftk8+tL$
zIl&|u`LhQ5dYpSbKK8ozn47tH5{E)!Mhje{Bgwg7=E1<H1vnFX7ba$wc&3$j5vQSv
zFni5!jtuufdiTR+Bsz=Bt)-S{J*mz(cJ*_0RN3vJY>iAOb&ZH*QFo+C9k}|j&RGdE
zAZaHWgba-3H)aGL=L%3(U`<WMhYm<IU}#LAGK&SC>5>{t#Hu8u;3PSpP-J5AcV5O_
z8!xF{f^<yxkc^YWD2%3NY!n(nDP$A0QoOPnQLvgo%sYl_$uC_}`w=ekA+g(g_vl!B
zF=Te-m6zgvQ0tN(Y@m7r));9UD?*gVfZVbv7BX~XxM2`@AE40XHk@x(alkNwMCV9x
z$$I1kD)U^ABh;qCbQo=@bEBaAUx*K{>gLxW<odq9!%J<p+A7l3YEnv-RaI42I}?S&
zfmY^j>m@yW16z`l$mR|>X|6ZIHakQymW`~I8eG>*JR?0vui2T5Lt+MtEN&*;l(C1A
z;gQG4B6cHm*v1>Y7Vsh%c;GX2t-y!|h9t-+_lM9yKAibqK%%Iok}xnZlKd&dO*n_5
z_UL*SuENK-&l{9#kC_L0N>kNpA22EPgvd_<8^SR{_%1u=G&{6umqWnGJRHm*WN-(@
zBMO^@2l8MJ8;nd4f_lyh=LmKWK*;P)IzE1)3vuKd*3P~#O;FUjdtoHzb-k|o$0aNU
z_uhgLXXfitgP%Xl9`lCr!I&osif}XP(}5|JF!(AeG@d|n1?dsw5I}%lYQ%PP78o;z
zg-Vr_dN9LlHt5cq$YM}6!!wk|_iJC>I^kZ*FxR!oqECb2hF05dZD<yy0FWpU6+crT
zB~`0b+?JeKFKcA<^?Ci2yn~Ga(pUh&?N1$n@KiEKsl4HF>a`dOhcu|n=<3M9XKUIx
z>gLFi+C9=UCqG%;GebPa7Y}RTJWni12v5ppbGua_yN$gb3iVaLGoC7LfN5x$j#=Rk
zMDRF19RuGy!MH*M8YwcPE`1~9d+PyvQD@NVxd(&GhW!0I^T^9xB9?UsIT6MRP&~*0
zW)TX4(Dq(#fMgbZYNekM%|z<)D04d(GT7MKs68r}m_j3$OIgA~hz92(d1WP3s0XVQ
z<W%T#+*iPWB^+)Q9#*m%InxSTE8sB-(F~6WhrSS!W&v1oV!hk}X2D?Fxyp#?+$@}*
z0QqD{WSxM?OLLM*B$IOr{DJiddHXLzx+P>9jVTfB0fZLCg_{IU;R@pP8K-{^*arZb
zKxi}Xa>F(-Sz~THZ!*tgj7z-`&>^h_SG%z6PrC{&=2%VEO4%mNm_Z5}0vSe>ds%xt
z$H`OVhI66VIdWd1499Ow$kz^b<~wMG5Yp~MyX7jZ=R=Ci@7Er5^u2JmL&(U;A47mJ
zL>qlGEJ>8um;ff>Dl&i>z^z14!-W<vm)SP3v*+FUaEQ)ziA-hTXkq$E#6o(+>Sa^x
zP*`H=+dMa`-;gJ^lnan?A<vk2SBqe5khu=cyeMse=sq0#oiZJa+AgA<5cdr5n1e(p
z&#rhELn+f7&XP(`QU*bg5UmeCVrX+BMIbO@#A5u@z~@@V9~QhVQE1oO7K{YpYNwZn
zc8r{7Vj+y12;<`%gT&XP$=otnZ8cng@i}B}NE92J>XG-+=t*JdbFRk2J=lQ5AWSz2
zB$7!al#mzKoAgIL78Ue+f`}cttH$z4;YAgv1?Mq|IOm+TE1GFS>1RGi<MMFsedHey
zz5h1%H=_r(wZsde9V|7}Rt8UMS@NSEY{rb)Oj;UA6TsbX3TGI?BtmF*G9mTF>Tv)^
zK)Ao2)CK|}aQ2-ZWv(?UNh-GpB+%lU9oSG+O3#NuvL2#==Vp*jO~X^s<QW;AdHBo%
zZ%wZP#@Y%M>d&o{Zv%Zn&wEmFM=t8cLPLS>(xZpbskr{R&P6F&SOs`$#l|;PK_oY&
zxhT5X=$nz+b&^TNt!PV2T7w5T`N8<xP4HVvaQS(s1|80Up_PV=eiT4lj!=XqV(rr-
z73S_D9J?LC{fAiZc7vhou=9%(z+xS{FBNz}>6V$U1U7#r>u@=MbU2TJx@r{a8^BH$
zp|$u1afBhFAqqF=!@>3kQ-E!#93nyzHjHD@IQZOZp96;vj`>)%sHZbj9;Z1*rerDW
z;}aFhY@U9LYOc6(M4UyNSrU<~Rzk&<l?7sFL|UeX$)t7mT(lX}$ey#*aDD-s>eD&b
zg;>*7+ATztN+&mwk?3=J3rk6{s3pR@Q+$H|6NaaW=Jbiv!cQW{bnbCoa@?E_i5sQQ
z%or#vb{UDDz8t~S%cxZeh8)#$?ZB}mo85Ttnl$VkHZA39u8AjShC)1|V~eFgHjbW-
zs0XZp<panJw!KLxl~>GIx4~eti=^)=BWInmG{l|$_V7!3Cro>T3Z_0@0G<rgINj*`
z8a+EByi%(NP|@J}*xH*n2qFZ8NJC_Xld4JLroxy@-ff%GJ_0-}Hn<eXOH;s_21O~E
zVZ=EDlYl*_6fT6~mWOc;L4pVu?3jl`O%V{>b+nSmJ-Ak|YS!@B9)V9Gb3*JGLO`Y}
zABegwLBCiBbKJhKE^kQqBB+Vt?r_$X?EuWrxmF4YG!O$I8+*c$qhm8!Gbf=^%9@dp
z*G?(o06_Q{;n39T3*WFrxivuJjWOTimL39`T|G1*Zuy@{=Gc)!{(&GGH91@=sJdPl
z0Gaq$s;ex7kKx6<+kA;~s;ar<ZMNHOw$oj;*`=DRn!J)7_j%6z5VDy)9-C6)<2sHC
zrpN3a%4}*ixFww!K`SUzW~xKd{srN6kS-#0P}Go$8uyZhs*=$vSgI1LlSMGPn^EK?
z7S~Y8Q^5#<y6ZZrmSNJX)d<W&il|gEVx5m;;cT>~nq^9<Nl8h;Opi#Lh$k?+U{qR&
zGC55SE3UM=FoI$RveHt$C@TvukdDk=GAxGit-*U6g#m0*RL3aG6fp=+!Tn&F>C<HE
z76eHN3WtFEb{C<06kHRO1kM0)UP0@%CjT76k71gJ1h7CmdiY5!(NdbChlz-n#`j2)
zEP>OnxEcna9<AJu9Ku8%yrtU;RdvxzhV&&mg)7fI_&%xOr!!qb=Oj;FxD=ZN2oB|s
zL<xuMlur*6oa0cbNN7z4Mv+i?5I5X5)R9h)u5Y&fiWvI2X-xK<?ED5f#!ds7BH|c$
zi)zUePM?F@EH@hlV*N}TpNC}2yMw`19>r*yk~O3Bmhmqv3X?BP6JX@HScNp=Dc}_N
z1akIUbI9NrRFG$NXj=nq(dO<<jRW5wCOv`a^Z1b`kQ)a5D2*R23qleGL5skU86?o*
z%co{_Zd@o*(z<wW=a^`GARWD}5DHZBh?E>h3xWc6Bcgi3cQcnJMDFo2(Jw$2cYtiL
z-W+BV8qAgue2b964-zKE$iQ?w(ZC#onqj%4$BwuGc~rc?XqId^mrMrXvj@~cy}hDX
zrSJm7yMYs!ggc$7AVp+FW9-xqXhGyTmk(zO$9+gAfJXNN#>~s?xAYL6Xh)coAu=)?
z6%t-H)C-`ikc2u4HQ6_Z19{MMnuj9_UubWL_c(Ck+<ai1qBaN)rpKvwhkz7DAW6sz
zAwpZqq_7ZpEL-S-;c;lY4&Fnf6yQxvR~qjS@agy^p^3y(y|CK&jC>Dy>yr#v?rPuE
zb{`008K-lGXJ@sfX-dVVYEy~h?WGT7qSBJcX8W%&Xmf_>*R#uqspw0>8VTZNx$Ht5
z`=syW9g*B~GwBQgbFpC0ocsl=Z7r)tu`5=x*4t{|Cyxinr3+>rR{D5AfjN644*~9d
zPVTC6HyxM+hhl-wWFkw9O{$>5Aa}CzPhXBm98RuKH*rMKfba)t2^dYIRS2+lz@elq
zkrJh1lxm}7LA20mX;P}Y#et&m+t3-Ag{5n{LV)TA4g;;qoOLK1?RXx!p%S^*G9j*f
z>}>l@>od4^0{NU!I`h~}STE~Km$Tf7$RWOJ+R9>NUfxy<t8+~O43NlS%Ecu>X9eax
z<aTG~5L-XWI`P^OMGHc7lo$rK8ga#BgbIdBt{@DAj%k6jf*e6U)IYGG`VLOrUn+SF
z1<OEblOfZvJhMV)2Eh){LNgBHW!kbTW+C8EV>x0(%-Nt}UsbBCyu-T9kUOdyV9`Qp
zNC!m>z6kU^J&q2I$Ycy;!ycW18w1&NG1v^a3+fZxwXm@@Fo!nD#|c$Ar4?*U%J_?z
zaNr*t?U8Wpg=+2dO!*`8qfG&o$wFn07C}*SZlQC=$rq#@wIVn^ImGvg?%mTG&@KcX
zo1pE}vo?5`=jdXGj?{0KEk9gGW#0^0efw}=dFMp9y{W{8abV}1vedTlb}+RAw|{&>
zNgM+%*R_$Lik-mic^+|BViUX3m_{U%qRV!4C(F2#N?{dqo2|R8Q>n#EMCFNT5JZXv
z02rrW(8C&Xq1mOkt%47Nc^3>uLy@j45;gpb03_#ylTlq~iRAK8@942qioAC$VmQcH
zVtorU=sl4~1iu%2P==PqM*>_Z#IiVu+qMh=*m*nUpGJr<6-RTk8^F5cP`1!13-Ut}
zhsFwAnJJ=JwS}shcFw~r#$oihG90i6g=+EAriR&yJerczmmH%LM5~~-1)@O(A`r=^
z94PB66T;9Xg0|;WMo3G%l8&pfOYA*a_V2^iO1<|8*t3jz%VFVjmt<ZUNj_~q7P)BL
zGeA`Ml25}Ak`KMUEPC`nt9Ysp13^uR2?!#04s3O?+6lnkQ#aI|D499zz>PX#Ou}Av
zwd5v+;8moOiZOARE^FMtG4DqGB%fh~?pv3|>5K=nQ_y;dKJRLDq$prW${9-!Y)ksJ
zB5vrYQE~Nz8+CoX*MX=et3^JqgTOpI%#$#YM}QXQ6rKmSp}pjUy;fyii0Q}RWIGxZ
zn~UBru(D=Zb{|56!`mXd05>avmYIyf%TEd(oeV+{kcXF;su6WVkV5ws%U<&1u@ccQ
z4+SBB@KYiTc^7PeU#~<x^z0n7!mbNLC$MIt#H`)Bh79mu`cBr6l4r+q86(6rN;w8+
z1p~Sm5*n33Dl#U8I+!IVSfQi`k7T9YQ@K(PtkStyGY+8y?>o1A=a(G))KLyLmfL-g
zP}mN0mzK6mJyX_fc$!3>(|~OqQ^!=~iR#~n4im_3QQep2b2i{%bpY@H@aM@KCTT(B
zba9coY$q~z(>##!YvT@`H*^>{XTXBnfH0W4hR`1m0<ExQ(`a*A)Op|ud!GaA4xyF!
z@%ISUfE`jHAaXk@ogVa|0|h>2yB@rkz&sL?kFy5~eSX_jq_&BmaIVjT;`3*GQ)u$A
z)&6tMm#N;G;$>A9hxm+KK5~fb%fX^|w6-!@1=4x%EnWrGES&0s1WiN>*aA*4F$YsW
z!M64s$-sRuJLJPZ-X{@=;+16a*^xU$r3gzEM4W@8dSyE3@7Xsxz**SJobJf0Ga&V0
zL<Ith2cpJdqCSrKT8aNykmD*pQL#>;8VU+p2(%GkF!ixEi1Hv2Ozls9F2;w(ykqlt
z4-g&9;-9Y`3~wOuk%mT3#uKVoW$5_odZq0#=b4_vhaY8KAlo`iDl$S53_|nb67xEs
z$eWBUHwsvk(g6hc1qh1ppu`7BX#|2%jlm1CiVA56y_LXl6oyn`kwO+k34Dn(ra63-
zRSI$pln*q(f(n7iK%iI>{c!@h0=_Sj_6qRo6FN?ha^cads8Am(KgkfD6g-z8d8Y&@
zor?7Jh0hcN5H`msbc54M@)2<xLyYm~LwLE!I#3jmk&GPX+~~*rPszw#deN5Q2g)yk
zD2P4KdgrMRT6cJH&NvHANg+T7sErdq^uYC_&H@F%_v-Y*lFED&p>agvz`yl44vEHu
zM-Y_m0VdrLv5I1>z|kQ|1MPYgK49Jw3!yj!fr?LIB*c2bp*@OP03L*aiwgu0aJvwm
zQaCUIzH(BpRcwGzs8E7if?_zB(ol+O0rm3`EU5}9E=3AR^*>pXBXB|-5J|`${=-zm
zc%HH10Q!~#v<E~E!aqF1mx4g_0(8h_0HjLcYc91$XAy{L6pMtztRvo#$*oA|ep-r(
z3X+)@tCP2j%2&yLCJFAIdF#R8(p428u001wd?7j~WVmF9`+1Q80fM4cL`f8|Ra7*D
z$wU)W2tbjRtje@W4*fn`zCi!q3jLqst3Y0%)dSZ)+r#Rx*&ldrdy6T)Gl>XhZJ=dG
z`>3WTY6g$i6cr9sz5KmhC?qP9j<iVCg_{zZDW;eTNCn2Di8G3qc)n`^=PS)mz=9|i
zmZFdI`S4W#*fcT<_Nrv=y>5?QqV@_YrW8=rJ46a6;g*;}U5KtiR!KNaA-{{0L7|+D
zy#L8kNc`~S??u&8N8OT#NLrwN$)N~@8@Y&2vS|ED`+ng*g=vW?G8T|>5`Ee5`EU-P
zI)<VU<SO9+(1k2YO9}K4KPX5%%tUzAG*rz|RWUEF0QJZG&!~;W!9SQWHxTj$Ery5u
zgaU|47(x_7-$8$oj8UjS!XePS565s<fImsYlIKArsRLhGJ)TBOlpBz*zyDX3calq5
ztpfr5B!3$Tza*q@2s1jU0eA#H+yCpqz^_5!K<PPnR@%|}O?Nhso|#cbc>FjFejaIO
z{>UCeVCt(_3x-Blf>EIiBBa<b2c$5p$>{`5;*(k&BmMKuAB+MY=k6hZCzwd|=?Woz
zrXEqiyo@aBW)*5m0|6=@;59`3UkZ9phqM_Gs7z25W_UsO9`m+G4kM$AXi*u|;bFE4
zBC&jXk0>1~gP3WX;5>nh!d%oP3LZkncN#7u<_IcU!LaAOy28MC3g&@@(ob7?AfKuW
zNj#8RXr>X6VZewm$)zBMA|i|rqA(yol&20}0*HX>Noy>=06qcs0YV-2^SR+xl2<)<
zSyZJ)f@w^lupMQ>&;1unRJKp{qzs2+NS}VPOp~C6DF{SESDKv3d7U+pLz0#$NKE<K
z)}O*iWF8}VsZJV#K#`H>y7PjH98X#$j@tAFf#>?DHjpFQMcO0W19^f76Rl5VgjCxK
z;_{{6>LiN7RpbJJ<U0<=FADCa+_ExYa0WC=RNry;e;kwj#E8(S#0%ID!lI{r?ZERW
zhbBQk*ka41GIkvW0dkT=Gf9q*AF;y!3GwImpUc<|vka*UGbjk6$+zb0pI3O$z;$ZE
zHvDG-Kp{p3bUbk27(_d%cw>we1%+T86%z#;GdGu%Kt^G$VpxsL0T0GurdE?$VeQy-
z#e!<lw@D<j2VvK7$WD2(c@wpG$)3}qH9{Uk&ko@aOal{#H1Za52QM^2mUsauEldk&
zs_5Lb!SG!8ONVCA>gejV{Vc_g-CLAB-$X-R0lzf^x8^xVvT`TG<z7dQbRwRM>F;9t
ziR~t__%q#T(iAfU5J?r%7-8Y<nklRY5(DRz^PbY1D1Eos9sdE5ir}yY=h>!z>lCe;
zUI?iHcMjdKSzE-PD^iV=qwAugH=7SJclRqD4*env3Z@E{;~U||=O@FKk&ONW)B?7R
zUeBN&wN}o;Cgki1G=NoXu^5C9A4v%8FTjyFQ6@!l3YF;S%>&dP^I?@9eBqsiAt3&^
z%Apu~{e{R;velesfG8p;iol?W7?5a63Pd1ka3(SvB4S8}AkqUM4jGj*08cn>{U@o`
z;WB<xwkK<l>QhG{yM3h8cWl=Yq~SP$O-cq?K-yF5;bDN_ge?&0ZUY0rK>>)77^(_P
z>V>U6M4)g%a8-kUvLTRZkbJd-6B5s(hXr{)51Y_8$3i`<AgP!liGZMq3KhMWBi+~6
zE|4TdNW(uEF-TYm%NdIx#E#j7OcVAPaMP(B0wO=J5X9NSC1s{hyo1{SA*jlZ9(cGX
zqGEZX9N`cFq8NLgo1$trwDe{fk`fV!KnWJ+7y50}ncT>||B37@0*2NcIsoZ`Ct}o4
zcE-HtI;IR@2pQxNo*tmk#QL`Irx(I!?F%+Tf}keim;m2^P@BJa%;G9Ys3N3-BC4vY
zgTdH)oh)MBaB?H}hwkhjINYR2yr4g*j&L=fi6D>mF6mBY2vAR6gOI-Hvlbo^lB5sV
z%YvSD=_erKkU@vrgGpK%0Hq=Y@52F<2wPwr?dtL2dn=>YIBui-k(lJ{y1~389fEn0
z6aIb3I!xjc2jY;5qIlG|{yLMw&QfZ0|A?_JNGTt|!a5a3c_$04Nd^2F5pN~DF@r%<
z6q*(#7Xrn>i6ks@PCQX#*r+2p>X;RWZOJaN4k&ww1K`gXAKZjW0q-nMkn<TKnB*aO
z1oa15e8A5jNNs3u6+6jA0+#W6vVi{r8jrG_GYTMPe1l{WIF~*_m>&fsNFbF3R-!85
zhD8vi3Q_vA22x@WrXhl$esc!}X}O3l4#{P^R)i2bMj5D>Fl+e*bwz)Ghu?Wv;hD<l
zbh7$gr2-Z?8NMY^+z2#Sx8o#Hz_HgU2Ut>JRSAt`#s}xraWpUkFj^r;&k#ca)w;D|
zFVhiuaa%D129lDZL$N80nV9BaSEzU$xN=veTwgH)BpNVms#=O(!sXyQ=LAmil#C$S
zT$cJXj@&}fgAu|g=ubaUii!MSN{8t@%0<J=K-w<V3LfN)h)wK5s0g(aDB0k8!^RrU
zj{rEuY*=2<RfxKurnj_NE&%UtCGdrir7|F&neeXX5ZV3TZ^T`NNRovTfFXnm5DFiw
z1jI_`J;&XFl@SDf?rHcB+d4Q^b!Aau5rfyshYR|@2{*)kK)wN(9x(U8#jtGzpDk1W
zla?Bkq$&I~sDqG@S%MaW5big60OJ?__rKZK+`YoT<BER1a1XIhx8spuCNu<lX_svH
zj$^!3Ns_NN(Lo9y=El|$dX0w*A=4Z~q;&#48sH8+0tUokEM(|u6d>L;f)J~ioP2d}
zSX&Ba<O1|W0)z?{B!(6xDyW*7Wh4SYArN39N2ufgKeQ9OwqvM1An=sv2^6>-;eVi{
zHmhJNaKth_Vg@x4<>b_eha3oC1c?-cWK)%ejDnj$OLc-9nfKV_AEMlgt;P>HNKRr?
z1alOD1SH(=xN|OGUd)COF)((7JMiRw!JN~Q$Yhxi)j+{|Mnxep5fdZ{m1MaKxrU9D
zHHoPKYppA^S3GEyh2rT5_6kd*PVu;4^+_I)qWNMa;JN&y%|L||AfH4-%Z&)yHi~<Q
zqt|K+G&@2HfO<*`ke#7Kfr7+HBa)F+Gk^wgI~^zrGo-TS1!_W;!rE4(DQqpFO(m$!
zrn*vaI~8{02%%Y7Dhm>GF(V)02%)5{JeB4}F$7FfuJ==2CN@I?$qZvB2*|)n!w6&w
zY#^$!5}E<obf}k0sLJ%$!h9QCX`<_f$igO=`m&*_wWyB+sVbI(+4etu*Ltc5J+dMg
z9xy<np;Z8od73mSw-**JILJcRfRv}VOxX+xK{!1FoP_0)Kl6AwuMn2dl(dCLF;0m}
zx|YV$=_hbGxP@yWNiN|F!btFz;>n_BiBh*%4yI)iqe86lX#2D|dqy%`K_Hh1X0W4w
zXMY&Pk=|8Vz@1PNk5w9rlqyK0Vj@0PtYE5oiizsV+NA&=R({M#+8G(0;9b&R+Jwj?
zQU?NA)fIi%cegzMJeStt-0^xm?MtT1I>uu0gw>xjb|h~KF)<k_o=P%21P5&<KopZO
z=w(!Z@Y-jbFO&F!+<~DCM9MVg<_nS*riS2efW^_55Z2IX+03~N5@uL#T3u*X29VRx
zgG>V`m&C28hb|FzAe0gN;GvXE00=nASEp~&z%kEMqCxyGV6%S<m{pFnQP$Xh2PZfl
zBDIw2N;lot&OZQ0(<g6~ftiFTWwXU%VN9i=u1FpaZl?+pUY#r*M?>3#a>>~wkK0L$
z%1BtJ-oIg+m&qy-3JBsPoI58nH3U3EsnG%|zUR+FnYxKZwn+mzC<<LlnteE`1N-s}
z%oLq)$Px%1$I14MBj*XCA_sG?$yHwMuYo?<1|Wuq_IHnT$zKr@y$L%`-5RKl!?V;;
zNhpMb2iF@w3H{Q6%%KAUI)Q`)7#JDAkpJI$<}ZJ$C{JRJgsKd(ra#<FK45#0g8qWE
zJ@PIJ@Ze)haA2qN{)3VM)ajO#Y$zyslu@2`8vwxPUIa|<6GAvA({sqk$?^0~n(+@{
zGP3ypbvAouI*vu{sN8%pholO*P2(RY<MGu5@>)i<ow#fYke=q=9=1OLzkdu`u>7zc
zl)&~V0LZHJ5`cSz83sTI3X8&UDKtavgFHDpy&V^ds?&i3SrH}z!Q{1o!w*mbage%}
z%zMh|AeaZRf++uHB(H6q|5H=DMapFPciNT@1h!KtbrlaZ_qKTEae2;o@=LqFftjqw
zey)XMx<(2k6+!6Ff9r7RzxkmiD4^&@i%cCcgy)(%gb+c%gBeMEM6o(jxQ3Iu9^hcI
z3Cqf8as}$oh$_fJ1Ry}^<3f@kr}TdVY4PxP_gEDF4)-S8vhF6d)w!E@5bNMuK_e3p
zB54r-rM<yGbGW?-?LbgON5aI6D5@xhQ$#|nQA-z~cxz<CM}X>BPvHQ+HGxUAs0SxD
zmkA7@XA7b3Qov_+=<urw256g(Mm)bMWWwlSIO(&Jn<*5-Sx`7yFAM{)#l#3f;80^W
zhrD_HO(_a})ZMEGM16Eo0ziW!BtBSBfrN{(0V%ho(&(LUnV+!!ZrB_x%UgMGb?7V|
zM4$Z>pWE>Pyg@PjNps=cx!Umgma3aokK0zwHkNWAG#8tbvZ2lZeQRzS=^<ylQ4XZ*
z+Cn5@B$nuRKddxZ8Ds&$)3BX5J8%#zhQs`la4>|$mLP-3B*6s91VSG~<iP|~BM?vp
zQZ=a~ysEIMga^eCKXg*$en28*PQ6vrY6&Dne>c7VZ`{wn@;M8@fOl7$UB39R<pCVM
zSr`M<f<4prbbC(^dq51s4^FN#-+(@jWjlSyB)Blw_Sik&*jSQD2+8(b(i$l<3S!lU
z&9gEsmzOyL9u=Y(JA;~rPl$djgh4>!sCkwJH-peamB3O>gjkXPNBuMv12ftb#5xi0
zp?shRlm{?K5rHbdj3n;oC2WCcKFrFJ9Lf)Ij^Ao(LSQGZ(0dj3K}}M8s>&G!ATU%?
zLm`=zc}nED87lnnq88S*5-CCiV3~*Ap~Z;5#FtM+9cBWXPl1oX8sYk?NMlJdr@38{
zO9~MK#e)j5X4iY+#wc6M`>8INNaBwM1%NprDkp+vA`@57*!?7Km|>N02>J-iiM|O<
zgY`>&FF7QZfxx|@>#^t1pHoP549H!;Y%$NCG46m$KoBeee3GoM`))gjoaoTW;lnij
z1s2xP9JL`nsPthd^vzaEAiz0^)is~MA6VPO!`w9X&j@y$d{LdimcBuk<NTlKec}*7
z@c*ODe>3+Lk&zWeKv7LW6G0&qRY+iaAn^AE{?2Lj1SBwcQXfaW*Rg3munf;Kz}ZtO
zhl*kcm@+xji1?nVAqobPp`2)hWRgiE86gR?8jKhfO;Fo>p7(~}KXX2xMXit9gZ@?c
znq=`{g9tw#+XsBZ_iMvG5p{~_jjK%^HUEY2$Aus8n#ORWeii5y(j@Fu7!}zMpTu0N
zJ=Mn)@f1lUgd^0$Vca!QMNvgjPn{`$m#BPX{m}LdeCO%E1z%#-MO9H1Rf%oC4|Eb$
zMj|Enc@RHGh_XgON-bZK+JsG=z|`Teb0fpn9o(gg)S*n%FD)rNK=V&(f`Xz8KMGa2
zBvT!>grJd*9v)$|aS#j7=7EaCGdmpb+C)G)H`zjgLV^X?AbVo%%ZPm^Oj+M}zt}i_
z9-F>pmAr%|OwZ$Mhk4Lwn({$j@I4HQ09-)~+@F)+7$o;Qfayei=Q#^rA%y(AhB3|e
zL)JpkRt|I&BOJSg?m*=X1$qp_JBt6b1*AhsaK{}s;-*r@R3TGUrG#25mQF6VJRTl+
zYH&(S2wq^&Kfwx8xEL5a0ty*m`ioLuRcw~M9|kBfpD|@Tc>0{U;cP%R0IDbqRHs(~
z+lEG+=}gdsNQKE;(T2qd`F>TsZJT_d0wk&up)m_ncEbKict5Oxut4Z%m~_^6p<Jv%
zNGw?;Lc}Xy)Vgo9DO17fnjFTdND!r=qw$Mg@(4E@Zg%Dc*?R$5EF<)^Pyru=%)l_5
z9CUso%u4CZDrkJ^@B;+4m)G)e^N-KVQP5?2Em+!$pt8b~l@Tc#Hj11P4g+<vq2NGS
zNK@$ognEa5moB>6!bZpHEM)8zK(|d-=De#afg#R#!{mJh1sLQqKOilExgd|-5ee(s
z6AaCwn=;?w;mYw`Nh~|#J-iMI2E4$;i`Fq0QX2`;B`Oo)#~M(;ACsd&GRAm$Lov{b
z6LsG^7KD&JB!ME$B!F_9=)N_{@;5<bsd6c_KxGweu2!4j07B{Zms3f4Z}F2R=l_GE
z0b`B33d59;B;*Xxl3*YtgE10Pjs|<Pd8+J2%5zlYLZ<xLI*6Y_RJ;zG(Uu&X^lGeq
z9$Xf9WTD0iprlxaNL7K7n%b!-)8PHsICh@;NKc`P0iNlC5DAAf36TW|0ol2+&#cdI
zG+~AemO@xqfEtFtN)(>r8Ui8g3@QRFiwl`*8NfU~`V$NW;x6Y+KZSjsF4u|8dAX+^
zbD9k1-Ql&ZYdvxk$UxDYn;r*aV_?@f9Ku*K*ZaECDPk*GB>!3-zi4~FJ^r5~(8;`#
zs`e_Wun__usAuKJU0ZCH)AenGq0KH;*5YVwe(*UR0QkR>pELvBd*_)I@j^tZru0;V
zTswjBK4n7?iIU?hnH7=nCot*&hCd4WKcRj5miqpF0r29YK>21@DGI4MfsgU%W&+&o
z3z9mi@&@B;56m*&;$@;X5Bmc<+-_n4B?<&#)Vl1pM`hyWvtYik2(SzynM<}9V1P7z
z^GySwBpxn=8UvG|a3b(Gp-bwkL)hW5nl~MRO_QES5SyUTVnE2WNhAg~TLNrX;Bn&M
z9S-@2cVjS|7c`bOd=Cf1hjXOTA*s{V?Fz{PT2F7hJ{S3riv(|D^+(uCTssh7FKR+b
z`b#JZ*9oZgqW)6Gi?}g6H%HiF>F8OPv>%HIMRyFrm4Nv6K4Lz=s>v~?Fka$pOcX*C
zq48ugG&||1Z$loCkb)!n@k0oN9%w0)2a!*|enuPtL+9CW107f=D^ZyT6Ctv0B=r@g
zswUaeay&hS8ES#HWEOH0eS|2HaYy*IqUb>TiAz7wZ%-=y8H2R4{uQ!HVPG6$*{;nH
zhjoe|d>_KCrd_V|jG(l~{<v~*9bF2U2LI3{hUCjSYaidm^d%EVv?d0!L*GK4r5|fR
zcX%y`$Wbl>D!5Q;9DSS9M9s?C^dHw0AFT4gYT`qmNO;nJw|QQ=kW7!_L6=q@?$m-}
zE7jBYMp(<|PGkygMd026Qzs*1Bo5S(0rh%{C}IjBkEs3d{5?O62dSu<Q}$pSn1+&~
zNr?xFoPQx9AwMV396x+v2#Sl;9K<3sD-kE_#V*}w!6JSn#TXDqL)i0LQUfQ%ygf&`
zf#7xkP$6%|LP(F^F&bDQ5+2Ih8W-gp&RfaiDyr4YUe*XWIt<}r<h^ZE!8(m0s~-4y
zv@&hQ%yd4`>AyW`;ll9gp-`y&tank~u%5y2f$b`XAt_v(fif)2sTh+ikz5Hz0s#(*
zAS5EH18_4Wp^B`LVWTXiE@@iGKRYKGi)zan1guiQB7ySQb+)A%mNChugscb?37`WQ
zCQKw6&>oP$GKoks(wYDx02Co;LjpjsjB%)togsE|8cZM**)Y^_)<C3F3otQAsKlt@
zXtfxDa;Sa2Uc?<6LI!!NorBEpcIfG8X*{irAgWaP{3J<5QY=YJG+sl7L{sNDQm&|p
z@r9tSL98~gfrTGs&p@lVpQ<L|iW7l87PDCDT2rBgPnSjN^l6!pK60E+0$oB@C>C2J
zF$z}jLs3l_21MU$j1j2r7!m2}I*NXXyh}fCvXF`Hz*wAV(2tRPi#-TgJ&6Hz7=$@s
z*hCnbzr_jqiQW;`8B7$krb$F9ej}d8MLd402KW+>LZ@f~KHN;t*fiw!?dye-Ds+c*
zFcL@tl8<V!jRecrd}%`l3b_zi1I5J;?f)>eHw)7x5Dz<q9LEgt<<4R@WBuPgJV1_Q
zIFn=*B!y7YQBW#`ikUD*sTU*f50Dxy^_WjL&`?5<`XIhgGcZv>`{IYG^-(jW#4dpa
zd-ds#ipLQ<W);eEIFdm3ipGQ9{LNIOck67QRlCUyy4l~fj_RJ2gS9T6DU?2!=Lc||
zr$B}W^BuxPo27W$<{We29UIITM9JQ~tMQhWhd%fv^Iwdk{2qUA>HV<}-6<d>Dk@14
zr4gV&p$ZfVKoTWbk$-Iy;(_*wWqtb;HP|qZu6c7JU6ww6S}lkGJ_1h)o@_@mC>mZ6
z?Cc{*Y*d293~K8p1{79R1u1pYRAs7Bm4%IE8H!^uVo^aX(^DV^Nr)MRG8beQVG1`4
zfC@7eXx+hIBqt%{l!-!yNaRctWDXEOJTVhl0W_0PgEV55Oc2K#6bjuFaa>a=Vl={t
zoQA^^s~U(I4AQcsG+<H-SW+3btN{lxAw11r!e`L9V0RPx04yMwp@|AoVnmc9=}cjf
z#oh;CCyBA{m5h#hY1*Jl2nV2r9o}FSJYu3S1YkA>{_hIh2!AYD4<L4qbV}&J;Xye2
z62e|L$`3>(csWhRFnYryAT2p`1GNGX^6*BDcpt!n&boO-`5{4wuVx|gs$=(N`gYJ*
z7=VgJSOLIIS)EHZTKN_^a_p1QNkhwV1VEF1wEsp?&myGfl<b?}dd1v-LU2Q0ba4ac
zKbQWhdUF>rm8mug>Ph$_6^MTw1CVNN8wx)+t?-0*xO{k89-~Kf`8f5`d=A9yKEyu3
z?xlp{ELmS&06XieRaHyeH|v^vyk1L0K_p27+5#@nV1Ezv`>G)RV)#)MA3}Tlz+WYG
zyk3u>kf|BJv}@dN{3Z1UM)JhtvYQ%elTB3yFfWlfrpTOG%fv&#l4Vtgc`k}EFjYEM
z9=v#3b+Y~f)m2q`@U#ApJn2`iy6bJWQIDg#c^(e%o|DrKj*nVutTCnvE@jDs9-+%%
z>J;3ybFrx$D0f4yfyC4?K|mqeEz;B$VR{UL2)mb`7uV_PvF!A@`(1!R$oUF<m{SH^
zy;no$VHk4#r5Qvdxh39feBH9FN+*U7VR)KYO$l0NbZ&=T9o?y1K_~WdSQgO`#2GIs
zJOcU-+(Yg?P?2cJ%gp@NLXmA0(#V?~qp#0Y#Fr0zloo*lFtNAJdb2&}G{}Y|Ao-0V
zJPdG_i<tP+<k!K^)2rp@!jBw66Vgee+hGgsW-%iP31Bd~91*CD472wod&D34eR=1h
z^AM_r(04sDxGo78iIx)tkt0hTj?04xlz2<1hmh%`Fv$lazEVqtA#k~%7rG=00cH2Q
zXx^ynNtM7ZDP&I&7#^rkR+M(OVEe(%pXDQi2?}MO8zrUTl0f_Kb!?0?-;eC>2UOxW
z0QA#n_{)pE5aLQm<tu;`0Mro8rzok@$n7P9-OY+~BXZOEr`qDC5(QN>NMt3gi@8P-
zJl<&fg4=>K!cz)Lk<x^%UWYsIqohJQ2`|n#y(Z$pM3i|;akW@8gNsyZgw94Fd4d};
zm3secaP|7&K)BDVGWfcf57TmsYBnrZFQOsQr#M+UBq3lV0ER-4paLK-mlpyFM1qlr
z+$U3hXGQ+!5adk>EEs{-o{!hW?7(H|x)w$Iz_8W>#1&ytPLz<~fXD@+g^GsNKsj>`
z$axN4j+&xXKQHwaXeP6%M6$sSp+{C9WfO&P8W938f-u#`Q(Z;0y_O^=dgsRS+ij#K
z6DH)z!XG{aAVNq&WFZ2CfZ0h7kG{_pzhQ%`J9#*P#iEviFyv>I_oqI)g^$=73?WQ2
zbI=)-{RjuvGDHO!N`^48AekrzK#>Ze`^FfckPxAPB2WlYCJd^yi9r0^_4?X^O+%sQ
zf#?b9O#+~KUys?;X8+gzwV-Fu&=)Sx)ExF8Jslkw;8Fa97(v1egv5~ve*k_kL--^w
zs*irbsH8!F$PhW8aS+ww^!{%vj}##gLw}Z)e&{N;ISI?(4!7eT_0r9P8ZNK^(?&{B
zJW=9Gdt0u3+8Px`7B5*?OR(VJ*--_UG(126?x+j^6sjqQJ|?>!_CpAt%qb+2L^h@o
zC<@4iP>z8xEdVIcBoZkQgg`VQ5(hBA5TH^Zp#kKgVInP)lLC<_B%$I!I)QWVs7Ppt
zI70Or5LSU<P^o37%=?321JD+U<}?uqf-}#Ju|->I#sZ)%Ef~rr3Yvj{!(fnPlq~_4
z3JY~9AbtQt1v3}wRLRQf-bi*H0X2}!N-Z$doj^u=DykI<(>abzc2|N^IEXYsUc7Y2
zZX#(1j082{XQ8Dap4i3L^u^9o<bo(51akpKK~iWpd7lQQo6;?nrDzjUazHs&lX(Rs
z63`kLhVK6k>Tx*Pp5Sp!{~tn7mRcMIT7uUt3=t@la8vOJ!&V)60zj`9X<bAR&criQ
zgGiLK=~~HIC0_(!Ps2RGbk71w6f?89-wx2RfD2*JIlvEZgjg&O)4RHF8kJwH?oi<V
z3Mpt`vEOJ1uWJeMgD?{Wh?60t2H6jX404tqQ(l0N)q%EkOH_~^*v1-~=|GOfrCni#
zTvU|`g;6puf7X7qKEpB0KVd8OA&^+HGjh)C5S)+6GD_PC!6|S0kleG$En~Jwa@ol~
zQh0zJuG~%=@l4cFlK0wqxzNeve7JLoq&;q;29#XK8j49Ag=-N;2%;forJqu9g--kH
zB6Zy|R&~lw2#i!_*wGi1w$5%qJ#?lcppc=|j*@C(;5h|Q8~{nh5(9>o^20POJi2(M
zt&dJaRR36y_OhMPd@+|cGg2DN3XkGWp(N0&13-JRt+LQb)58ZOU~UL<AF;+rS;P!X
zLeEi{PmF!Lydc2v=Z#Mh3M`gF!^$5PvD3x_VGmfn&0%}UR$(pJrHnCnP{Be#wh^1H
z>zv&fv&^7a>m`w(K(w7f;*o}m%M|d6nu1-B&M;bGh;A`JlAG0*-yEa><VwgaDu^d^
znv2d0xO&SQdJ0~;H#Iv;3iY^Ia`ie*-Q<<u={qck$%SFcQ5XkeF({Fs8H`4jR;{Rs
zPBDr~DUKb8L<rNkT_mTk7%@G^!KhC3&>&4pddGqtQe=62bt;y_0&qDuC9)Du$F8|T
zcNlXdQ5|sdbB0ACcho4r9@8o?QqF@h5*#Z^F$7Z5luCPO5-ASveG85q2<ue|2PTJp
zcM?3M68AvNJ2;g{aPQ1=hfg{<M+lZU?^q_JcH!4&fsqo<kaQW;z?ehdtI6+Vv)J%p
z@Eo$V5o0459z-h`CZ(W*O^j`qj~kW}7;%hgUjA9HZqCm~9c2B$|De$ynDJI^)?aYy
zGLWm>CXN6?A<pQeWH2*M%09wq92J98An}Kh2V;mZLt)@)1$Bxc36W(r$e?y4giFgc
zNMtERP+>9vu`+T|xZE5F6jmR_GdV49mzJ_m&Gh2r(s9RkPwOodfOKJ&nqj8cr^BJ#
z#}6n8WU*{*X0m(ovh!WI;L)<Jn;9KFG|amoO}_C8$88AMVy0O(T*6I*Qn2-ZOTn5T
zcws}I2_qwI+9B1Zgtu+pH=EM+)^ANI_Mr>8Bhh|Wtp`|ZPYlNkJM4M4OuRX|F~bT6
zNeb!gwC%kq(snv_ZPy!m(oZpLQ0Jkp)KL_6uM)sx-YSyjorq=W$4nIBlATM(%GkEc
zzk4_*{>CDXBq9SyEZTtrAxE;hVw;?|GvwrC^uwB30ES8jIcOb&lNEAOK#7Q``-lp+
zXJ$MJj29GB62%)w@|94S!4Shf-R-u}z>#wOqFnHH!@pggWE038okC2&$Fus+w8k6^
z7(>j?jPQvX9s^dH+&L|Y1fc4Qkz83RMxlbtq(Qc&2;IzZJtLBUVLV5{3EM!xc;kY?
z99aO}Llj{OQ*cg$q7NYN;}TIRo$E6xiArrlNU|rxvC5WX4$yER?f_*0VVP|BKfUnU
z^h%PdtK_RafLi2k@p-Y(`RGg`L@_lXB&`Y%0N`*If#7LDxM~!Senpax?EdAhI!?o{
z`)F|KdR2i;LDYvu^T(twyd>fgScjq%!0vMl`aYW5hSIC+?TLN`jjdK0e%~GLgzGfU
zc?&-6$@9JLrmkfgQ?!O}SA{YZ($37Z@+v;1YB?Q>oIy!LOUR;4#Ld9ZZpf;89z{Up
z#E5xtP&j45qZU<&p#=kYaFUTo5Qa!(h89nlTBu``%tj%`#Oxar!WAQu<UN!-Xhu>O
zW7(>n{~dOzT|r8VDgk}y27!xMiTb4_ASn|Qv6!Xxs^+_)N>vW9NJw+v2j&yjFrT*z
zPXY|6pswooPQkpdK6BUSxh2FCLq~9s2>>C1ZJI3yddnoZ`KJYG*!G4;1l&ABUIK0r
zAYd)TU|+-F@V_zjSuLK4a)9bW5eoot+~Crc-=nn96a^HthrHhY#m2j0xP~|kq=O+O
z$nq|1YNErS>r95ARxU~{2h?Fj5fo7oBr(|a`X-Nq)+TBh2ALgm0>&=;^g|A5&EC>N
zLPA0y!G0>}FI^(?)ei?gK1HFzFIfihee#qFQB5Apw_cE)uK<`HdV4}LI(-LKl%%AQ
zf(8_>;o#`bqB;<I+A<tgQ@~7{&G(pidxpHzODTYEL#lg|#DeS_n12w8G9ZDV{jmqu
zhZoWG_|3>{$5FT|t#mJP3@(HmSzwe~**}TrkmE*rOBD+Ry)(s&LreDF#qv(v_2>LG
z!uXPYrbX?{piIQ-0Q&|ZoZnk##++SY7--20@u_B<L56vjKN=N~*~K)DoDhb!Du{Zb
zKbA^GvwX-YTtOB5AI&~mTl82t(7721W(c(d8-^LcLl@jZa*x)|5@)j&6gY+xB@i`>
z8+aFV&Z-aj4uykr25ze^1p{UZ&{o<~UsvCd@|)=~syUTj%b|kaU^{U%TNIXy!0)13
z2e@OHJKqeHs#Fu*J%zXu4nxneKZo%sEJ#aay-xx4!9xHf@2CVOGhCpeonTs_nE?-9
zG{$L+%#I>JI|u?W^9I1l)IOeoVFdJq4^-<V5H>I&RH*tt5TwdLy$82VnFx5zj{tH9
z!66%+yDI%q2Xl{NXhb4X2m&EQ36)UuNkK9~0w`4?0V0V)m+c0TKN710<tUX(xPq_%
z%827CBZ3(rl2r?mG$5rR|2k%X4yvc-fcS{sGAJ<GyMTcKkv&I6HX=usK$aMQk_y-;
zWML`tPTWWp<43IDk_ybhgEQwou{4las9Ir=8lo8?jU1X(bu*r79=qv3FWrC_`z$JP
z1pK{+>)1YkS^uaAzyboqdp=w7Ap62viWyI7doKq3n4dxrA7<ajF~5ukA#?SV*eZFX
z>6d6iKS2`Vr8IuILlA~IueYE__K?dZetp8NU?ad_@aLpmb9uuEF3KmD+ysW7ru_tz
z=hugk^hE>5pNW4>N~EBoi7Oh`kRt+t!U_;Dgr-VN3{#lnvf@4Jk%j>?BgO(#B=*rK
zoOj3H(puw~+^UFpl&V51ee#7fHF&&+AB$h7uF0rohYDr`0_S5d#^uobOc4%KXqQXD
zoa2P={a#v@+>9DH@lz-2(>DCLZ4@O30J2j7iCN8;jp%vY<E_EiGPp>3iI)c^&%ZaH
zHrRYGzK$Z8<73}vBgdG66uN?S-X{Dg4(|w#LyngB7Q6SpLz&|QRIv=1CPH!DH6g^0
z3HW1&Yw>ZxS>+k%GlvDL=NCp<@VG*?xa1rl?@-{f9<MYoRFIE26PJXL?IESlKDgWi
zgahE=kCJfAv;qc<8~ciHf0PU^hkeUF@1WqB>Tg?`ao?>2vVK=^%^@y0V#b%mXn`hB
zIEW)vwrp|7raNb}T8jv^3~}DCTjir_(!o)#B^IQeiR|5W-jL4E<3fMZjq47Lyg?*4
z9nwi89^mL<t*Y6_bB~W>PvG_&&LJq|o&fZMO}*_*Jy8oQ03?!bvh5nYv}YepvF$Oo
zDZfdvA?~+GJNn8^o+x+&0u)&+H26GVQN<2<Ao5bWw!_6r10aDIz=DQ!Gm<}60iTaf
z4(^9>CwFlmOL=B*(rYJ|7gmWO+XRJxAGQ_6`{3uS4#)R6i`qnK9bqsA0<uQ|l%jOR
zXiT7v2zM?>JG|3Qu*srKP>g>dZSEr0aVTK2Flh$Ld+cd8oVL<`Z!*CN_9cLb2)3TV
zp;Aw}II#*63$Vhscdc0L%--e5XfPk#TNFwqtfkbWP6+T;J=y?4J#^kE9;2*7phA4X
z*#2Yjl#v7}0)5`|+I#3|D2j;4PPIyACdWXa$)Ez<NJvm153NxePnw57y{On`elpPf
znIqODA`q%WPlY-sXY-*62?+=&xxobW8ioMieJzf@uwzJl#{-gP3&Q<iFij<vP*Gm%
zX4!bF%4#Um5b;rw$3%X(CBTc6QbN$N1m}e4qjMCvhp=d+`J>S_!@ZSg$9O^?9aW>8
zDW<<gdy%r9Bf&ojLQ0Mu_vz|YKMsNHk%<oSI3Wx|EToJ0-zM{Q*@%Nv08{Qk33P;+
zcmvLDdnYv$=dcn6$Ml%N2I+u_M1=(sNMQQ%0|-Ls`UmQPlwYFePNFm&k*N%-f}`7g
zcKqEGddpnHcLrlbHVY9x!hZ=Nz{~EdLG)5b+>f!ODj}$XnyeB`iKwJJT24WS1R#)!
z1M-rF1cXSMyaQsuGq&L}Xaa)Jm$<-thN%;LhXM){y=$aS=c7+C2V_@l5Q)*x@$%mX
zPojQ0TjIj-hIP<HDjV;XOr6Q%WGH<fPFUJ)6Z#?<gdduGnoML@{#j(%!~oX(0v4Vg
zmu_7DOkD8F1neUR84$2Q{GGh87)}P<-&5a&vI?R42|q^pPBB`3`M^Eh2O#R0zCB%B
zbmbDK&HU!@eg`_bugoH#F!y|ZrQrqgz3ipnrR7CFEMpf{nYu%le@6g;*qgznQ_WQA
z2_6B08W2vf0%0(vL`8O9?Rp#;WXrE2KHnY&AwCCv@M0~77DeU;5VFAZO8*36FXSaf
zr9L@^gs5x@TktRgVQ5gHK*AGb3^N6Z5@3P>YxiN&KtHp}D#Sx1MwK3{KoT^}kYXRe
zF-!Os1fmFH3L2_+a!Y_Md(U3!$4Emmldz)JL|_y|w(_cqQ?C+o1a3W0e<`olL!&D}
z5k(Tch#<j$gP^1!;3+_%N}!U55to|gKQW>x;TB+?Zp1PRjp&~Jq*QEGS}LxMD$1&e
zs;V$@3trZsfXU3L|AuY^gGm$rzpJOvet49bWtee9<Bm7s9x$y{r;^2}Dad`F0r-1;
zVrUNEgpb+z#{37?U6%$dXB{bl%_q2cRA`D#NeE<H!?s|=^PMz~4usQSG%;XjjG20<
zlPhBmp^<1_>%i1`5Pk}NxP9T&?F!gBA~OTDc^`oQ_P{D(M4>T70X{D>#$s?2sbOc*
zCa)Pn7KlPBkp>cnW(I8$aSL>4r6c=#ha>~n^c>evr+AsDXzyLn*b!wEP!S4>=C1i8
zARq2}5#$fb`yPv4PjTseidp{`OoX~0yidB)#H`wC8CbEPWkH?8(a)-4AA={;t@A$A
z8$tCZkpo&7D}we>sqaipm;G60FqyO6#x&=N-tDv|8K-Ks%owdfV#K-m<1;WY2C^h(
zm1l;G0p@jpFfl+#b8)`*V~XyEFfTUX(wKAr8Q=aqj*wSA{{CUu&vO(g!0qRQE|GUE
z%$!N^=xS$sfOM86$m36r6w5dg9ck&aoR-bBbkpyu42}*V&tAucSaBr42@EtK@)f=@
zLlHbUX}fqOuq;#=sG+H-LJ}ef8ZFN`#H~!nS3uAMG<7mzB@4~m?Y1F}xg8L^_Bt~`
z<V_X_Xgeda7>mfz4#>1}K>C(;)$x#kLuNpu9lPnW^ux)Udx4$dK#3cI+>w%Zd4xH_
ze9Nb)oIay-Tg4DZay#;4jyUsesn1@z^OSem!L1xlduj2k=4GArr=0iQK@O^yUQ`eg
z#E}JCoEeI$JKP*h>m1ZwhhA~d0ZBFm1V$coob3DVJ2`b->ULmsAd6)VEyS@*0LBxJ
zpt<Cgk_rKv9mc_K!OC=mWh&z%kDk#FJ*Bf}2ImSM0lat&INfaSQ@qUI7Mu!c#BW&v
z2B)Hn&MO&#wl1V^OP<bIu81&(W*UUekq2reG;(2!!?M=2K8nmVoa_r=%bDnmsPh-9
zuQJ?;rSwt*SiFhoq~Xg9*~}!6*aFbQBnZ4U7Lw$gGiQ;&)?I@d9}cTVqk#^jRw9D{
z?w%t%13`Igu@Fcr%RSin6X<uSA+*_D`(J@Ibe42COAp%m<X|l`Fx7D^Xm&bBY#GT;
zrUZl;F@zJgsv%RTOicz6K3(a;bv>tMTfL6R)+m-t8D}V|>{*t=2Cn=+X2D}FPZ$`r
zWvZeyp~pMg(+<W90c4iuVCb(q)Q3qkIu6PLk59LH2ZBSQRswVZ5kXDJ1A?S*!$8nD
z(nbLm041%E*)`I;WK#gq=0mNu!tDW!wvyK1!BX24g~14xLOnU#J*urv5Re^n3>g@}
z-ilj+O#x+MBuON~84BbGA%jH02|33)lAn3Na?HX#dkfncaXcq8(i2G!ROEHhuCt~w
zPk2M)jsWnQn?w)}?+$P=0RW7UBqdTgXFyzn9bjt(xiQY}#vo|G5ZysDv%K6f!$)|4
zlI4r(qiu(>V8P$G@#420s_OYWCfI8jd1GFPa*lX&%SSB93M9T;d1#9Sm@AM>a<{QO
z<f!qR)zP+CGGK)FgO={~zIPeIIJT1e)w!r*WOkgt7PIHK1;-8ry)+uZsB5O|3NyaP
zcyZ2PZp)({2poKPme+Gy!&Y}Zc&h})06;>N+r1EMTQh9XK?F`kL7MGy<(r4wvCbWq
z949(MUPQ{%j}_^2hO&-_YPlYITaydZGmS5@7)-Ai);sLr&e+oiTe#>tE==G$KxqR^
z&bn9}4=cV3!6;*$gL17xHpU0Nap}HnF}7QeP96szyM%Ewk2~h2Uq&af;>M9N)p1iR
zSUC%jiSb>{VDkRE(ltBI>qRuT93sO`M=TM%P^!6WIPcq_>R8yBCS1Xeb;qs?@?%>|
z(6(UYoE<}YPleFD_wgi8S~Scd3vxD2uSB*}1a~W$ITK{?N!m7fW(IE@bvG?qV55cB
zo*;rbt<1`oRl^07B?jIxlUJ7R_GN}ihBWMGJPd)uWLet)TE}x1(2k#8WadJ1;M5lq
z>bn~0dY8V#HRo_wi?0PwhH609%bK^s(Slh)2!ygh8bpH3xHw`oQx20=h}>c(p+Zdk
zmj@cGVi|D@jG#OhSa}oZOlWQp<V=gLIY*+5F>uAS9Q9?6Ho1rpi17U=Fj2PA3L~R-
z<Pp(CO_`1>33!&@L)vaH)4=49<GeSMCSaY9p9!JXc&Zhq?s2HS-C?|0RBKw|%_vOS
z-+R&=py3)razBXj3DxpAWp-F#jKOTeZ3g;pB=_6XxvcknOTxGZQAZueJDsL(gTtEy
zWoXZMVt`oS98_F%fH;to$%AGT?0iw4!ixY)K(xP;XNcPhL~9uA9dt-+L4@4E1z6lQ
zM7ZX5!iYj8(Cj(`Ww$ak*to9D&Wg{R1QeQgjh;JL!RJM>jX$FT({-;b7%Rei)mdG-
zi{Z>h!W!YQ?v{K!PeECuh&3uC(LNbISrLTygAn*Tt@Yzr5n8PAz1L5yu<YgZXB_Ap
z?nwL|yfZcGwJkFyWu)|-X-cA04*Vjs-wJxRG75zG?Ti|VDWl7{cWkQfo~*^T21dGK
zprW)=2TcrmYm(T{pG*)fwQ0#aGUeDIq?t(>Dw+&1?~RGumu6!^0Az-9tdWBIv*3l$
z`#_P1fPvOSGNq2kf#`Bx)ZZiW$f%3p!bNZ==4&xC)PW4*B5p&J6kW66aGBW5Hyq}}
z?Iy_?H#=S)e8&zJalXvmGAswuatJsybcWrY_pgGY3lL9;-rB15lVbuxeR&u$iIisw
zgeDck^2wNu2Kx>g3L21x?rhL{KsS{J5Y$alo!#!`i&)Hl?!>oD_yHI;HP|$To)HL4
zH$7??Yi<nk$U8A07(xcKMx@c>L%?8$AWc$Xox&QPJ9=QmGVbEDY^S?6lvhOuS`#;5
zvJlRUiwX&uu6$DW2u#d2LWraq*FnWxa8syUOzGm4o;q&2ZM7uYgD~J^Bbd^6(X))E
zDNZAnJqIvVM;!>)9gFDfbE%-mQeOeaQ0G23TM1m%oE}Wwtx1>3l8hr)93>P<#a*Yd
zadSzXBNfq0ocDr!-ukY(A@O{u$X;(NogK0$>xzPddE!ph5V3M{T01_(Ba>Af98Jud
z))zbGF#=7imdu9~<Crj}Z)g)FOt4nT;9Jxy?)m32o+oVWwNN}oUn);CtLgZCOLcF{
zof0`GItm^VmbVB6B&7u4F*(j*CKKu*D9EtgW@eOJG!fG$FgQTyJ7%zQKW)UwuxyRY
zN-8a8Hv`l&j}XY+K9M5HbAow7_F!g@LfkWu;v=z6m`%2q&wO^HNhW?;9wkhm%jXbS
z#=EzPzUw;A8pV@ixu)RbPjI;eBRN;bbyl~xtZCiw*l21nX|v(6Tiw0zM3nc(9fXDC
z(PwIov}2H-Fb}>4ep>)@lRV!igP4jG3JRT_%(VwSxlV67gR^O;O(<th=8I+=4#Po%
zlC#NP@mBAV_+pxtA~<$UhaIRK!2!jQY3m>$z+svun>9yW24g~S=;$8jJh=So!bW3B
zk^;zwmE3tKS}|@n1O^8)h5%TYaRv-B3K%O$;gbrj;Rb_}TAJix#x0SkG&3L4Y{7xB
zVF)mZu(lGA;6G8JV7(h9n=7K$#tW0hUi=El)Wb)xuUW@<VtpL*qY9_9J-W9gH+1Ty
zMP~%ZlUDt@*WVWtF#>${<D!e|bVJRsGj*CUb&Kq#x|h-0ol(~2W;M7pw)c6xn@Y7C
z-Q`}lO#8g)Z!sIr@UL5@eb^aco0HX`V$Z+y7Ivd5(IRyc>LLkA6Eg&)x3|>CPB|<>
z?&cV~Zt_;Q+{J9w6vHt=<TXG8c%!kQj#vcMe+dWHL@J0H5a<YN1lcw6Y5Hu_hhXet
z6jdoiRZpm1fLJSr@Ee>(8YQk72TYEKI@<j=tss&`ca*%r>@(PGa)jZ)ETho#qYT*a
zWzI8uG;h8jx>k4LcXcUOWNtK{jaM@!^EH^xsr0oOx7-88V66}r2U8L|wn%>RRZ_&p
zr=0R*o-J`N9kgpTLeraDMvTa8IM%DMwVk>lF$xHsGnG_RfQ>T*3LC@j2!$IkZ&pUa
z;c1*IYb@l1pcRz}*fsOZw)-1|?%7GSmj_s`Q?&`5$PkAzb{vE<#yc1o8ia7eQ2h#m
z<*v9^PA=*3239caOT;=zl+&=*Cl3aETN)oD$Gk+4JrEt4IfMAj_Am%W$76^bM-S1>
z!#E@q!b1pVvEk&!cf@g=rKye#?()_MYvq`jg^U&np+cFP0Ye2UgD`n%k#?y;u?Toa
z2C{ZFw{s;FYe}zTRU2(KOd{Ht-pXoTgx&+a!*nDsW;`;;X<`?7rQ0KA12h@L;Nuqv
z6-h-D2_<7J10M=}4xoU795GKC69G>qI-sj!1dM{T+zJ;(j$mt|uOdZS+Z3|ERmqm<
zaFMD*u-I;!-XwMgz>SQ=${<1@SmVGGj!_I@9pj>#YC@Rg+)&|hdDBgV<BALxE-*7B
z)bX&k9*Kx(ZwnC~X59mVLIj*`npYvTj^nAVtWfe821O7$u;&cimoO^8?c@eR3WkEl
zoH@3KX3GRbBAcy0AZe(xK|$q=2Z5OG7SeW*;1H368XG~79MdgONP!C2wrb=|n%awP
z2u;anZh;JCz=DzzAX(ivMv&<2*hJqt2<@*OlQ)KI>}VvU9J@R&>HvZEFj{mo((Xo?
zsOJMRX?uq?;)O3nxm-YsVA#lZ;BpQ;&ViRHvKqStdBu<wzfz?9jDzPgLlFu`_pvM(
zyJk$Z8yB@>0NliwMvx{#0F;&liV`9Ll2IrM5Sc+GKhr3t3LO|cW#Pca6xavP%rO8S
z!689FAMTgrIuf8EPV%2DUmOF{MA!lH5h9R##R`Y71=v_E#Skuu5o~K?`cLPqL3ple
zYv>O>J;(?9r7H*?kFo>X9$eC0NPbW!vOr0)QH%vBum@Y$4n{y?smF#9q1Xk~4#}lp
zx743p(TH}6pYHCPE%}~bcTQrwHX-T|5-kbtQkvXY65NmP83F)dHqubk0PY4Gp%OHq
z>=Wn~!_)no3VDVYNCa;<xbecSGf$-C$7BoFI_O}@1?d#wsf3n9V<|xo$i|l(p$d-E
zfx$d@IZ*FWEJ{&0(}pQite|u=V;KyaIyDS}8Hn`g`B+R~3=qUMHgqRLk{MO*VF%Pp
zE%zqts-5uv9@vJ-m{#qCLAq0@Z+Fr4LdUnZ`Q^5L2WiNSP-u=?TyrCZ63sC^7EJ2M
zMo@`3Q=(d-Numd%YidEz>6!WKw65TuDYC|>_O_eJ{QVAKGVXN2r~YTDx81`U{K<XC
zZ#v0mpc-*DgmUJ6gS7R8RB$TDR676|q8r-E&Ie=L%Q%Bm9udzaLdO%^pu02*(Zvce
zRsiNu20TFrt_SY+bCw4;Yl}cIG|qjpY}>O8&7NFmSdSc0B4&3MH=vC;{ySL~kaC`R
zV0k<_uEAv!+>HzJChbmkJLaI0p_0?|h<I~P?l|p@YYY%HIP4lxNt|nTPv%(g2xfo~
z#K00A$sq5uw$#UdpB!5*UUF@VcVt(5A;(rGgvIU?7gf#^t9W=&SEU&g`W|tX@g1fw
zy;xMNj}HB@sHUf$T1K4ltV^?$!cA7wmPoSEBU=>ExuF=IY=IEP;F{HSIhM4@*-l*e
z1}q?!qApz3!fi$q&^?)px`1%sVJG_&suYbMr289vMxa=?LNABT*c9b~3E`$n0Hh)a
z8AK2_yu}nW71Kz0Cq4k7PPoV!Y6Hs8todm+Gz)hM5I#it=#W3{R7Owp*`7l22q^FY
zSJ4m|0VrS;QdB?g52)M=T|orqQJ=jEIUyoKA%+U^6x~i36&%I(5dko%1$8_$1Pp~w
zqADS`fE$pIa&^EcP(JbXe;QJ%fvTaZ_p~G(*Y986e(?NK|1|7B&~*pTVKRCX#vF#H
z$saTb@xIreK5=;p<RcIKe_fUGAo`7c*!A{@YCz<sCjuvAWKybwJ_ab7MGQPLqxG?m
zq+tgDn4)Pqlar*~b~zo6nFAo}m_$4@oR%t}+>{YG7%YYX?UewL7%fp&YXC!`OUH7R
zPRD2|VR;cmJ>s775P+;W9-!C?;u6%<-AN-m&sk!^UbPAvk(&LbCa<j#*e54HMz1T*
z9*tiF(23IiLy-1CF~7ibgbD%r$gL%&ApV<3LuzR-1O8}ei2m?QK_C$RnlWF~{Vnif
zfX$*bRSGRcbJB&(=&3;R!^`LY8xGJ9U->i>Q_12ljp;f9NIOH@(A_Dfh+{}Yzj~^w
ztW(T~qB@@wvlKA2EdW>lXfi^nD555t)nSaZqGSXh6;Y&dvX?j%L@^%W9;99`zw4q@
z3H6)5&wKqJq9{mU5d7h&TX-`g4#c?WP5A9XiQfuKIZ4sk!p2G`3M^0*tgjt0z)4u(
zoC2qOw6sx0ISWp7LvYstwF-GBHJGbEnq-(62^k0q0LF)j_k<^`?u&}UoB<Ez@KW-y
z3_nGo2d+~gIzj#U6ZAX+B^pumQ2mgZWQavJ`jQkH1deEd$PcmU_&~}O<PYhScW;#T
z>~sfd71_kh5XmNg%0L^2D8#NZ_JuMEBpj9fv*hl1esNZsWK6x>Sp@OCNm+Ex#iZl4
z$izfZIvqf26d4;kO}?|9CxY0Piy(`Mg(DCq!I%9Ixe1ZsA$nn7o)@ga%e*LXlfBZY
zc_a*hI42qHJ>l6CWGN0$u$2gedXUJ7ZvIB5#^VFIvCO}&eWZkb$;1yoi;MGIp9LW0
zV)iWp1PBs2?fqQ-XJ#DjK^Phaoewx%AX}^CE4Qqrl@b(DMKF$^hE^~hXbvE{94i6t
zf&kaou0*&%v;f&ngJ2K$z%Y%-ABoT0AV~xyGx1ZA<peF#2&R7-$tvb2R?o6`>bj3m
zhmho?V37z!qJRf06s`&9%1&VQ%WyL{Hw%m*U>%h_8Hg4kc4vK8N(1}+ztcK8gj1BF
zaymU6slgxWrp!DTb1)*2*l^~qBcL*v1|}vU2KYLT7w0jP9>Zdq9nZS~<Edov(P*7h
z9^JWQnR(pE3=t}jw{PrQ6`B$czNsn-L8K@`ghC>RU^?Ge_v^wBxF`b*%ys^|2$n}E
zw8>9cCfb+~h6f%CIB7x`L4*igp=lt|SNqknY&-`J3wxg}2eEB^pi@C9&8P~bXk$LA
z2Fn%zFf(FVz%dWi!=B#9#4QU;32~Z8jDpC2#(a^`QSwPck9_>6ZIn-s+zG5y1l0P2
z`ZY}t%Cu`d#G!liopTgIk@y6c4l+`<QaX{UB9Oldh(j+0%Uk8{-N3{OPeQ<0-BB7u
zi4*lhxD(g+<R=i?1_M~a0uX?{$iGO+ZZ0G+zQ;hoeHfvTk);L#MIQi4>Ff{R_T5;e
z0i-9}2i#W5`<*XUsKHnq%E+3pO;S5yKf1>>H@#X2Z^MRfzb~fIvjP(~I9A$>I6|8H
zOR8+5f^>t?gRmURDY?Uk95SXYEvrn{ziCegsC5_~&v7K{r0Nk;3hd0o3Psd~0wc$N
z64O?M{Sy)n56gy;GLEpsS#9vchJ<)`Bc~Ag5h$242)Q<yk>;MlLd6-`6Goupxaew{
zBw9Sl`>Kt-99%h=tDAx5smq+v7=DPru&j1`NI;2X_B524vQsg9*z#D!K|_k@RC4Aq
zD#sC+S~6EtVFPau9n_c$*{n5Y>QgojdpV>wXq@uQ(N4qDxe=R33IlQ{t9jM3BGQ|M
zMJ*yFGqX}J1MXgHC~GOOa;z$g!0h2<4%)zm2ecN?vdC^5k_;i5M|(_GZb9)I)o#dO
z%<39<NyIUW#|*?ePBAq&p{0jD0$k*j*09|v!C;b1Gy`D40%$NmIu;NtkkQ{HHKB=U
z&N~)8yD)ZVD`G+%3NkX|jDQrA6ckLTj*GO8lV>D65YC#;=#l{;ke&5IKN8|RD3YG-
zoig-fF>h3tfQit}fv6#37<0~1WRhkH-yw`3kvtC~Du-o;W(jba<q$*4(IDpsXDd!Q
ziyj!6ebcZ-K}ZQg5(W-YXd8?GiF!%~0m>mY%CWYThD2W-dZ#$--(D=dz7+5HLiz0~
zTS}FwdT_<EW{^64;L~!8?{>{+QN)`F%C_MF7UOCNsn$Z_>72AW%4$K09E*1fvkKF-
z85;qe3Ppt3AW&(3yKk1@%)r404;&!Zxa}+lyzHi|cE=xFp9ozt;DcBnxf8ZHc3^A_
z2oXcT1Qi1Y1zfCL5U(r{=z@E=h;a-}q~VxjfihsBG$grwMdGMbSKvNSpSRsz;$t;K
z>WiT|733gZDM1k~mAvHXtEWnGdqX>^U6sMIFc+zz_uYh$uushQIkyT6WT~3*;X%AN
z+c2|n49AU>FvK0n@lt@D)I;;bN6f$X7$G1N%6~uX@;m-Jet&TA?;ac!Ra=qZImZy>
zZ?En6tDuBNMqvZMCbo(GLBGzze%OCOK$VT9TVX{`usr8}$B*<BDX2J<DNq7VP2}H1
zSSJ5506#%?Q=;!-L$GE5!azd6V4oBgC_nDGo<@AoG6?9F+K@g26cpLDq@jO)>uZ~|
zn`qm9990DPJzkEB(CFqk&I(IvgTp4P`?sHOTdo%l{!ic&nY)4rxN{@oCJ>sOah;I$
zc_g|&Hr>}0V%W?S7R1EFqESdt76K@K$e=_cGO|c8z)&Bv#PSNm)M4L<8bka%{iC_f
z3-rKwz+{3HBMQS1RTRXj6BJV<MF|QPqrne?q+c|q#beZ9=XtNPi8{&;Z<Udt%<Af<
zbt~}k#xzaiJ~69DSH}vh8q3T{In6q0$YnZ7i5c^YCl`ge#FEAt5?sM8B6b8}hb*29
z_NWil{aAc>Jl%B^Pn~${G#T_Vc<^t2c$lW$;z8W*aPE3;=7{NfXUV!-JvG*jIM?xZ
ze>_ab6C1=C6dpyg6?w*{=zi>X8@CX|uBn=0RVAr&Ao-b0M0k2(DhK4#>W6hXv)~iF
zVHjG$XoGg{<dVRq9~gS|yyHFGbQHi_0h1u+ob)=vVMj}xL?<7;J0gJ>muJ_AD1jRm
zGRB=lojEYv-h;0R2|!&GfILUYFu~vH7*Bef6Zpa+5gDP1j3O8!BJpAd0>Ro@4kMK)
zKEvV^hYD#y&JSpkEQ&}nk`#1{ySnC>;z1(`Llo3a5)u;*L;yj6%#cj*{_4O(NF@+p
z`?-NoMF}JTP^YN=C_v=>nV&2MZ*0{Vk8;DfI1bmrQxw63SS3?JOfSXxeIEUEQTJw>
zhAJOFz8*05zb_Z7={P39HG(5@3DT!BCw*jy*gq5$){_~5Kv1KB1-O#Tl@U-`f<qw&
z1%zZn64^=>tNr5O{Cf}ihTcM#^=}*sB2QhnK$wyW>`oB~)jhDVXb$y5m$m_c>q?;O
z;2$rPqX<qCFKBR<A_=50gCQWZr%a6m8)-CT4k0FZFe(9Hl?M6Jq?o0FIuc1l<9eal
zCt#2iAa}BKmfN<hH7$t3$fz`ESRA>*?m}q@#6=Zu86v|(!~~96R5e@?X(UW$)-i@a
zlsX0s31EPdRstCaDA<U=f&r?j3MHHjaA1+BFld65z&XWS+F}_x3bs3?iy;Ea7Xln8
z^ExP(3V@-SD+An5t4d5C-w!B0(kh$l%BtB>r~m|tq+kch3<<+=3b{hZ0l`a(2Qb3G
zUx_K&i4S)>;Y>ze{l)s_vw*?mr_1*maS`to1frf408crg5ha2pFz7u5|EBJ6`^>(z
z9#iwC;LCC#Ck3}8)1~PIPXPc!Sn(l9f@G>6h6aZuQ4dJ}pnyZXh*Bbc+akFKDg&*=
z2Ot24m=_ak1JEf!q9Zb^fMOphM2sOE!bqRr?oaN(iMO0G19(b7xj}!xF&L_X6mR?s
z3aYgKnS+7v*jHoCJ|!@o@(w^@JOMlqh=drb5iG!z0T2-YM2b>Gpuk8gDi9!%3$i4_
z$J~Jd0@$KV5g`0M4{3`0UmD<kfZAu(C*fIV+EyBY_dw+C_1A_62o(_SRR@fO2p}I!
z`Uoqqn=l+rrzjQ(5*=U^!NhG944^kyV1H5Yr}v78$KHo-Pzga43mE!~1(=Hp4{pnw
zecyb{Fhk8C{%-$AN4U&Hprkhp$Tb>Jpo)T$U=uLTf<w4^x14~4Kj}WQ#dCCQK%&$-
zyM~H#4Db`ojZj@W@*!bk77ANrM5>|+po|d<N|HjQOQ&irG(n>ZzMJsvoKI62udlW!
z^@-8kRC~iY^0H;|(1OS^0E`p-5B2VG0A!Nf#O?0Y-}Rlxk63h~D<q1bP^b|CAwU2y
zz(k8eq)I(#L{&*dqys#~L~nHm_z-E5%l-2OvUm~Pm>~vrqvvHYyO|x%$v}{KU?sra
z5zs*dSpvlnMgbDh3uzB@rm&zDA!;+S*u4~NGD(JV*mX!%Bd<<kkILl29C}d1DFlmB
zPR&6giS0>WRF*GjiV6f1uN;{cASt4WqA4ctBw4uPMNl$ZbjjZXuDYm-qIqCaboM&`
zNOwCR^a#ZFL1gT1fSMQ~1V{p6vLr&51c8hAr3#hd1I0U;CJw>!`?<lUX7-zpW*C#7
z8xI&4=&mvpg2kj8)&jX26p2AS?oH%sq73@KhuHt>J**kuagHogVgsX1++oGcd-iOQ
z^VJ;koG_(?3O59`4B1#;Y59Wy)i^N>V}g{5SOyHR2jKwFJ)y$_t3AhGZ}z)YR;m(q
z?dibcK`;+<BtPsAsOzE>g%(rLGINR8-i<CWD^_Va%yu%giYlsi%ik$PxuS~O@2Vos
z`q`m`#qYzsE|StmtK){t^PL5#er4RHi;2?;#v1bEVBeE~&<i#L<e&z&|8}8k@Crd)
zscjqC93ZIuL<^o+f*{`*h%MmbU?TeiOTmgJ6$dfHWz9Cpx<&zbomzom=^#FM1yE3&
z)D^loA{Iy-Wsx9$WI`Q?LVj)^A77j5*5ci^-<U4Sqsiz;Lad-gDFLaBXnj5)^$9%8
z9)O*~L?GbeNe@DeeWuS41UX2U2gvyr!U^_!P!Sk@BEc#5n5DmgRvI72gVFO29$FuQ
zDfJLJh65Rjm_Rr{{d2Ci6oG^Zfg<KOw4$^CzxNW3gaZ<411eD<N@G3J9ZlX36mk&y
zj|SSP_m{uCbSa@5-l&e4J4#)GGNSyratJBd3MHw^sXtESIyjC&MIqeHv{)7o?#Ib%
z6uAydkQnfhAW|)IH7p3Lu*6eEN7?k!eI|>!6r+Toc^&*K0v=!*5TY1q&$R!Lu}*>h
zD1NQ|y`}zW<Qp9%gE$2)K2UttNJhvwR>#Ez3x|k)aEER3Tf|5U3OpeHbm}ooM6gG^
z4E5eG%drVer%#xFh;d>U5_Oj|t4PdZ#kbY^0wd7e#)a?|;)}I>w#)+X2#=9rXaQh2
z6i`HBcQ^uomQC+viLrWfDQV3!gImGy<MPSD{_{;TR$a7kIKI>KkVx?az*XlwAr_gq
zIPATyjUN;7$o|>;Kd<pQjar>VAb-*XCLXd6Q4#OpYzbNe5&_+kQx5xxXp@r@q@YXr
zQ$tRbp;_J6?ga6UgeGNYP@z(AL~H}mF?InkHk%(?f>9d?8&Ff0K*Ri8?RU(3mz|6S
zJzTU{+aZ!fpxBlXDM6=9GLu*aW6wN29=dxL1)=JFrw`BK{l6cH>xcZBJKmE<7%dDi
zyD_xC-#cEQ^%z<G=lIGm2j~3BF(nZ&no&du#t?xK^PH^*z-%k<_{}dBh!Q7|S+jeG
zNk5YIqvc2$i0~c2r~x1%jzIWfg@WiE7oj{J1NAn>GL`AMmQ<4+9y_wl!YMd&nr0b`
z2Ut+((+4onHQp9;gWFs2W8R7IsErCUsSl`vKwuUg^WtTAVUcRWGk;Kx?e)DQ@{zHd
z9KdRmOV?S01&>@4CR@)}fSUI-J~N5b6hJA5q18z+T=5VK2Xk#OesCTWF$M4@NhW~-
z++*kTmR&H^i>ys{%A~}g_hyoN*ZggR9J5*G3O2;8Z@fazxQl`Y1mN1WRfqyog^@~-
zDw>e~^3|mEK+Yf;L{ERkK3^uB7MMGSPGyUl{LNdh6d+tAjQv1Y8#D<-gqiI*7{(wq
zQ>eRhBb3Hv6gLPkeDP^iI%N)^)k2V@e44y~H}k)7LG^s+<R*eeUliCOkD$C)N;WqC
ze@26VO3y@-2{OCIRr{r&9)Sb-LI=zsAN7IQ1n4XW=?DX0UNjp8fXpBk1V^AyC>(*8
z)xU(rPayzK)C7pcLva*@MK_({tyPGv>QXNdiaoD;37i0tf?$H1;7mqBc=@o=6SfJH
z2V=4EG#)G?!XAhO##F=N7>6?msd*|98$6K%NJcQk$u<IzsXbBLG*HP>9{r8rujg-i
z8<U748kYA7>6btbc%K_kL~S`3ALT@f7$sFy5`*hH`23H+EHa{!%l@3npb7$TD-0%V
zV6nyhGwl`8{p<e7(4u|$l&Dn_AvJjwR+K}Jy%<U;IKqRNt8$n<cj$m-wvM=(7YbL1
zMwci5w^2?I74?uNYII;-Z$Ne!C*pceARAfGk90fdF-eo@HpM(!^Jl_4Cq_Nq*+G!x
zGF|1wtDubN@;m2%y=yq+6I4GLe-kI9<0MX$SsKlWYvnxxaz49|#-y>2tI%_%97sJt
zA>KolN%#Qn<I9AV!W23oHcAXLnhU{zGDSQR2df+b*eQ__$cjj*L<(blOmHv2vhHiC
zq#b+*a*m+X>~iQZdg$aYMM!g3NqN!Kh6)|;T&1&uFLrp8>5LFBG1s=LGjt@W&mJ*2
z$sYTf98ZT=jNm({L<9h3lagSFR3Wev1k^lfU8=Z?q%_l$H1Jd+1e_5q5Xt5TZK|bo
z?tmIu)<H8N^Etyh8xTbn<pvW9kWyn1vttNSUnPNefl-$+nN3(K#^%7zNr8sQ34)7e
zYY}h)EI^vof+G*Xed$2=JoxVItlML3hMTgm>4a<yw#|zIqoQ<AN<s3vDTUOhknO(x
z9UA+-4s%>rbBd<poZEH2j8nAWibcb#9~CgL?CxQr2s}_khxtSbc?Tk0&2wlf>p>R<
zsClGe9iU-0wG<<u2V^IiiWq8#9CSNoE~W>$PRAE$fjX8YB2rk1J6(wtDVD_{9ZZW0
zk%~Yq1avd7Z35tQ=VaAdZ%0mG;&{z7q~t-;B4#wB+{KmHnuu&f&{hN%2^b_nq8U;?
zkc?N@9l$UTF@=8DL$)38O+yOt&^V3?05%L25V5ZT439pn7aKk35&<F}LM9JJK@=YE
zp!E7-Z)GR#bMyZ#{{~EBIc!xjLuV#k;nH_>>4zO8BYE4E5$P$Hb#cW@)6IETj@551
z-LgEC`hY0ywj?77YG|=$&&m9bYwf{qV830dsFB7$dnN)ASBb)J`gLhGBpnG54+6F=
zOp4bt9UUbQGQc)N<NV`CwnOQnm>s^>X0C%{WL$;>`n7|oY<+rY^%|b1S-=09N(BoO
z0!1!xGz`M0?$B6HfX_4?O)AI{+-|t>8qu)nq8QRQ#wCM?IN;-2J8)^VVxHZJN&WZG
zhWCp|8748Dq&S`f85~(}{NiQFC*i)TditJE&*#DYo-F7&Q`HHBLDI6(T*Ocyl7N4b
z>)2?*1!7c)cXfpjhj)?FW=fV*h}AvG*hpBTG++>$La5VGel)l~A<9vhHv;Q*y4+B=
zVA_iyjZr~Y>Qb4992r7Y3w+$b&07UOuHvp<{4tTW4(Z)xH&L2(D?{?Y5z|7;j>$WT
zkRQ17j(267vslB@5O$2idpp|(1qB5KkUf*@_CE7*hv?x$AU_X^_{2V<b?C`NU{o6@
zarl@m3I#8(Z+_ah%)HCVX@A8(r7`SoUA*^x>z*7IyT)UId2Vf&!&MPy3(YNfo2ZqG
z6^$R7KPTT;=fE<dA`vK$<{UAwFx|kA!T`w#fzX^JcB-v`LP4<EDQSMWLUxmLnY@uU
zkdZf8D3+9xi^9ZWO7H)s0pj+lKNPb;mbwo@{9sBatUNz%eX}VZZfPMSK1zO0i;{7Y
zkf=tMo&FF%zhwXzf0-ds83YhP`G!X$z52_yO7J^#R9{%)no8}Ek$iI$)P!7is}bS+
zNO8h6I)?%xKOA6gA?f@p{M{Mr5>kbkBAP;Yl%+60krxVxAAm)IC1c8u#{rcJup?lu
z(R-&`QHLOihpr$A$ju?LoSl)>5(CGL38qJ?XTHJyFpENDq5Z$)RX)CuJs?3E>>(`y
zuww0M3fw@WoPn@sMd%Zb@B$GKgd|#$1wg0?P#NZ=q8=X~hsfW^U*5gF_-At3wdv`V
z=<Xo%0RjQmKTZ?86O~ZsYq-MabVs~pkGCM}E_VSbn1UioB5o+L3sr3iFa*Gg3_?ij
zD-0;9lB~rNmN+6(rVP@h3Xnol3Jw({K@mel2+E<U3YYZ#_IMvq{rS=G1c3z(q*OV9
zxFVlP%VHZV;jlzrRGh%IzIF$T;2;F}5s@GTL5x8JN=q=Q%-u2bK`VF+rDF`h_D^}G
zytw=K?{kI!A!d67l+2_=4@Hx)z=_1u52_(cn3nA*f@sRYB9+}dA(A5|fCn~MDk6sx
zj10`oYE;USv`i>D1tdkK)|r^GE+Mcf7(=8A!xC_gurixi;D57A5fqtcoJ~IGiWzC+
z&EEd0*ux>nF`1&b)4v)A7_j#W5`st&lKE8`(X1*6eW4d&n03#3tj$v2af+gUEV^l1
zwrwcZz#arZ>_;9=JSR(tW8U!@F1ANe?zqZ85KsrT1%AD3+&YCl#xTqZxeyM;(Xa(s
zR0>?dRWx;Ra0UPw0staK*l>aK+*V-$*uqDEKx-l^K29v-=xB(3nF?2sCq0jI3RxHs
z9}5`*q)MlU3`Q^<Ogw04^(a$7DL*gjk81vZ(X<7SV+thm9(Re>9d3t=N?1ZMfd-<B
zPz1}-bNTz<9gN6kIp<`s5ZiIu)e1KgF^UXa2o!_EC}osxXis~~N1eiG8dNl)39#0h
zCITmeZ6&yok(wKTL`u6Pv2X7{PvuMaZO%=aKQD7bU^c^rS`hm`IBnqR?6UiXotY-@
z#v__DOsWH+r6tD@6io%)&`JNq&I*LECx>-CJ48eVA}$%>l0}V+dkkJ0hkjSXRlbjj
z+3@eR?I_&LVUdi8aL{ic-U}$WJa5m16>^hZP4rVWFofDeS!J{miUlSd7(Dm}%?fuq
zB>xj%h+93UeTrG29O<CYo!l@904a~s@EvvkSAmTJ3=Af|k;M+(Q&?3L-^X4(bAtvM
z&`ZG_m|)yB>>I-p8MY{04jz1QYgPJq<T(XjO;-2F!>I=w{~-8$B$AJBXCM$mgY4UE
zcH$@kj3MD7usP&lupVH)Z{9&u;d9=6NBaoIV{78bduyk47x5YdSdbxNF$*4O{Do00
z20;@Jl9WZH8|pLj{_YFZb<S#N!W$6cF|FEu?DLt3;|owf2-5apPr8zb0R`l%&H$mI
zEC=v`&>gt?MibZP=jKU%B)m00hNJCwysEPxK##tf0zyF0Ofw&VH}HPObP7EbFoYp2
zPQa(>*zx%8>Ol@NS?ERT%lgn^OCv+S;!rF-03rwB-S>4G+>|xyBiKPLY>euvX3CY#
zH1fIQDVm8Y5>Q)6pVQ<D#1M@~%$KnKWoJKE;e0@m0#LNjU!vj$aURmJI7Q)A?=EU<
z^M?O1=tyV&K<)bqk^De}k%cb^sk)i>ZgjmD{Kdnlh67#VisYW&!^~=4W5Gaqe8ier
z*&d}wt_C%q3D9Y%UkINYKTL-Tiv|8BSI|WFtU)jOB?P4kFw7Q&8|lS#Nu?`UQiO_v
zlBj7Yz>0Dah{?hgG5|7GU;_@Y*#ePWRz;;#CMpaBR{&gqo1L00#2VmnE?jIBV%TTy
zfx~h2+9gU;_Fl7klc@233jM<AjK`d!;hN<tY+jVGO~RXmujsBQAFc@^ARhWcrKMkS
z<Xr^6jwyma;~7ujr6ZQreA(B+`BoG6SPK9v-%=%@`9n#Y3u{C}wC4(b+x-Lthk*D|
z$dYJ>)xYJsX8i%Z{4+2`Vw_NfP6o=Q$59<ZC#!EO0kNscP{W)!5HSO};8!GGB9DO<
zK%fJ3esoX}o3SQhMUsbaDB^4IftqGv3Z{jsXqhS`p(+%Css<!Ob*~Y5f<H;nl!MSm
zGIqEi7E2nozO9@gd4!0}j}>zj2C@vh?WK^9fE&Zs9}E+Mhsyx=KD)RFl+Z_rV@n59
z?lkf_RF`mm^A@Xqp6}@{5PE>~Pf!Q;|3>;Zt2v|Igytf5CvXBN0+_r<wC~btfg=D&
zoq*3!IFZc4Tsz!{z`R~k@tDq{5zDJZ$S~|1wr&Ll1NK8vgCar-Fv`@9gGlB-V*rFe
zhC&A{LyUn10ATyZr0|Vq(>rsL7aC$AIl{o7feJ>|BOaPn54);?6R{;HE>B2vbL+^6
zI_RYgxP5eo`|VOE{e-PiS|A^H{MsIF8g@j0r_O;-a0la1B_Ii=g`h4!zG!dGcMBt7
zDJCl;s}z>Mmf$)dpYD&p+)j@~5j7qy&kmP|E13!>{lr83qwYCJ{G_c<(;c7-)Id*j
zqgZ@L#u;RM8dwl2FQTp2QjnuuwhV$3`8*2a-1tdc1I$%_r8LPztxvhs2k_FJbU)31
z$50)eN#xp-_DY}5?Gvvent&g$l_33prys%;5qcTr9Y&n;v?%*N!xv;v{fLVp?S1WR
zLuDzibU64PO`que|9AC$|JT0&&>zMhMfMP}+XfXkqg=&}-u+}`Qgd@@(jz)Vi6DqU
z53u|{5`IAZ&tILtyPR${=G%_fo4d*Ur>yp$#`frnhEC>wQV|^p0!ShnryV}j{NR%x
zfFGR`{~W&gA1|YY!lCSq^A~FJl;o-T<@%!|NHBoy<DNPBh<lMLBTOPK>RuMqdSLy(
zZM^-$s2-us03Dy+K}t~YKb&n;4~4`oBnyBUijk6mkU&Zq2w+4j!vHZLU<nS#;150z
z3k44N<)|=`49Y|FmLm^w?r4Uvuoz9?AG1te1JFKvK;)bV5%7k(nwSxir;j7()D}{d
zU_*uwhm<?yA%Y~Z5~FIdnqYJ!d6y9)9SnGQ=;(omxdYJ7j$#lbvi_!y-AYBs&-jE0
z1%W+1gLJughrr^)7(dl#B|1QX2m;g@0e@MZG77kDY@EcV>5q}f?Gn<#R;wUbElWTq
zU>Hu5MSnSKK_I~Db)%?vO?prGZVC|)@}8)5a943jDyty^1C&IDR3jt^fCF|0<xs0=
zqGb^k&AHgPOYS1`2M{vLs0ajD8!=$m1<?v1q)MeY4&|KKFav6(YlfkVAaKqkCOM{R
z56~*7P@+TtG$1TUqC=V~g2E1g;0kznK6ObUBWKL(!%*07{~0{tD!%}3hrrg&XV!SF
zThAeSs$1ENpvRIU<%5E90~VP?bMO!D^{R7Sm_5cOw`Xh)ggH;GM{^Vw3?VoeEP4ju
zQ4vB#M*2d50>DI(K<fnYGvBcyL!$(BpC8BdJo$<eNhW!`vy=$AtVCoSRz+NVOOHT+
zq0Il<fI~RmLIF`~R6#N~5&Ut#Lx3hn4%ys+UO-nQ29eN)kZ~~u^b;md0mj*eN19WW
zTwO0h{n79xy6ejA)Af1u8a);fQZYoNWCZ-?I65Qt9%=dSJV&1n0iEn%qDaxyDRJoU
z*z1`k>NRWxy^c?65k4c1Lk<Yxs62$^;dl%Mdk)1=3mf~(Wc7flwk1HlER0#g2Tv*k
zADQN7bFBbiArW}(fI@h~ELfrf<{UC8D)ykLhQLQeEd()Qg9ThT{bm_KzJZ(Uj&7O<
zIq4H)gChKonSt#mIrl`miEZ_nVeQA7E(H2F(DEolu>PBee}HNk1K?qx4yV$$FNz7<
z72m~pyr*j_y~z`EKE-S|qk%Y^Qh2g6Dinr=kF(7^&PX3@PdyA~QGQW8BKkH82MnXL
ztF#NZMx56qp!`zf2j~duJa>Qr%s>Qt2D%=o9*CBM`(hMCyh}j6=nG%cewjX#22d~&
z13BlWfxIX%4#XjcKtMQCKvpFxRg_$_Gucd4gXkQO)PCg9bkkIlX{d$;(gUWB8yP@a
zieRP5s|Ii`m)WuYXs%NPFBfQLVt}4cIPIR-&WaMDN4rj$IFQM>WP!78Sb%gf3|Put
zB?@b#U+x?*g9Jb{b)a0J=~(0!0`Lm5pvoyF;FW=C(eL2(*$d=ROH$NTESY@KsF!RB
zxIi1rup2;QZ-I~$ftJ#_JtsOUaXAr*2J@vKFFWg-h0!|8S}NEsn`2Gk1E<iCArGuG
zw30}6Qwn6nUW~#JX*LX+1kTXnXB>dJl0g`VjK<$Ru{bl4PIil7#1K5QS!L9W&Q&)m
zi&}$7H^nKO3qfjQIuOp-Hs1?*h$bqG;5tRNhD&1k7;ZBx16tAqJ?TBYuOrdh=)hRR
z)5F`!&>KTYlII9%n1+hoS*VBpoRge13Iy(mV}nxJwWhWU;>HX)F40Uzw{x=yDX9iV
zhzN0qN#oB+DY?#bgySRCl87A&VcE1ZGrCojV4HcA?)+9wZwETGktorN+mQm>;GGpn
zrg1p?;MSd;2rlCiWkWI+sOZOmsC1LXB?UXe*u>pl7`-wWhI1^a0m|0HGcY;lNJA=K
ziVq~zCxjzHG!atJgAhp)P|TA7MI^}yKoo$RxB<?Oc5qGyYXLs;1%?&<xlV_<1W3|=
z%vkTI-QsUNPq*o$dLbe#gTU-?dJwn)0{+M-{>bWq^B<>smPk<`xk1$F#1314{L7aw
z`wW1w%nqP(AJ(XGLx&<zMdcIokw@hakYwkzUO*wC3Sxo&@&^td$&wp^kM~mj=@#gR
zsFFXP;a25zECy@UyeK}9fsr6nN~kmhl1;~CXdFNc`t=33k?Z|_3*mtM0wHhkUO>Mk
zFt?==3Y1kQFfhJ>C(8cnKok5pCjpbN$POT}1~g%g5s^h0!Ai`2^cx|e1eo9xCQ1P!
zfsmx-5#SL6xEDElAe&+nPirwGP{^AXNfx@5HK2b(06y6co@iCOH0}&KP(20h1*68o
z94>eO4mdc&n5a-wUVC{#pgIC5puJIJ^}D3l^zestpILrun5PEEg1>-pJA#Mth!Oyh
zf&%as3Ui1l^|{hE)5Za;JUvT7$%3At)9IhgTHk5RntjR+H@KAiI&?|YKW1W5QWSDj
z?)%IimP4s(ldv&S5=CSd266d6;C~Ja!xDy5Az9LG`TN@kEY^Y8chEpAd$#oZ%m_2A
z=3vinp69E8WCt=ta{xL6-2qa^FaX84Z=vYfdFJNxg}k_;2>>D)^9K>3ELg6Xj|2GQ
zcw>}RJ@fVEWGC{Y{HM|ek6~b?yTj^^xxs$g$O?nUgG4LA+_hYg03gK`Vdg3Up$eo>
zu@Fq!8tNokB3l_Q&IB+eDH14Qy1E%3Tr024Vqw=D54ypqQqJ8RB$9nV9q{dNCf(g7
zN(x9XFj5{E{h=~FY5P(nNS62d$6^IaY#W=6Bxj5>AOm*i_xnP^qhUs)@x#9*x=|vL
zN&^hCesRw>jWP#H8tZs!;(2aT2jt*Lfn)e;?O3}5eDa^TCHx_As6LbHJaGF;N>a%W
z*a9D@k3&x1RG&#zB;;<Hkgf{!jp2a&huuYYkG=M?{MJmhMTnSOVuvOSb6L709nEJ!
zh|g!8GnQ`~54uvd91&7L^BxMD(WYdSarg+)Tx`Eno-glqjN@%icPVk$P_QP?+~*rz
zup_s6hDz;3-9`756-gR#M}?{txQPb2+9+%%B1$o49FUB+nCH!F#rZM14?-Ks9(;G>
zqrT%j#+XJXhVk6e!y7v4*ZgcZ#`+e{)>8GDPHA^+6AY)&?T=30B;j`QY}m9}&D4&O
zEX|QHK>(PkX0$NSE17cMkeM#&%sKx!GfORPlUdr!5dP02I<8>Rm|3$#QgqnvER=$>
z<C$bbcw&bn9}Y-?m@H>Guw&YAYS#o0#;tNRM9ZY?9~I8E(O)v;_lWnS)yuNL1_&a0
zJ;9*<5ir2?yXj9lUWEhWkuh&6%Zty&#aoR5O}Sb|f#5*n63Rh5NT*f4lvDSwk~I&Q
zkbC&S$TC1L?$icM0zg<msH%0i0p@}Gz5h2{$0Y8Pv-V)&!>jKngWszGNPyPd0ij$^
z<MT+5@hQyN7o&amr*&M!J;KA~ydT}i2r4P(X=pN<L?9I?yOK@?Egn<qwg6>$`SXw^
z-ANdxloSWeBG75=lJ%J`VIt`EM@G=b2ZEHpo~D2zazzNz&-UYDkK_D%wo1bku|$X<
zEMQ7A`v06x!yeP?g(*sLB~ao0cL5>U{AD4lEbM!P7i0+qHNe!xfs_J*q2+`XL$oGq
zI7{|mg&>Lt5<fm3VVq0?34@|}p^oBKFIadT4424K#GBf|M5<6|qKZ%j8!1e%6Cv##
zkjM`yJT)@;^FO9&;PB*5;m`NC*zdjCaYq(bEX*ucC}yXYV+S4EV0g_ZOgun|!>N4;
zDOV#$l-4-}fbAr3Sl-l$pc)ieI%N`^OKx(AZj_WUED;Y2*ZtKV6LQOx=o%z>2b=~m
z<+y>`6!ir2+lORHh-5w~Glb(P2f>8wLyS0L-!u-GYd);=jcABUNTBuO>g;gRp8lBY
z9$wfzJ7K~JPNgOfh!l8;aHbhPNL;#xh=UP`cEl)hGAht90Tc3`=fl3?;eq68f+-YJ
z?56@D$<?Fu+txwU{_xxYGq)&#!XKs^A0zA&O;I2vfDgXK26G1oQ>-;$w;)p!SM_id
z0@kHe3QGcGY^gGz;h|uG&>aQ@g(-kMPp8B`LU2P+;5JT3Egu)|1MWc;VFAOx?M=SI
z$=HrE0+7>tr5{@)g%DPl5zy&HgoW$WM749+zq0NQ;Z@Iv+UILrv|`5G!)I86s-&u*
zj&qk|uBD1-fQcdqqAHj@e=$f#oWl76|FS(<YE??qxTHT6vJ~Ou0{ipHjsg@RO8`EA
zn+hOuLz2Q1<JnGtOU1!<>Mt@5>-mAg<ORTj#q2$NA%A+9Vj>!8qW5M*MVMsJNXX`@
z{vp!CVh;p<X210u)VYZgDcVrgWh4gtvBCx7$Vfr$+(p(hLB^)C_h+s4f5iP+ztP;%
z1Ng!Nzekhmf*^OZ5y^6T41^z%53BPMOfpySVi=MIBtuOFDIyXT12Dow(F_zSP=zK=
z5ijHm0VzWULrIB=Vs(OMnwW@!7J;FGiYOqK2!U!MiK!r&f)bc!0w9)vX>gFj5U70A
zd;gGd!Gnhh9-uHF$-?|FVJ?9xgjQ<AwDnkfd((o7Swz@dt8?Zp;UWI8LC2~?>;v?G
za=Gf&79H?xY!M*p$BWYao(d|1Rywq;IdbX4jKs_>BpRTo5)-x(w=`96I|5G(lD6a&
z8BY-Sa?WtEnNV|T7t!0|VpzD&MZT;o9Oindt?J`Jp!-Oqz?Bz{9;o4%aH#*C8jU6C
z`Ghi=_7#~S9i^k`k|q4CbohYV$3-<Scj72H$YTR*23^W3G6bqBsK`1fq9TeqQy2JU
zI~~kBbf>sSb1sDZXzaQWSXDSr&I9@)A>-}-v+VtWqzdNkx`Z3?B6lPG$?_l-fo>E?
z58Qp>5<ef1eZL`#5&43D4=aQTqGAK>qi%mLrjnV!&T_%V3~q!V*h3+g!9ruxRV0J}
z|Ag~_V9`rb1WHnn_>D??lhNZS-A3yrSgfbdiZATzz0$9srCUEX>%TL()xAmpDf&p1
z0(;9}Yvk`8z!$6#5Bs6fe$-#f;i#yn{hXr$q1?e}n4ltJidd#dfRv(1g@u|WrkbIZ
zsfdUNXBnuXq?8IKD1eBn5T-;35)hF{e$!Ocv!CTmi(rRu8<UyTWf)8*3ly@cvbPGc
zFbBok{lC9ao|_mD@_fME4s>*!LS+4*l+%QNKlgRhir7@<kM%(SkRIQtDG$HSg8qly
zArty6xl6P4EEC#;=0y_RUV9u;F&LyE0agj%L%IjVSh{)Ol#Ro~Uf@8i%nHNx^d0t4
zoC8aWCx6B=@Q9Buf=&=Yi&5wl4sru$i0<DMq%HUvA!RHf2>oUlVS;>z_lQbbX`o1x
z?UrSvKeSj%VFuJBN)Z6$B2fh(#6+<I*A64lq2dAJ255)is)wO?1S0<j&;V|A0pEk^
zgJIq=NB)X^emRqe&!S!xD9aAC%;+}QA{>OHA^ld&B#1-PeakDvo&O2}d|wD&=}1xU
z_(#5vO%4e~CrDK1MJ{Gy6RCJ+cYz)hw<OYsO6kThQ?Li|90|k`hjR7bD^5V7&Ji<2
z79j9d;W>p_3`bp<gE=Z;LhvyB++K5usnNvEj&SB&K}qG9ca9cE0b6g{9MCapOwKwK
z3h|5Gy%CY4*Q@MQN4E~x9fJVCV1Tw<5Rqm8g9L@efc8onGP)THgAs#kEus(|Q0ks2
zW%C7i20@@FDIoxe0Gu)@RNRNPkIo&Bmv|Rnd7w<x_QB=ca0Fjcutt;ztjt5413p>;
zjQl<RdcSI1YA8bzIu>9z;A!~b@rQmPdOoAZCrPwN?Ms_ggT!V0B72cD<R3b0o09aj
zLN!Y>x4nh#akUV!MN}k8_xxzGD(>^<LP*h5!zW)y(dfmD>N6v`Q2edu?;D|<r|hwS
z>7^9Ku5Umev79U;15>p9N01)m6D1UMfoY@yX<-SEw8qbu`HlvmFh5RUQZpPn+gFC*
zQ%<&16;U)1ArwIH7zY(JT%0iAP)G~%La4g{>)%~OJ|7d!e?Qq3{Iyr}{k+>m#~f8~
z;9s%Q;AtMPL+t`R%>(s9Qlc0KYXV86V<f>wg%Xekl;B_(t3VP5=fG4>kvfP#f=I+T
z{9hN@S9*^48J?Iw#uHYr-G4B!hmMoM>(JVLDmkbe$9OxT+W1+95>aptqv+YMc0;MA
z(V(bTL1K@jiJyPm1NPtEn}RxPt^`NSkC5{Ff!Lx*q<2*nVpWI_`=!JS;NZWYdmJ_x
zAhQpibhb=lJ4e!|)?V<7cA9pkiLDo(f6j|_G7`kfgI%eLSZbcnt4jmo#Sn&t6eI{k
zNg-L}VYT@Tx(W&o2&QTuta?e*5dqZZ81Cc0`G31lgfDU)(c%vB<YX!#f|?H>WlTHb
z@s<IB<%G!w0-c6vE#jaZxDUXH;p98d7^d+K`W=lgniK?9r-+jYX<=hOd_@c++QO40
z3QvTZ%0whVLS}CKJ{;?Zj8%f`D-$3G`Y}XK6sL+(Zf~nS0_aj=5}@=6eN;*v8+Z6Z
zfp|mi6T>t4#w1yUt6-x-pjcvc>cHfjjzDPH3zDadY2eMHLzN6b8Cift!IlX6Nz{;Y
z5T=4o6Yr7j0QS8h=z#ms2($|ugbJ*b3Yr??Z$<(I5lqFDdL&We_BGJJzhp@cmExEo
zm=PBiNhk}D10Wj}@|-&Y>WF0n08qjN7qbNI!r{qyN@4WkdQ6fzW(S6$1$+pJ$hpXp
z3gp}j2=yu!$bfGiQ3~JkK(o^6pzMMXZI7-ve<d7#G#u1k!H<lpKDu2XrbLV56u0c#
zz_GA*8as|2r3OK)K2?|;Vv{0`I5+u`$~{2h7`@;?Et(V%O;sqMH@UTngCUJ_bl5er
zZSm`-9KA7-h%guwpnq5-*f#JsxwhfGr#buJ79{zJ#VtDW`tWDu&rN8V<{K<s*$9S{
zf+0vBvWI3w|73byWjKVMRn*B&(wdpwn2nClv2xJk6yRg(P4K3i^2d|ojtL<U#yRsA
z_JG01s?Q2Bnmcev$Y_jgB#eZ>QDzqSj4h}!t2rr%0&#(VqMbt&oEi&V*1Lp;3{+&%
ziUzbnLbJr-!%0Ld6{1o~EE1h!!>dl7ry37CxCReT2U%&=pA^V)bokPWB=OOhU_##y
z9w?l(X-gI$#X1>Sbik)FV<oXNAcYKf4^b^#Gcvse9<T`0MG(sDuqQZpZEj;A^<{Nf
zO#F`zRK;er2PKR{5?$iQ84hM52n$0`Li*3xK|_hDHw>L46-ilFQeW~^jC48zbURGS
zUh4HXQZKanLG586T2PEIe%V`20FsPDl3T#j<@Qp6&nJ@#Od?1;L`dg|Ja+N(!v^t<
zaQ<n$QJUa9F+3nF^?Sb=+3(Bs_t$;f*2bo}yK8RSPz)JlZ{w|&+i5KK>gfQ$k|&Tq
ztmsg~b$kF{K%l=GJwRD^3P)Iw=f?NBQWl0frF^n}(Kn0Yxjb@-G2tr%(Mo;Rce~fV
z=wt2b;)q!hJ`C}V|9s?{6X)?JuE*#)JNxr6^&0u2cZnu~S{euz^zg59i@?gq5g^(y
zN(>TTCUk;yKDtu@n0a%Pu~!thL6F5A_}Pxtay&T}x3*;HEHf;p(A?3ngG56uA$o%p
z>^$I3LWgHX>ID)B!jPmTA&Z~~x-~HBIkvHt8waQM2yS~*%<Ek!<}c1C`v9M`ALSqd
zCLjR{0aUDY;o1IlVwH~s>U@V7#v(D!jz=4bbjYm{#!A959CKC#o}lw~(%n5~O%W^~
zCH`6e)@Cebc?qK@_Wu!paGoC}Zu0VwzP8--D5zg@z%)U=;1lzw(dPTwl?cj%3aM0)
zr+Uf#J6H3?)@XiZT|ui+i!ateTbVHgh(`Tn2@-keI^%wBl1m;KQyB0)LL6)vNJ%Py
zqefLNdTRF&hgd4A)DPJM`{DRI|0j_B4)w0l{hBrm9b`QTE%er>k1RP8;_cs&z|<`y
zMz{ZhSp_-D9r6}%D9`1R*mW+_ZMXE>pe$7j_hsw3j0IS?K@!14`9mSr_Q3kHNddDH
zvp8m0JyT%9f{cct&Q+`nO9R?oginZH(?;aNGplv5Csu(41Tn6~EP$aSMwZAk2=hyV
zpVj02xbndPsCe_`nf$c<Dd=7v$9I5=Jw&b$r}NOga~nxZ_q=5H>dw2P!<@X@icF^T
zaNv083_8KeI_nCU(ncVqv`QjW3#=+9$A?{=bRrCi*dJG6FrcZ?I8f%LmK_*Frq<Ew
zl~WQc1qE%F+Tuh=h7MsOE_c5gcEur*WLQfeS#?y{4zhpEN?2I-h+naDfulAxEn{kF
zQVGT?UOY|-Pz(plNr+Ay0HneI$Z13eK{Ftr56j0g7T6HZ%L)d>NJ}z7v2ljU`?aCX
z1NJ~d5Fr(jQRoLN^I@1oNVy80p!_7@C*goyU}*pOo8|H9(D|>oC}CBLPE)~-2m=}N
zDbRJs%`=8N8wE>h=-enMTDR^K^8)?dwe{5#lF4mvXS+Tp&obdSq2tR_RU%rUq$yvE
z35g!p-uNFVJzT)xz2Dq=*V1~wuP`3YwNhwA|42FzPJzWCN8%sl6ImkLuQ-nBivV>m
z-v+OdhgE7g43xdEN#g`SCMgP(YdD=feJ+un*~=82iqfp5roOU@V?6S+kk=o`KlB_(
ze+YzzKO$}AID5A<EdK{Kh(u_XlgIWCgE_Hw5jk~t7#5^<{0WEtA^n*qL7@OkAUS#=
z&J}ldFx@+b*GR<WfKb(08}J{uSC22rn$+}R3Fv=gusIiTWZ{%2u%jU5v74KK@EDej
zmT?NqGD>XSq`j!A-aM8IFgb<`=lBY?E?n8$ptaRMHEEM}NLsy@(7j^^Z=j(q;V#Ho
zLqCd#Jc(4bP^uXMj~{h5_oMfoekwp9kqV+<q$#C_76=5d(nxX_Vv``qSV>@#A#*7*
zK<&__K?>^QA$(SLt2j`FC%^6{yox|Dr<V_~{j_=rB1%CbK#4*xB`h_T5Rq<_#BLu!
z<SG#nMW;x^PA*MK;GigV1MzY3ZtW&iW{KiD@8|Aw5j2X1kJr<&fizEZAV`}LC?1pf
zA@2|~Qv?ra9NsDgmEdwHp+`&Gg#cOVoFOEVEF_*MoB=;K?<)37SKGa|+go<qZLDKe
zVQ?&oqM|6OSgN9`m|94psEVqBsvTOr2~Ady0}%Yd3h)m0$DdLPpnzH+q+%i63f18V
zMCa<Yj&iCTl&EE)6GZSIX<+8>$?}j3899X>7%GVMfS-MM@(#os5da}TU?}gy6<gi}
zUSM<Uhe+hFb+B0<JJ*X`sRWBqS#u*Rp~>s5A#DPg(?M^XzVPS7-<X|gPs3y{dVusO
zk|jR|U<HOkX0hfJzu0RE63xmJ!y|-*G#g`IL+m?*C%3SQd{$ZeVFn5ySPlkQa@qcN
z7ZlJFF&x$~4pKB6qKSaNpp0OjEHH)&VhVe`V4yvgqCrBYF<Vcol#{;t?i>RuODrM2
zlx~Ujjz^#_U62Am2!G(0KLOGTbs<YYB(gw3NHnb{2r^VKOcRoT6HQ1&1Z}+)0wjqq
z6PBbp@s~3<5Tk?%83INg_zPZ+K2t+qcH0Cj`Hq^h0n2NC%*aRJfCYyk_nz-*X9x*^
z_)+Z}0}=c-{V&9EB>T^Bq7<O-Qfd48k$ZpGz{K@s;$3<whGwV;AhFD=JD;(s=T&o^
z*R}>GIv!;X=8wrIx=e(~Nm)>0k1dlA=V;qSm6I_T44PfpvLFaOx|5rN#}Z)#xH%=4
zClo^}pm`bla8!y>on!^$0un`71QVD8!W9Ywhs1P%g^y&&ggm3fI|z3%p>N-_^#{ho
zyv{!^Wb<i+HKM{cJZ5HaiI8V9pF_Z=k}-ji?v_Hy05s7dCLwh!d*lb53LCsYzb?_<
z==nV~;Q<mqfRG|)VhAcqnxe)Y!)ZORFfhc<L{Hp|4x<Chq8TMAOd|?$kU%0?_EjMh
zo<1X9u?)WRtjY`CGa)TaTCIj(j^2>#Gy6b-W@4m1-9BXB;MJV<FbD<AiaE2o<q$Ak
zv;@v{yD;Q%C=M><nFI(u5P(}LjJW{jprc}cjw*vu%nDPaE~n=)Tp&>TRitQ25+Gcb
z0!63ZW`BP6NQDA*A_o{<gULOTH4C~M7euh#Whv|b+^3N)0rn(QGr$xS`B+5ygXt(v
zsD`iul5|7dGtKVUEiA$zRZ02V?)L{zVxCC?5dsi+B87u)*G~@dI!;v1FEBxs`(iYZ
z>pi=@wBMY^27VNq?r$}s3hzUgnNg1timDj21(byGcUj56z!c_xcNW38RQ&PqIy;mK
zj9j=B#gQyfgG167Fg()EV}KkVc64>i{t1c02$Yl~!1!~W@>mFf|067%N)!)PP)rmL
z)>(?QJU-kW;4|morh^4NkwYCD5IuOw&I|v|Y>IBl3Z@YLW`s9*Q>S{NH(Z$X&WXbE
zAv$zBKh%D(N96=juEva-81g$o1&o1q9FY<;hB3llR|9^CI7H0{IqTHnYYI6+Y3aH?
z&5UC@rTV&|P|GA>hit!Hdqa%Afe6%H659cFH-Kq(I9Wj2X&yKj1TqF}T{f%9K>jn(
zz%`Z0T#gtItpZNyM&5t}WO7a(JyCr-Oiar}%*#y7$m}S`wkbQL?(Wc*OfY0cHb{sP
zzy<Gwv|UzZD;2U4DGUazAgMkqjRTCz9pj9KI0uxh&GJc&N-^`K0gvd1>get6Ru-mC
z;9N4>E~5a{x_rU|tE%3KV{iGz-7XuMjL$ZWT0>6?8iRu%=wuG333QfBjP*E{9q<(B
z6b^#qYHEI1H9DF&UO<Hb!YRJgW)!rdaX1mt0_9*T$UTM|7qh_EM5L)+m(}>q3Q+7G
zT6PoEg2hNu1d${lSGXY*C?JZvkOQIL^cuZD{@7)a_7a38kHWGeKdOTJl>Grg`z(Di
z#CpJL2cMsb@*#zcXCa0P`Ms!j6JL-(M+eIhHPd;*qn=~o)<8ybmxxKchm*Re4oMDG
zxNsnwDzTb+Im72^(yf`Ght>D|7tHhQrh424Ph<=vm*}dZqP3oTJB8!|;`F5wnZ|;m
zNt*TcIQjwVSGYhiP{{k|V2SLOhjfo|I5<J;fx)uu5KDHdk7X4n49cTq+<b+@q7yoj
zIl_~9oP#1kk7r0=QRe4rHW^0%Bw@{}n=wT|NF3j9jsR0t5e^Ahh%u6=3QD4ejXr~4
z7jo%)1Vl%`g`;$?S@{U_@&Q}OJ&v=Z2tM!zC?O6s9t3i)uE<n;|K9*Br3wlU{U6_B
z|42Xh5dOLTNua}7wXSyNz_4Z>ipj-fF>;T(br61_<@;3zc?0*`bvHe;Y`#)Sn0*eR
z?KCqVn-6Up1I~H8XqvSH&i+^3^2vb!$oxo(JKzI^2nW$CKn4V;p4d>KM4=RDSRzCq
zfWEW%?(X<_03nd5zV(3753u?(A{l~zu*s5XU{nqZM9vfM;5J$o%V@x(osMHTDr{@8
zjL61AjHWE$m{cKDsAM^q<N-<?g&`q?rDJU>P?`y-2~yI=&|F-%JL2K$aFQNcP00e`
zd>IhjP(l=*Up+qt*gj^|(tUlFb=57QZa9YoNlubfF^gcHz+sULVv4FPLy!i-{>Q4R
z6Wt2yq$P%`5|GdDOs@>TpY6*c@&2UZSq>b4(C_0v6aQL8Dj)RSkMcBsq4F#HHwV$V
z<Yz(!?59vDL-mD)10EUB7Kf_^yu#P~FF@eNETyeuEY8Qvzq+3X^%Z&w7|+rqI$~ic
zbcX)`kf_d(L<?z%79O<$JTMhIrV4@f1<<~b3iCC+4%Jt~r*<9yeW|-Ro?>(_-P}4J
z$!wsEL>M3i{S+-l1MR&{e*0IAxJo7jsw9$7HAFFzbzlx6{R;5ll>`$X)BlK>x`)gl
z9SP)Yl;NM25(S8M3L?lyz~SR=;+Z+*ZdlaJMbZK4f}xi}VQ>UH8RPRO^zcM;u|(EX
zEo)e*7;v}<M%V^11BB8QCF`C%dHXNxyUC<O3<2rZB*uVZ4j334i-!(iU}rpg?_|&e
zGm@f>?yqF*Bym7w87+%pdxv@={+w)ZZzqB1Et+7D=IbrQSeV|9aBOQq-a<22dX@E{
zNXUs4sEDNo22vOaR8L=@$N2BZA31^^lp)*CJEW(!TsMV-xwx9iN+_WiU0d*&fU7@g
zxHu<9+F=!=@gENW>%|IYLH9X>KoSSW`Uv~OiDF?$QvHh=UyLveFfk)E_j_bF9KH`^
zA)n`noC(1px1YQySoX$-`umg|AI#pnc2gk?l?cKNextfPWcP<XAYdR~Du3!3A*P~^
z$nm05+>E_NPX9E+=tGml=g<leJ((&f`JtF@jzZ}=Wp|7Ay#IHAckS_Ae51<FID|mU
zQQr^LPIS*-mr155@&%(4Jko~-Lxw4C#W<6k_-*-x87m7dUI)tkfch!xDBf@*<RjI%
z!gd3Lkw-B5fM9MKpL4DgCDn=s-<5;{;MxGC1Hr_`$gEJoVb8>Yf9Bxe8@OnNp+J~~
zvIHuE-yYXP+<}sSZaA6p`B0)M;*M+zfjqXF<UO`M@6+%4LFYTh%|yBsch(fphYLXq
z-74oX;)CAvbIBo)v^hbJq2P8Nq)0>)Z1&fGJNk`TxpU|+g|woWMklI;Yy5B;gUmlb
zA2_<BaC@u7WFrjvUt&X0`1uQ+kAd+#qwD!-vC$G#nNfYTT+pK+g^Dai?Q8XO(GoL^
zZJ=1qbaI$4QjjnD!b0hU#+K|?)28ur%7Gw6*nwCd0H*b2LyFhmm&b$lo$*f>n1Uu;
zbmgnU$vZ)t3?SZwi1IoA$Q^;w6d3I1AweWb0v00Z;iyV`JK!7YEEpm>&hXM~Y#xNJ
zlZ2l};wN1jtpnVQp3$-Ou|eUgg}rC0PJ|{y#D{xkK%n&!!bPHi#4@bL+X`evv26D-
zjwTkvi3$FK=?6}a8uCJO#4qGGOQ&Vek>ROmB%W!rI!rY39Dbc%a4%Lo=N?@LmlPNl
z+y^Hxaa$!LwwX1`I+cvAJR5V88;%-toO!z9497TQlFV@>2xx$?X$l*zw_OxEPIb*X
z6Ngrb(qp8zjMbfUk5%hI_;3!8h=Ir)aM!zz3{~gXfap^<s%j=#p?ZzQ;dz=;PY6>s
zm^wer&ifegjzriy8NggxgxsOHaubt)PS0yE3&9TMJL!uGJB8@lPI08YQ;8=bFE3n|
zmz5cc)*(G4rg@BzU}A?tT@sC>Y39q5X-ndnIlJ82oJq@OnRYwg^3J0)>`f<8B!_hB
zhDTA+sYqebvPQ1(jXg?to2*qGlah&&st-Z>j=oC!Jk4_t8^Uvx5j8o);2oNt(ZI0M
zf$6+~DP>$W%RRMO=BR<G*%xU*Pl&cqnpmtk0UhAD6Rmm4M~@VrVb?>&&l$tLip>+|
z_RGBW=;*zlMt8%)R8^&>BiD))PX-^J3T58UD5nsG&NSGTAw;e;n~9ECbVQkc6e?eZ
zfOC`&fTBhVDMFxld^3W4UzRVtXIPM;kCwp?UmZCTaYvz|2xC~=EKLAss(X;bq{vn?
zGdLg0s~d(2Ai}3}((6+eCr<9~$$^Fl$W?y(xJ@<|7)c_>1_>a`_!{bDy~1NyY_=dF
z3R)>MjdraFNG$n%SHnB#DtTx#d@h0Y6sXP$B??Qv$#*zZ)-j5~op{rJG^~$7VbVi6
zpB6zB(x&&@jnt?rr!16&VPaZY8Df)>g&S)F$kWZNp#q}H>c7xnqXUA2*J95c%LHR<
z9WM-kqW@!*C8<^+MtlX}-%!kkP%dz=HVBxbxOjUZ2yc*t2|@2)%2=rkb3P???imkc
zdc8w}d=fO(Xi<fn7hhlAZAfoN3mnYf=r#veW41Lmb{@9e<mBu`Ar9WVoGb<}Yhk$;
zi74Wz;kQiy@*tD@1&t~OSBI;oBc-=ei{CuB?+GAJfl@TG1w}%j6dnUrYs+efbbQaH
zD{2ZmpDTYS;M4D62?#%^_fEOoG$yd12?HwHC!<Ow(5~H;7JA6e3fPdsV@S3d-|{c{
z{=V3Yo(P9BrVkYkigE=6>=&(2-WUeKEZQ_H0_Siz7!>a0bdaw>T0z3BHu*LcD!aA-
zrXlDtz$S`GYqmWjs6fJF2PJTUf^7S{PpS+dk};ekTnrJ}FodojfR#kf$eao@vI?2O
zLF9&cC9;X}CjJ0sw$diKh&n4hpaPOl-j$`cP*DJ&qyd*%Ng{PnHzGs(Q=G&ggN6{B
zs1*9{{beMykW!J%0wi(+U~noG$!HzO{E?cFW-lp+A!0iTA+S+Yxh|4i#P24MJwri+
zxW_M^2Zsz!5;|t*#7^OYY4YgZvRec~f*R5t2q|G8E)sR1(q!q@qG|CipH2d}0VsFP
z-A+m(3@)Z51p*~b46<>e=xP<Aq8OS6y0EE%1%oLV5vWOt)<cm=5h7r5IrE%?geP<`
z$S{#282i5uqv*k^>=qUZr}*UIOG{_;w_SQYr`O~nAq9c~i4gM$0D%B<4>+auN>Y*>
z=mZJZ08%6<;g}K*ud$?hmyT4Cmgh@WLV%fO=oA5OzKjWyBcdFTf(eEY1R_Q@!HEWi
zNRWtTL8OUFRSFU*RQ8hOj6fc<NHEzVY5tNhR+2(U8`wUvAG1jL!1bD$mYUc|ff<N^
zkmf95iwb2`y+Zi5XdcfJxC92#A%c^+o4W|eVo_>|iKz*aDTR=QWJ4>NT`s!6b#F~b
zeT7tZ5pFhtG3lG^NAH4<*UyZMNOB?yMPwv-bMvILZni%x%3~^_$xTKIfgnzrs8}iR
z{S~oH6P#ObAwQWXUgxhIoMAJ4?VKpm)ZwXbM)7WAoFUis4jFQx!GOemIrf@(O^N)F
z9tB^+%u4&P4l%$aN=Xnyh!L&RG5CD|pKAPM5HKbXe+dAxOG!ur5;Uqr3dEF2M1(|<
z3Nowp${0_$@dNV%<abw~fFVef@eV+-3LP*GNWjbxjKGpojFbUD6eI;K(y>e>5J@nT
zOCo)8IIs#N3QR~XBvg?iNi2a&2}A(HMFM0FAb>!v<N#m_XrXJ1wu(f9fQoQtEbPI6
zO$!+=Wge8`{{CT^<U<*uH@GsLFeoE1q>^4l%qT&lJ$KO0Y;_4K<VlOx3xzX4&FaJQ
z&aep302)lIEiExKP=V`!)XQi)%UzHq$dssgr5X?tuNNp2(Qw7gyWB&V+!0L3D-$B&
zVyFU`2?-@ah$uupz8FRF5DJkVOw~iyPIuv<S9go{3uP4PHVBIlP~!<4B~TEcX$uQ;
z$Ef$S))o(3F=C61`y<vkc7-}l(vP+>Fov9(J_LR;v#!rjr=}i8Xd%dOYtB;($BM%%
z$>u#`#D9oJmb^Jmza+m|1K-bsjRK9H#ALbOjn}D<L#2CB*kX*jh>oDSr4G0f`h~)U
z9o7Ha|7(8_;o2-@W}s7U{>vX_%T9yae6hj<Nr_DgQZ^1t#DJ=%NPhBq4$ic|;xHk*
zxPpNYPL#zILp_M#e-3K>5}s52g9<wjOVoTv4=!*{U~nJEK+>%NKp(X(crXJcUJ>9W
zKbl>jVf->s@`>zZBWgl>jSe7dIH`o$W9U;w6i`Hzpj=M)2Vw?G<RY+QI%}yEWPTcQ
z4pDj!1_2g_2a<Y@KN19rCto@`k2r@oK2RmA;Y1#|m2@gz5+&pdj!w=TNjoXktHkIA
zb%dR+3jqt5Ens2`cYg^wh_Lxn>i!?n8}jyAv`A0v)cGGQtZNFj8D|KQcG_m<-||j;
zgd-S40%}TX0GOhpWCCSE7%V55W6-0`+M#Nqt9q#<!-@p*T;DHK;sZfzo7e>gsSvy7
zaNzObo<JMHN_5x)$J`lckTnRGT!kFsj09qAUcy>#e&Vtd_dujXyhC|aN)jLnp$ddT
zsr{d%8MQAASwHHg352FeNl91Zod_ggi5X6Z4pQLK^_XdnJjLO|iE>j4Ij#J>c{~Vs
z5_LILQfG!Z<_V3EsgXKju0jN4IIKfT(j_f1Q$a&OGXw;cgs7f`Y^v-678p>mA{K6H
zF)U9eos@Kf31R`HIVu)T350-H1%ROtCNeBSnJ6@77*jzRIE);@YJ@Uf%vP1jTrv})
za#|HOnjncXRf49u(X>I4H3k<N!I+71TST;JESW`UVvQOqZM!+JZca@Eix`}SH3K1b
znae1qlxAec<`rosHEcwwle;X5tj%oF;f92mj-RO6&l*IS1l_dbL4ZdL!i^wwA!kN<
z$dD#cp%sD}Q$ii<cC-$$69NMQO^{(i3K=3JNQ~Gui(+PJOSTRa+Lja$6HIv6@oCiP
zDvW@sgsAFMKm-_O0^^5cA|yOuCLCN5<VoSc;^tq06386_PC%eCL_$+zF4UkMlL%18
z?^s`YB#2(1Qgn(D3`Hu$$uSfVT@b87brd2LBoGvWGz0~~g#hXYhDTGUX+&&n8Xi0C
zWTlvVOJ3+L6sm#6Y0d?L@k2oO=u-m9T!0Q0J({SlfM^f4L?04ul9)hI5>W&-Brspw
zuz1OX#5<phh%T=(;CBQbvxo&+!I@!7E;Nl5k&h)zB;tCG$6)I*A<W7uYAGmb8Ipt;
zAm@ApO@wsJT*DA9X$Jv92Qa5>pUN-~ub${beS06S3SJTg(n|J+kNA$C9QGlR&2zNf
z>&zq&uEF&{XjN6>xq-q9;WdB~Eu>&iKoqp(ClV<LWP}5q%%nAV8MMfopag*Z@BlsU
zQKwPFghDOlCG)IcjDP2ZoDZepgWQP6p*IBcljWU`NDwLj$d6g^X6wgf%psda3KZ;!
zF`^h!!nK<iH7TURGX}6xU?O1DE}~X{ha199PMRQl@bt)||Cum$nIWYiU_<ofCb8X{
zE3J;q#x2V!&chzL@N)r9Pf+zd?}3DY<XaL*#H|#fNO@wW7Tx;Cra3BU9OgGEGa_xJ
zCWhJ7wbiXi=^E6bHDj3yIG8|SZ}}!+%@h4N+XWaZAOI-@TeUTW_7l*7xkw@Kgt?iM
zziKQb_sdTFQ184LA!8&Im8PD%mi#R9*(&v6;hz-aC!S*pCO_N48@?JHG&3adT;ny*
z^P?ccdIp+`6e}eyDNFznqwu`tSJ$i9@KjEz@Z4n0v`3WMR1`)af|O)sX<1-f0YOP|
zOvj=M0gb8|WP~}`_vknwj8I7BYr@J@;eaUSz`(dhBhHgPCt;_snjQ{=#{V9LWnkM2
zZ15*76t<Sq($3M=K^2T4@(++8ps+5N66GWii9G?|JN_xznq=!r(yEbU>x)^F-xM5u
zHc=52`3mmUK|w_kaT^rxy@%~Qjv)j8Fa4bpw1J-$$fChx^b`qUh9VRQ#S5__ph03I
zqUaiJ)2Bzkz&1LC=-oOvrw+;(97$g?*7!0U0#ip750E28O<TDErEu(N5(h`Wr0@_)
zFPLGEN+uy45a6Vt;KLV~U=x61;cyeocted8vJ+L6xr3fbgk10jL(x&#8W2PMmV`9l
z-4zeX0s7GXz+evQ`gd(wKqjy@g$Sa5%iy5h_mGh!K>T2*l(;*4lj8d}Ce`fCM1m1P
z1VluE0MsT3RG`3!&?uCJ1ceC+<S0ON`^4ag{ICU30)c@2;9`r@)F9-i#zxcL+dv>4
zW&J%I^$bcOVhBWJA=x~ZagU@iBR&pJpHa+?34jzxk|9#jkfeqn913vYS~VvbFtky)
zMgq$#ER};TDMHm5Mx}yETS_r3q!=<mWduaF)GA{@xG2)B1dI@LWe`n3qk|P0CJ-!^
z0ZD5aN(w4Pt0P+|D3);HiH->cIfiCQE)HOn1dbu3qPqXQo-8Ep0h3A@=YjNKm@iT*
z^}C+GvIIIO`Jw-3u9W`FzW_h2{6A~w<{_#l$Pyp(#!90S3PPZt6(X-83_K=$zh|<^
z9L-6v*s%xQgIOPXG<a2>MMQ@vP+-;@BfHX4T`f;RUroz{Xiwa0=`%7R3O-U|jSl=2
z2PI&zUFUbtt@n&L_*A{i4onqDr_<G+N<V|^*!mqFAc%6vqw*k_LW%hRWqiIMA@_uZ
z0F*>hmLQ)9yZ}#$UtGF*hy1^7x+nF3A?kuE`5gw`nzgP9Bltyc5=1<bR6^nBRw52`
zKm6(M_+^a<eX!c(UogePO}9WkFe>Odjn3C}4%mC+6Zn*S6%XeGBmuucCv&=<qr5})
zK93)medXqy=P}=HqlTS<0Dc94z$XxA2$95!O!>4+N^MYV2^%W?*d$@njcxT>T7%|%
zj(;2GdA4^q8(;Jfr317V5C^OQ`2+l7=$*za%ULV@9}|nRb$}*uBtUaH3apxiu3`%(
z2km4-dJ%fSaqfPXaHkB%2-Q<|lSUaTCRw4__5C&E`!Y~}5&*~r3beBe62uV*i9$pG
zH2RQ)GMEY&f{_yeI*=ju5-36yBr+KQ!-??zi<g1WCK2v)B7nYJ?=JoV!jxo#XCO!j
zD<H`dNr;&sDwO-BFc^wvQh@ls^Gf|uuZd5&$i;k35fttOIBHO?KWrOHiDWqhP!4iP
zA@g|{x?T{x;Kk#n_K-IRG8eddhmQLIO-TpS?^zOg18W&948uRjW*jVmF(6_?^Am_i
z_FK${hV*IQJ<+_PsDhKb82-O%`Y8OM%7H^b!vUa)^?PtY$pL8u0!N8XoeBrB`wj`k
z2gU&7zXS#1Ky?^}Psh?4CaKg4dB9Ste5$7fSAp;)Akmsq3$D~5Q3a70LJ-3R5hO?y
zfKW0*6jCsV5YVBZ`pY5XIFpq4Lxhy*O0hzHi=QT)e%oF$5xh9PT+=}DDg^BIULj+O
zY-<RRWLLB0!3tpb9w)r9dXiYQ2sYHGTLwK>0>pny5a%YPwF}{$Mu>-FTd3GJwTDCE
zd6b%y;mJ?aemE#knGB_{ZVpy~51ks>D25XyD<{Z0WNGAcTnL#w;M96-uYIL%!10Fz
zwF{r}P~r#mIh5@Q-|0$54`>IXK?lT1JoI+kYFkQ%5&NJPwe6fAhE>4gLp`O?;F1%_
z;G)sYQ9dAtlfRFC+w>^!O(fz^*X*^KS86z!DZu-%e@&nghT<q5KF<AV9wTAPrcIv)
zj6;b2^bd<b<fMiexlA8cRzk4N*E7|WGFAwPd;0I37_YSonB^x^h3yGQ)Cxn`-Ux07
zIY_37S&dTCQ7DE<!8mfu2R#A7GGUjGEHZPf9S#;OMglD3LzJ(w9++W(qLE}fNLRSc
zj68QT;`Czc20GOd3H8a5O%)IfdEl9OB>IWUa&cXQuoZ_2P{W?BLy(-3hmskXJ_E2!
z3Q|y-u%$r{!zT;WloHrBPd+G6@1|zr2pRb~!*~S(5kxiwQ7yrHu<4a3;=+q~aiSf~
zo6@<4tl~Ekil>`<_+i2b40Z!K(xn??lBv|>3sD5RLct(5tZf$sy9Di>o43Lf9Gaa~
z;_ngrAX5gV0dfkQUunt(0V4XcHgzV^HHk>T>jPPn<n|G8(gh*`A^Ms!%SQ@Gq)|`|
zGz36ILXADG0Yt!xQCcLNlNggLECh-em<B+GKmbIbhX_P6f>ixKw>s)2AU@O851Hvo
z)I>x=e9@A0KC%%G&_2M|5HOh3B*Lfy7?vdy;q++o-`ZZpg$qHTRtXSu_Z~sQi-W^g
z{mUT=D<c0i7!YhON;&0$k47q?bt0+-5C9|u9&q7nC%^@ES#B2mzYER4>}Tf9-c@t!
zl8->$s)AHnU{nW?MbwVY!50d}xs*SslaK{l6zwEC`-pDMx`r%=K`F~Tcib!skdhF^
zLCyT-!r)#lA(^7kBjn^V829-eqXO(^r@O=SC3{ZQG?kI~%OcnVG9tV|P|!iWLMI?R
zqM^b4K%e{}4F0}_E0)lrp;jaFgr72!kfMI8syfYOWggGm53Beg>qr@ce|r-KoUgL&
z$TlVbB}gh5M7sFE4y}MljUxJq3@CtxCTgZtik27@h!K&HrX(5wnI#fLf+pa5Pm{)B
z<zWRhfhL|}f!K}n+#3+)prRf{Fci|75qsL`qBuA|%zb8w252E^ITIh<N+6mPLV)io
zM4l+|Wt&**knD%LQwScD+<!iDBB{!xpG{nms-c^#Q5qsDsv`?!C|Icy!chKFgF7^h
z+R*PO+2oRnsVIN04sW+cln-cdwGiYWdjX0ep3-UkISH&HC-41zf41Sk>E*V8wav17
zLgzS~SbJa<AVm(bVy)Lx+6pm&6tnYtg+M)z+(L>zi!E*TR{a#~oWqW6#~RcOL>}xY
zVVs(Y`oBo={h!Qq2Vo<-o(Ur`ii#pA+d)AAVE{Tg`9K`-LpW~-&l12yA}Rm#`@c`j
zdS7Vv(5fm)D_w2I<EYH)2pS_~I0PXH1331tm+!%gwnl7dLs6U9rzvf;g;7AMOZj*A
z$p##B9>)I$tLXkPj(KqY3yzlcW05ejY7B?d1BI00-k^I|3FydHLT3U+30}^_`Sx(N
zvl`+_`k6M5z9K`8dAS9<VTf)|csxhI({7oX5r)QtH6hFEJeQAv=`!XPwBtsN3B)7c
z^gW~JP|QJY`2U!PgSl?*CnjV>ER{lpq<3l)LL4d~NVNe{aH8@^V>1Yz`ZaiB!HO;#
zw+^&nu_A+lB*~wYu<K48*$y!%G~La}q9R$FG!;WQWnpNqN9gyJpL31o-b8;)9_H*R
z@7Fr#BYJ{J;OzRO3grjE0;Bp)-DSKnoVcm1Tip>=Ga{N%9Bp#uWX0JqU`H4lv(4`v
z0W36P-tIAXokY3Ex#W8*4kV=R%N0$<_ai<2Ak70nWch6H@+zWlnO5}{wj+4j6KXkU
zgy$0~e>;nLAQ>R=tt1K@?+)I)yG*6opmspJXFRV02TbiqAu}L@+=P#qj<JXeNQ0Sj
zh2<V*dq1I8?h)-A%vzSn<8KMOGVJ1B&mwXz(C-Kv&er7%a`G~_-`K|hxd@xnv$4%x
z6+cZZ8>+&QjKwi4F9JFd3#*FI4=frXe&eB;%NYdr*AF9CBH^*l2@(<#C`c<kc08ay
zvc+Ss9V5BNBN51pyfTGX3xNXd;2puZ(v&#?xh!V68SXqXp}=yXhDGP*4jw{wGRR2M
zLpMY}n`5wcl3_0v-ToDp1F`Ge#4??}&7<chv=^=iz{z#zYP)tGK^upNOWLTXO~TVv
zpl%dck4_xzzysJ5>IhyS*HKmn*vNQ+$+H~P`5O!fq2j^G7?BkQL6JV@YGbMp;Q#~?
zJAw9M_(c?o3J=O*DO58kT60$@72YTp5x^cJ)LX8^48z8QMe{XKHHv6pN=R~#9ZHho
zKCyYAv?BO7rALy7ZH3(>-iAna5nG~N_Ye@{<VZk!*aL7NFd&;RG!nP)-~w|X6{+T_
zWg8<I8DbdlJ;w&nIzvQtN#J~{fZ2HiaZd)x`9$+mJj?dseeF4)AV+jjAVcu^fn?{m
zd^Xs2#@ip9@DsV`>{p_~Ff6MJD)Gg76QJ+(t-u3_L;vCVj?8{SD_Ah1s`nuME(e89
zWFGtoG6EY~(FQ>1PD<zN!8rD`=uN!Z`nj-WH&~NYrEO`&^fMXR<GJjptrG=PX^b-y
zq*W%y4oP?OcOGoO+9~S~#QfU2@F<hp#CJ?pf^8;lmr%MLgnM6%w~u6Jx@YFb#CW7Y
z^`E{$*#^CvP5V1X5-IKn_JTAmc2Pds>71CQJm=&ngd7qGa7aJ2L7@kk7<8Vo^CQ6}
z$dH67U!oAP$?YNOF>awk5W&<fbLa@UKIh9aB_rP8sV33*XoE-NZ^ll~1+YelNK35t
z_y;2R*vfDoZJPqXi6N}{xC}VDkO-ah?^$y$8p{=^66s%32SFdqSRA0_yOiw~OP3~$
zD5Va~%Wlq`656GkXch~MGO+YVAT4kUx^pfegndAgrvAsf50D7NpP(qr6WmrNEwg{Z
z55OirL-(9tI_vqw3POhAL&9{TIYLHB?#jp)OKg58?!$%lK{oWx#j1)e7*K)Cir`ZK
zg-IS-$qK#-2|9m8vqPZ%-|cZBMct~vbes?CEM6VI2zCd%-w?@p37bVK5QLH;89oIk
z-)aMjzuII6Vg<|+vp6A8qk%v)ke)_5zWm`l?o)@%gdlRg^R+F#)L@1Q3S9A+S@`dk
zp4&e-vTYa-K=B2UK4S~ENi0|f9z3&)7ql5l+4$LSnOM(pP=!XsoR`0T_=_<3ig9Ab
zrl2Xb#}Nw7NM$6tpvb`&JNKCnc0+(6jNlS*57PT)ZGC^=iaz)LzJ!5x;b3eKm?246
z5RHvaFp@%(FO;Fo=z11GI){;n91ITx6Pz{RNJnYo96~V)Hg+CMTE$ftax!4)1JY2n
zXU(vs-P@x8EFVvE`j0+o*S9t^Q4HWbgUpvlLx-R8|L4eg@D>(@gi9?3oa)SS0=>c9
z3K7o_Lq4@rr3186{Vx)N5Yv7d#z=N$mJ*Cy8I*DW;5l+f3CksX9wCbig<1yKekpEZ
zNThKl(16GIS4i|!eaLJCA1vs>7i0`0y}Yq4wQWnq`F{cZBPTy#N`3yhd#|^)=@R&R
z57qex^$35Kp?g0}v@KNjz&xSW1(A$YD1k!?VETKv`G1A){<rd;M`J?15j0OTf;^LW
z7_<hmfshix1Vls;1iA)1Cs82K=8I{>ix4`e1W<f6kHOE(o@mkZ6EZ;3Ap8ctx|C;;
zRcg6aNBa1=dgQs&-%r$_dY}qO_z<T750thC2viT*e@Oq53Ic`w_0SUP0b~ku`WcAS
zK)GTEh7v!j3IW|dG;(vwyp|g(BQsl{kf5NF)JX%$+BXyzFGv>y4#0(hp-tEnEWb{8
z2=uD=3?$SaB9suPZ&9Q-1lbo)wE~p2QiE7%oc$OK0&{_!>H?H_r>_g?W`Kh=$RQ}e
z851y2|EK@W!pP_p4-V9~=Uzd(0D$>HfQQ67&v?!$d4U-Qf+A9~WHmEMnUrNwM;3*Q
z7_!iR!Aiw6pP)P&^&MXYDqDP&7hS;7d5a;!BH;q@*CjQEwkZaLDp&UZh%|n24~alf
zOq3Xekw}NWFNaS3y1iu;-X&b40dw*ZuwVn%85Bgs2S?U<7#<I&zD~qSNBkobB7%=d
z@hkCx!?XlS<M8p#^2EE3R7g!x*usSwgYNq@!WIctNMIlc>K7b9v6(|iLVo=|{EJ-t
zqxZntA{9k{zwHj)pgrj9A;{`{$mSo7Tg3(*#Xgw3ZU9W4o=6}475n}Op5!H12q}DK
zF<Al`og9h8LBg87z^-9nR+a+D2w6)O9I0dY(=Gt6@vy|<Wf7CIaQRQj99U`vL<srX
z5PHZP55uhJXcG}yp5K5&V!{e&szRs^{4rO&x;^?6dxT1OlsbdIhfI$g1lO1yp~&jf
z8#9rJcSnT<L><s{d^5o$cNT=C<#Bkx9K&4nD%K?2br#t|geGMfp>(~o2V&m{Al-p*
zX)rN95ylI$C_UaE6XFIBDx8s(e_aD1ljEs7RFyjl2{-U)(7X>mC_?>XbqvAiGfNsR
zKnex`eFxDGqhi|8?GG?E2SzC%5M%#g2Y{CD9D_i@8bw1g37Eiui_I{H&gsAS^!6M4
zRdo!XXd3z1I%!@=CbditT2CoOfnXovvU#p`*S`O!Tg(a0dC%Jpr-yr(!GScz9_a(Z
zpuUs~yBoFV`s=|8{ssODKe3zp{Vlhk%~!e2-)~o(SG%MBNl*T=J*FpJCp+GI;A1^J
z%si$2GSR7i3Xz03I8u&5k^?fH2ov7$`&-$kJ0E99y}#S`*XO7JSG<oI`!<rQRB93u
zI0_gO)0!u{L-3#~3Y5JLqd^@#vWg<SA9oX97zP)pe4viu!<z296+B#84!E_5H-Ri-
zgDphXD{Q~de;TUbB5cFJaz+8{Rw}_f1zw6v+A8z2_zwQik%4Inu5f)sx)7py&5T#*
zpW&D$+l(OZ?{p-9#)4qdWp2h{^x(eqoggq_4CW@Jp)gD%)!U;U5lg`7z}N~3DLaYo
z3M%WP(2h()9yJfmEQto)1_h0)JVn<mh4%e<+$PuxwuC4k8z?CCMW9}L77D0b0NU>_
zwU2X&N`FPLDI&i(=vhh^=n53<pDUi;g3?inAdD<J!IE7A^@KlJ{FMGw3SyE(L-@A}
z2zD?;=s-P=u<yu9L;!qXprE9vs+0;$$bzv54z7vTcK51;EL`iwi&lZQ@Z+BU*e?Vr
zSENJpkU``~Kw%X&KI<PF#KY8!>N_V)Pyn6O_fb$qSD<lr8z?A-p`tJVDEo-ndHvbD
z_-?E7954Dv%!U#0F0D^{f&YG355(j_jBw8X!f;UA<K47L5`^oa!k>&!Nxi9=AfCQp
z_7n3=ZG?s(R8%sm1S|v)AHZ-{=xl|w5*IBuXM2Unn`Kc)FdY#|(?o#<;)0!EsiGO_
zW60I>wJ&epXk2-R+_uSQ)AN*w(#5EZ-ppbbh4_@g1!Ah`N+42EAzV)>HVY!)aAx|9
zJ-$%_g#e(Em7zjpQ~Upc`vr*hUYnF;el(O}KEaamhgxm5F0(`B@i9L!#sk|rgTgpV
z*$hJ#5<CMyAC8~D6&^cSYLb#j2DYdBZZt}ZQ8k*y3Yo<l?WGEfwCrtTG6rqeTCRB>
zLLJJNg4n};gB|IUy~44ZA(46v88IS4LW(KW^SrC!^S^q})cg59UxOOxh-nO{bCm@<
zbttk-*a}mbBp~_#8W}9QmIDdcDuIRi6eq27#fk_S!q2LxAp|gbR7rsIOV~hA<PwFL
zXos&O+@63(yVwFni|eweGZv7*U?imoDMS)SnutkL=|cTnF_HJKhUjM&R{@L&-F5wr
zV4AQOxkQk`v=WSKKtih9BP#+}vu59{1O78xLFk};3UZ`cQWXV0T>Z-_;{v(R;$K`3
zShUd|6P6vK)!oms*M&?lhzVl{f<pp^O@j>V*Ex4WP$Si8t@yul1Nr)=o8;p$X~WGt
zcjieRr3Bgv%G8{@9uUckpF@$;JrjEgX4x);P(NKWcT7DaNk9BTWxu+g6W+&K^qO50
z+>VN*so;b+55S}|&n)~fk&z>ag@B0N3elz{%wT6;-fG`Bwmt{pgOX6p6qGR~B|MHg
zbOC|O;p-1y;_sP>aKc~@@DH4qM1%#S0O^o;QY?xD$Rw72SLgsWVJ@!gswN}b&Obr*
zkvM_c6bHNpDU{P6mlFwVKn_S*k1wB^<q-pzdZ?z3n)Z3KCa0UsnxbyQfGBC90_0P`
zqyylyob-2aAeM*1fubR}ZRSY{1k9Ll`%>t%d7s?G0}sk}4#2Pm*Aous)C7ctg-iF?
zL2VJBqRI4ZSY%p^5d-;zEI|@f<PIFAAquI5K$Qw6(6PHA0m?`|-`@Qk2aKJ=rPsFu
zH-|JXW!}kD>NZqesEQ@PeY#*!y@+xTD+yObk|!4d#sDOOL^71>cQK+VsG!)%?F!&P
zOj1mcNlJHvhejp>#X&7dv|<t&1voJg7!u0Xlt@rU*h(xIU<$}lv4$pO!+{SevQw|P
z&O#{F0R<uM!}az$3VVv{h6>^|*>~+TgfT#h9m{R8xCgAKhIRyk9BC!2;J2d`#Mn~`
z2;xI7@F#pgV2g(Xyij+|dOI<AbTE_5C~l_aFmN?W#YxC|fXR9%3pYnFp~1GmI}i?u
z$=y+EdMuzL3E?FjOBN~!i8D7a(l%zKhJtcKD0489re-Oz8NrjY7&}tsl44V~rb68k
zhG3UBA>Hp$5fu}KkpN6-VwtWAQ&LjZifszpKzd<Y%xsEO-YHp#q%9$Y6p%cOMyR4Q
z1jb?{hp55h8B1ZAM6kvbQ8+`1hQz2Q1z|=oq8gSCl?%&|>I_;WXidio7E&anN;;CO
zX+=7M7lo*Tu}qC9!2wkmmf02-h{#+{QzITQqlpr`r!f9&M}kJZU@F8DScnu7mO_;%
zF$N<bBrO866^CdOgUHS>pi<EbP_h^ss-qS$gha6_5AgV=?%1M%`-lcTx!;J=Dc54a
z!d{i_ncKCY#^|&N^nvsV6QbjoL3J7vgo#_J-%)Y^BD=O>I5EH=>Pqw>+T+;QS$ZgM
z(D3M6$(coHTQSfYBo74ZbskQ-xcGN--dsC(Ru$ZD9v#UJJrhWy0j%1*mXr!`vIa<K
zv5-;%PfMtXlOba@3TsZ1FBP0#BWixs)4u$7*H*Su+==qL2=#i>LEgBth{iBdZw8uK
zOY^nu8paIuLdPWvdkKWm`XhYkaK5Z3pnB-CBLu~<RPbI%bCm`Nj#{*;n3Kr~Qc27^
z#hnI_1DejQ;Brn$qpyyssd}AJoZw@mt6iv?^Di+swC0B9o05~p<D`MpWIB{A7CEt~
z32(;_Ww?NFa@Xq<QW_aHtag<PY+{TP(~nX-4~xLo18L}`ov`HKPka@faKT3?ODSaX
zUM7-KoWXFVn86AidJ0Sj1`H)7pn;5zA&e1&;{e16VIPc)qrgK)88<;N91xFam<|v3
ziRsl$BsRiG(C?$vqMf}nv9skqaS0+IqLV-nc@ng2HYq8BAJDGmnpLTahq{2ePSZuj
zsk?@YE-gSY{}<kYz#zj8cPNOapmZgU+1Vy1VlYb&A<vOQh<GR>Q1$})CvfUUL=p%v
z^cI}#@p&0Kdt5ZCjSlcsSX4||k#8>{ik8EaP$FqfDQ?tEp((jSM8IVX@KR4%nV&tM
zUX<#g-7cth(cI+E2(X2z&m4I<iU%h7b8+F#wXD2Vi8p(lwCd3#4jEms6QI@;D;G=`
zgpE{snFE|L40KdRl*kqagj$X$r~!p2qL3MsabQ9ZE(SbCJ%E&HfW+uInItR;VJ=;^
z7d09$phgF<3yE>0Np#gvrB5pq@l3X1VJ@*_2vO18Zvql%WkJD1GKLN}G6PHtfhJI;
zIRQmQ!6cjl#-W}9DCb%Xnmriw9nd?ctl%rFFJOYHf>7`(>3}`MgPkJ;1iHNJVV1Pe
zQp82);Q;xBw-W{v!Ps8G+uRa&5W@qV2MB^%DxgY5iHNJH11b!QHB^woD<MN0z!<uz
z5+<HV#0N&iQxD7g`D2`^O)$u%uD@9WwTcX}Pz5Xd%6B&JhoQO78bp9a83m64LQtM#
zM0_2}K%)RAWLI6hXJu^6K;9`N5<y<^RIx~-?p4!>C|CmQ9sM;7xfdvb^RbH}4`7Oi
zw@}uQ)JE&#J9`^<+NZ0y2cg0Wq3hR;%B*OO96CvQD2Gb-mOrb8{IsGZ2<>8kkSZW;
zen$ZMQV4Mc5-{8=w1^*|pypLM3PSb-Q*PESN!#mtD&}5$<9xH2P-_ZhV^aBGRKXCs
zL2Uw<>-{(=$O+f&y$Bx|9P)tqS`fC*`=20o54d~#5&5a8q>+gN5h4r_f4kWC$5J4E
zZ*|!@FoZN8KqTe~iat{55P<+_!a|VBkqo;VDxn|{qQb~XFavH3*^U&Ufu<5c)QQGG
z;)xU=G<lDt`w3KV&~rhVnb?Xc+elELu>yO<J~*`l<}A>=0-|k07#WjTJzmUCb&#3%
z7@FPUcy~7<B2)168e;I(gJ5pC4xSwyX~&$VRM6)wg%X=5CpTP%+jSKOu36V8Fkyt!
z%E~ZKw-#aRs!hmYTYB8whLABB7$}m8lU+iV&G3iq&IXkSI#nWQJg#avmn`z(!H0rC
zkff0U1=#g~$FBzq)q)!=$J+2m*$8lxs0%O>I>i9Mxm^%jMB~gzadY%c2wb6B2wn<H
zgz<nsVRi=iDN$b`$WJFM^H1X-u>Gdz6XSkBs${-$Opn*>DAcQi>I#p%JqyBfhSKNf
zk}?VAFNw$pQOI+M4?%Z#04qWSjLq_3?%=`svP{ngFSqZQ4?_e>hhL~R{QVbwT<0lE
zIdS=-ADWoZRoxWBoy8drN^1F{I;X67!T#f-B2wDaR8Z2OLBJS-T$LPB5Ge_Wm=n}N
zTC@-hj)4=y$I2EuvBDPwIlO5h`q)?UfzQA2?dOFy(`JmVN}NMrU@h`bbcUfM0iAGr
zlD&l^1dZUH?BomyBcb9o4E1p~s*wI$qiNqj(;`TN#5br|gkvU$0>P}v(!uRgPB%sR
zzKU0vY||hHXSh)JQ|~@_uV@9xFd#vG2zf-U{)+W`ef(lvzh}1^yX7n=-w(rA6ezxL
z$NAF}<!@MV!$K-699pGIV9OGTVGg_cA2|S0f4oV@Zr%l_&j99ztA{~1v&J-^EO6M0
z7s+fdYab`+yh>9|12-ai&*!(>9Z-k{=#ZL{R71yGeYJ5z5kp#*vWL$Gl_4|i89;YB
z?L}EBwg~Mb;n4Z8&SB25Uz&{UeAo}A&zr#EgK;!1No9a*@ja!k!UO}{DAJ0}f!<}o
z^-?e@Df$22#Y;(8j0dfC_bb_d=cE-(;S|VZQVhx~L=)?W7;AJBiIphx^y7p&6NljY
z-A8;K@UQZ7AW{nT-%K)R*hfDykHgjS!SIA*gIc3=Lb<#eI1s`1f*t7?2^hYZ0M*|?
zPu2ispZQUdt-o;C3<)^~oR;OE6R)a<wjY%JoGPlZ*S|K>fv~_kspa-_UPpx)d*Am-
z;c#}8!vJIy1V0Lsn&w}PH-Q+R#w9?zRY7?f(`$*-9yER?WG-+$2dhS^rAX^~&M6fX
zRToRN654?T9Ar##7~~8PP|8jJDC+e<M5Xh|=^*SrQE9G-VxPKuse3!bdZ3Z)*%hL6
ze-Wzk?FeZw5+5=j*MM@QL%)_Ml!P$Ej#<`Y6VfT67bsT7$!0*d*IZn5v5c-x(hDn#
zWJj>F!WsQ$EIJh;!kt(YdQS<GbWV(5$YxHEc|`|hb_1^%Cb9+)bVJm?L3fjHBy`gS
zi;W7eZ1~cZF^W{KGdnp%EH<RdQr+e{#G?v0dCF6yONQyj<=ALkoh6H>XOMDy2&Nb%
zKMC&yilG<;2#>J1M4?fA+4V)p$J%UoU@n$^Knf5a{4Tt>%@3i=0jK8v0zlsan2NMU
zl{y6>`BVyw`)Wetw^{TIfeAewxMWd;)*S}IqJ<~J`uU`N`f*cKNFxE(i7DbWx~PW$
z2&lM(fErL{?C{Jxi17+dKoZ~@4~l{RbW#LDFhK)XRm2BiA6V^2sr6~4Q{4n#$_JWY
zsDJhMh*G5}Pz(|gC?6ySN<kw^q(~qHFlr&&$VK|?AgI8pY62ld7*c#d=>p`_U`n|L
zb~DIWl86JL04%vAK_aDQU9t-9NTH0)5#WfUki-%o1{M%lSxJC_Nh;~ULc3^20;UBd
zvLQrFT@xn?F<}Z(Gd8A2(J@Q{JU^=-s1LKXAV~m&+G<!mU+scqxr>_+m;e$aA`lu>
zALzTlo>BlxK()W8Af`ceMREZjA6GAOc45#XB95YmtG5cD#2+YzX|Jq_>*wcv)rdxV
z(NR25vM$~B3kW;5sC8`$r!S6+Js){D7E6#Jk_VE<k|E*(7+GKkgS`v7&1G*C=T-jb
z^X)HYUgwFn<{1T;CRoZaAAo}L!+J{rf>DZr03N_RSLsf$06K_KLVS>+ftUzPdO({r
zG}A}0g!?5BFNs)kHbqaH?Y&-tP#h*8$Uwq!FIk7>Baj+F#Sf0^t0U4fG_CFvdY80f
zp{8_@2jvJ+DOd?Yf*=rhvM3xSB0=ada4WecVUNeG=X@Fv&WOs=K*AD=aKi=a1Jp^-
zNy2$O;@y~okW<DmFigA1puF59ApppTZX5hQp!(Pz$Ux(oZ&b=iMGCBd6%_`kMz6$M
zuu$L-I|akIy%ZdU!V!VY0R8yy102Ot3`AhBAI{9g;*Ba>Ws$bd>@uJzK!{oxmZ}K~
zfhbt$F>#F%F_{d+H!@-pC1MI_R3jk_Uv>sL7^T8+gIWRy8Ayf?h<1Z}@u2E9rH}>*
zn1*~xKyC|hfULSeXa*P%A%-E8kV$j}#Le>xioIR>93pI`NPh{<B#B^iRMG%t0rdAK
z@i~J+5-_|hM76__kO8{F3xs|Ep5O=^Yyt`$xIcMr!DCe>=nw-WQ9nLi-Q8%&0TOuv
zm{5uxJwdv;*Dd9gvR0_exr_iw1wi!~WElsYayo|*KbFs7^=`KNLJ7BXNRYEGeB|@x
ztYP+Pa-ly9fjzB*&V<NrChCEW$fnKT=xT<oHigGV=z3)nsn8&lI+m0;Ax<$cSaUJj
zPHF`Uz%-IlsN6(`Oj5{Gn3j@81V-&s=x*~DU-%u*HpY-W8saw)jBKh#Z&mmQ{)xE$
zwUHl>kJUISWu5cB&K6chQ8)kTTmP_^iptGCj$1f!E#0;$En}a->0EeQSBl|R^IBrz
zHw$Iglj^!U1f`}ZA$os$PKGeBid2$h-Wb%O!3v=^p(g^XKh>64B1Q^?g9Z~b0e1?t
z3M_EajZA2$F#H&ZzVDxB0bU9V5r&@pGQ`qx5gJ?kyc{f7WB6u$l>W1>DB(M{%*$Fk
z9lzfik;;mlHkDb#IXI!#BeEfd?k_USF9>n)r_&OP^@}zm*?ER41m$8)7oMPS!2X#%
zb*nd0W}KuU7=H5V-E{G8l-}EYo*3T;4?p?z%WodM8#=DlbQ^5gB#>c0_^(qrDXK*g
z*AkFdse<Iq2GOZiB1+qll1wdS`>Vy~G(7Rp<UN7lm<V*sjdSu2(coO@LJ)nN7v+QC
zjuewH4AsGuI?pZ&t_aM@PHl2pJDdu8%-!(`o0<DBNn<F(B5$_n;UYyDcu*XK9!2!p
zf-)05O$rvqy!FiH#v?n1DUZn9wF=2z4y7cwRp(B5VC~v2Mlvu!a3$Et4volQ3mu6}
zz*yJXSdkvt22i)jQiYb;2EC%$px_kOvv})+-JCdYY*SW{SGn=eBZMt5c;$PPQIl65
zi-d8rgIO(KR^b(2K!bvd?Ea@$Mr)UIX(k-w1V$&S@4>l7@tK|M)y?Cuzv%$#T0<XK
zv}Z1hhJ;zfdpQq<gRb43@(w#XZ9r!(5nuK3if57A)?cqj^ooM3-?sZYxJFPGBPVgj
z6DjVQ%Ell|2`n-;A3XHm7r(uZ{r3Re;|S?=N<E&kdlePvPO5j;0bDX+mMqbpdRT1y
zrZAhwp!?T}^UHir*<QybHc`a&t6$CR`0L@nUJ19+$nm+n6ob@VTR2If^oDGX=c3J`
z%iY*Z97oPWMLdf~vYLf8w?18cWw*YL_}b7!kSHH8Z8V}#h=?5sL^?9@ZI1|b<J7^v
z#;#AB3KGM%_+B?`q12h`Bt+%n9p(90s*T9w#ba@zFe8D-b1x&d5EhsNOcY3UBZ59J
zfl_aOMX{|8IYT+{1YS9Vg}6>njt&}2iiaF|ej}{JTt|9zaBJl=#^4k=!4JbIHv}Wu
z)AFj&?xEaebB>hNzOn6>lO$T(=HIFsKV3G+qdM~|MZ-0fEy%hvG2%CqG|nbyMobLg
zk0K=%ey?TBEAndac)<O-4tC739uW#U4xC*e3!OL|jdJ#T>odjMq=a8hNE{rc4Eike
zARK1RF)==@WDipPE1#xD$tk!bp6DR^uwS8;8SF=QfXsV+)kWsW29c5F@_5BQsvB&b
zGys^<ZR$Y;4(JLnhDdS*Iu5dN6pYEDk7NBAjGoOu3(FbQBixQmb^2wmBYQ|ayU2~>
z3|n$0yuJ|W`%&6*iD+W4WjLX?TUlK>#%-<}+}j;~^CQ%Hw~vPT?D*W1i5j8C;bd5;
zr*jn%wJgu>cuaOx3YQ^`35|B<Cfv#q;r~21(3z`&!|6`5pzQ+5EkjUt%8mE(uyBv#
z9>&SFxmwd+9v3p_m3E7^DCe<mmop*boj8$-c@<JEMwAH{2xx{G#FAthP=VGu;+lOI
zgTC>^(CL}5$(n>^2GQCkC)?`<En|As9*f)E`S$e+eiDnj7CIFfI8jO3RaHd3=j^tf
ziCoWB)3g~b2w;{yg*a=N?O-`On4eDmYK<Na#~<T&0eLbsxxOiAC)03Gm+T_MX1=N_
z4~gBpXUN-2$?0ZuPhH>SP*_<!hcO2ZW?!(NZ&+f$_~O@-$8tBzICk%mxt>&VoPNbe
zVfj1ov0bRyw^GC)I@*o${mu@$?sU*}6Lf;a*v^EtgG;MvVS&&}FF}Ik1_=(|p0g1F
znq};E(9jNPkCTBL9{@qX6OGI4I`xlSr#su>=yL{;8EaQ)!@LmijLa&c7flw5K!jE<
zIacxt3N4XvT!T<(=FpMUmQ{9Y)*g?_A*t?h1tRmD=Avz(V-b{RFP!C}XEBt02B0>;
zj|)w#A5*~Y@aTsg8*ef^vhPQlFiHw+JwlY_Zu<r}94r9fEul_>ia>@&<FII8piRJm
zv;p;ideRC7@(K>n27&;)01yLmgN1;kS^zNs(A5wO1_4MQLIo7`d>fD1EEC%=Gca9y
z+r5aNoCqrbfdV3ctSSn9{6-!CRujyW2dFPV!o><J&dhp?o=ZLECkbg^8bJ2JD2eNV
zfH$_Z@5=eJDWF&CwuVSsCpjdeE|pDHPrRa(T{u%hQ;Bs?wT-q2QB>X+8kt`vl`gy)
z*0jsupTLC>MRusQ35e*^&ojX8SY-tL6&OTIedJOWyCnVPnX^?2Lav;qf#22Z$GGRN
z9nt54BgURMca`d)s#v31!7EXKc+BLrgo~usT*bMINucZOE0u0<S-{yt<+=3iQxx93
z+&X8{>jtl4A$?YMc)k!>vS{7{EMD=pN4SGDPWO*^)Xb~DP&O``-GT3z?v#zdhJgrJ
z9DG=I<tgid^8xswlu_>kXjqT_=jkC19k}>d0^C9ID1@M(d5zHVVkQ9kqeAuk5|Ia)
z1jx8j7)?M6_^91mG4srkwwD7)tD40ml1Uc$3PI0m8|Frxx|FAQsj&ceh^DZRI4DrU
zjR<1O*8(QwuxlyKAeLeztwoT?ARHo<6u^H9WrsLtfT4?UDOIjkF?7Zq*z9g2i$^u0
z)Y&r;??A2ACL5?xgbN&silbM-m^}a(d7emdUK~D`OnVW#WTs%fD`X-(Va%cxfx*re
zwaTeDW0k{4mj1)Gi858<WlP#8P`3*xMIzA0VMNL*hcR7WQ4GE>y!b;zaR~()s=@ve
z!QvQt@C^Px@S6UQ&h=W4-#Ab3Sx{$P2GT->K|w*Gw90~n=hBau!U!23$MhGs=iE5L
zaKSO+z9v-K9WwR#jre}>U=g6%2A$qB2}=@$N(W|~uw+2&gkVT?ZcwLtbn)KM3{PSo
zu|Vyi<`T+KN?U9!u_#%%VBs^w$hPhhCZV?IahwQ|icFT_V`7g0I0mEGKTUf=D`)5n
z2u<j_g%ediW6lA72xbAIUg{c;{<Gkrk#Ub|q9Lk9G~oHE{yYbghd~&J=AVAouc7|t
z;)(VYrKKrK#Gs#_z9Rbp<WLa@ppHc~R2eQ%LH9nda=;u9q3Np`3T7lB6MNq(us>%q
zeVwGAgZeC6S3c3NKR;q<hdN_XgBIZ7{YSJD0&JxUEShT~x_%w=fyV>ROrAyuSoH5D
zx51`%l1e0qW*SK*W@xSu932h<W0QBqRC~rP=i!IebWQzGQh0&$?j4XZR5$+2nDL5>
zF9u`JbCx`zqyJ|%-jBfWf7^fJKlx&Ye#LIOCt=~9QyIoQ1+<jeYy>ic{VE;KVEmsC
z^xuKr{TNH!BRsccxDI5qgef>87&^auD3IY9T}j!~q$QC7V~77=X_gP?_HV+D3h^x7
z`)<4ShFa0INXRdUJ3k4V$TN(Yo9I!aroHIV|E-)-LCFHCPd8B1klf!TZxhk~`ks&r
zCrS@1S{~ElA@H&Hf@Fu#U>J-9kCVXnmOT==DO!6>TQC?vU&^8MdUT%TG6w+bNNx!W
zCUk57u+c`)4=udET?1eoXczcoBqcXXQ<8w4X#pe*#54W$f$;^yLc@h19*>6`k^~k3
zfQaM}a*tlxIy7A<8rbCGLTJz7|6uOt{qYb?lm$5LVA>8?%FV(n5x1(7YpKP{i6J8(
za=EB>IBPFK3V1IeJY8`66EkD&V4TB0fMOC74u?qz4y~ajGw~jN`@RFX8~owPlJF+`
zKA`Dn_yW*3(v{l;;_nLKtFqVCyQ=g!qi{&DB#a3sCX<cRJ0?M^LTX<inc8Cx0v4?9
zY#g1Y;XU`@fOrUke6W0wM8CtjP^%z93;N(5@)}_raPQj%Iv7oj?l?WSFq9mD0K1r@
z{BVr}2&`iaG@=}IhN5aFpoR>?Ff&})dc`kgophRC`12v#NQb2Hz@<Ct1t*R}FtCs&
z@6T9#ciK}BMCUCVY~f(h6zr!cfx;X$dDa~4P(di5Pczrl@(!n{XkTDKggj3$(8?N)
z)8xwhH8Mlwg#-i?07+n3NFosZL1H8Zt`D@AMKIA5Q0O!o7|;Q9=LgsKu2OF<4lmXJ
zlpjQi9uSCO2WCEf!}nAk=t-g7-`Sa#{7MjoXps=Sd1K+uXa<%XS$<$+hXsF->~baf
zPTFXG={Y_L#^nENearVi7t&yv6rT*YWs_ydM~{j70P&9$!zCsd`%lvvBLX7~uSLi_
zd9s-N*|#E3oRy9?R=~^zZ36j`u7RMvyiMDCW<+8JkTZsbk245=ggL>^8Q%6S%goZk
zK}}ML`C4CLWo+m2KEi`i2N-LpP(Ym4Nfb?0q7mg9xkL{TMX?guP<;?Q!9DAM)QpM{
zb|pzp{)R<rok(lL@@j3p8ER}E&5e>RNKi=oYf{Np-AshxL0Ri};~Z*-m(ii5og!j}
z1r@^=B{T?VOxNYHi8gTg<9K7i&@O@0-7$cvq?jTa{{9{cIu;U%jD?t$q=k$O!a^ww
zV>*;VP)aQ=6dOXKSPWp0&r`FJl9HpF>fmJZV9YWm;n;0*D1C==l44PcXgg0`f`C4c
zFDp3_HZ?awhQM(Mpk*9_0jO}4jzLt12u_MpQ-nUKv&-GZGfS|f6{-;;o+1O{AAEq-
z<h{<os+R?z+)>)bLxq)r?>a|-ns$lRG)fFx1ak;r%w(u@%JYxmI;qEb-(2>%U?ik#
zCRkKcBRlA4Wy)bFiAkj+1KN}=mr|HgE@cq{co2WoDD)Y_+#jsyu354S;xHrjv*h#F
zEL^`N9f+5u$FPRL_JayMXy)DA&)c|)!vNk$a9tJYkRt~`ERZ0u2?`IQ#!I|B-U35)
z`J+(}z)m@a=H|;yf)FW$$YR^;EC<ww=Om-(lj)Xar*DtoG35l2J)g8a)V{CaY4gAS
zL^PU-TbzSgq=#B_U`Zn?sF$<Y_B!ed#zqNNqQkZdCi?;^X%0Sfsh=6~I*|hxFM|cG
zYhvajgAN={x;Y*inp#<D);MjqbN3l1x5^XniVWg|O%zK8HwWLDln8{GFt6wr&LGGG
z;1Gy6--rmDky9lOFo0F5YAD3*!=NDKr@$r=8!ct%Gm=$c6N)+J>&V^HQo>f~dZCAx
z1|d{=!uX(=+$r3*xc^Bmasfe?;s(vN0vt%22ZH93!SxYgkaHU^47f|2jf|4yBMBQ$
z-dv<f2`A!4f*u5ERwffMXS<o@GJsNKvIGedxENr$4iJ+GAP^P+NPs{&J30yzPGU$y
zK<JvGLWk%H6eK#C1^A1rZA$f6i4nFz=3esVyIR%Ndo`EKZ)MXl<fiJxY?TA*I+L;R
z_#YRV7xrRf$bC@zKhH4CB-g6aq#;sC;x}(PA;|sbk-7y{&k$WQf>`s;+|R`%YY^fY
zUiL0Ug3<I_K}pjfwttfuiE+daiaM!dq^8pm$f8Ks<d!T&-pgB+rW@bcdoTURu*^Zu
zczklfsY{u<yB`pj5{YslP3x*Q_lh}Z+X^Dc$Pg#I0aRn$3z%W+!I!yq**dDv>k1I4
zpXuZO?#O+=Z~Tp|(9mK+2bKVoMJ&+#5Nsjmfxxjryn_hT3;O76nb9LTp+X-u#+KCb
z!1-?VdI29P1PMqHfuJg4MJW<Spi^6@*-HT1Ond7juo{#38-sY4LO3AecW2xD$|K`n
zz(=0M-SYI#Npd<wTeM(WB%4Wmjt>vRAp5R0f{HS0hDGd7{{ZTu_6vm-B>GJJyAK};
z;YWHL@1&vV6LoWMSCM(zU}C)&ARcX_u;zf2N@&Qa_R|&n9*1;@&_bC*>H^28*Ig=S
zaIum#UheQfE;lydn;y7X(B1PN9{6naatsmx4?sXmA_a<I3982O1IQ_O-noIL?GM*q
zj+9_E*MR>(8xBTt0SJDAkTT>d(UBm)kYrf&iP4$Nu=oB7T^f)K1<Tb`xOk;nXY6ye
z=3=C%WmRXsD2N_2sRXeXuyzVSvA|RJ{m*<82#6UB5}>kN$eq9_N(w0XV4}bdfPBKK
zVFi9PI)NP!Iy@4f`m-nM1q7o$pGWsG*tfVX0zDPZk@ID1K+z+U86OWZxt605PtZU;
zbG_T3#&;|Q&qWI0ID*1uib^6Bz%O*_D#xN!Jki5Cfxk$D)cr6lsQC(+q7r)jd;U2j
zljZ-FW8Kzi;S;DW*LD)VC$Sg72&OO?`}|=j`iov!#q;c)enWr^T`!htF(__cI3AuU
z<syWhW(iOzg<vp=`!+~4hR7CTm<j9h#Lzk<1KxxkpnCMg>_f;EBuEIPhx2jn8v*Y0
zj(w+fI}f~uB^hj4aXvw^pXS0CM2hI-orWDwg%m~j1jq`}f6o+1GPU@1@V{!suX|eA
zS#EjJW?04|Cd@gQ(7G!w1SU={VHgTf1V~r^HV1t|_^@fII(TGnJL+#R38~0J_pf|}
z8mW!LCtY<ndnyWQwjJ1{?mD0zM{HSA@SwxJ(8La|a5GUgA|x3V`s8t_n;>TdgoMmu
zglt81mLJFwCQu?piEr%GjK!+GQR?AIE;MJWjsjUJBo-d!1EMAYu;NN+Qg~$mQ^!}M
zz={W3re)QlJ@y^U+D38!Svv?Z+IiLj908p-DH9B$2<KigPJ)9*V0!9LzwP=es*33W
z;QXq1EoVh62w2n#O+w;eEGkn-(LnBcN!bU~67>^N7KA}DVR`xLaR#36feJUU5*nib
zWP%29sX(R9ScIIgU@~bbB$)AsVJY;lW35bdBqRzIERfzlh0${-(sMTRW2(4RVUSRz
zk30KU?Q4t-m=e%8v<h@BaR^{PlnJ0***dFLy64Is(BaT&rI4~vX)-WnKhZ*paG(_a
z{fG1nL#8MS4oFje`543pVjzxh;muF1M#$vQ_()ha&o44@kUe-CY(F10ba(eg;9rm=
zz#$`%fW-Bu&4!cx1Nn;~Kr1qOVc;2<Ei9=0)ci*&$qv$~{Gg&U;8?3_tturiwaAI2
zsEq_fD3PinOG_0XsRUvrs5XU?gk`c+t!fk?*0!LFB`FFDN;FzFtt>$rQo$Qa3Pg!Q
z{<>UC6%s@cL_|Z83ZzR))T0Y5a#)%Y0)kpfFoGe?fTA%K6Ey*`EEWhUE3<K-L}k>=
z7_lRPWVMSdr6mh!f(R|8ppvahSgAy#MFc{^#bAIeq_h-hASEnD422sl7)30wK>SZ<
zSM2pp2^EI`f*J{BIgu!8Uhi1%&xdI+3dr!GqbC4P3HGE)q?DE}kq1yA$u2k#g@b#F
zb;nN=RHr3+MnSAXgD79=FL`49lqD8U)fBx_i@quCE<yoN+#N#79YP-c#rcQjKQ280
zfQ0}Lln#rf1Ru&Hk|D%AAxW#erifgKk%}cO!kJ`JRtR8#g)$6FC5jXvlQRMb;Et3D
zd?uHc2?%krQ<~5lP&u<Q+*QRsR0%@E(p(b8sb~vJ4kWdw25=AVkl}y;J!21?1n&?-
zS*#j}R8pX{p1hQ@wlPYStC10bvSuaFv})ij5hDZRrNDIkf3CQG-?Q#M@710A{<^IG
z+nrTaRaI40dEMvj;m<JrN}?n<{yUz-moOf*ra}|fOHStX)$uLYtdeJ{`zSerXIg|x
z3kO1n*iPgZ*AT{QDyhs2TmpY?-9|<jAxHtq5HT^97xNZ|vPqaNDj(nX1`Eb0@Bu)l
zNmF`3xiJJ(3WZBs0+bM-e6jiQ&0d=zledZ(6lrY`qz2m$-z}4tau|r`IzrQ9VG5qj
zoqPDu`1E**1a)a2IvKjm#<Z1{S<@FsmT)xavP@uicY>S>SSrXa+7MI_(d=R}L}k;v
zrrIefGdh^0F7oarFNPN<R$Oplw5N*6Nxv25m(JRal(nUEvsR=jDA!sFW)$g{hLmCw
z5rYYeDp3S-z@1h~0;tLdn6DsNMd%MJJMwoeV!=$A1`vQx5ahz1@SEUykSt@!H2wD|
z(m7fu@h#e5z`e@`S4yY_$f5Nrhe=%&6o=j)lsFM#7!;Q=5DuZ)^Fyg4;2WX$lu<-D
z0K*7mQsiJ6o})2OLR=O(F4XmWPhNHkq#P%JT(h`bZTn;}QAF|0Nwg@%%0lW!!^gWo
zb3%6Mv?^vwh~M*K&H^1Lr1c8PkEi00363kiw50B;sw<mnhFM6}ygYrK9i7BPaoLIw
z_*vJ1l8<myzu)?U?!*KhU$~tbh*o12_({xU5Z)LM$bOf)hRomx#n?);Vt2%*qLWh4
zl`X)r0+agD`(IiR9hAMATr|WwJ40RU0!byRC%iZWbMR|GJxCmoKJMAqd=o$}pol3Y
zG}I~yP4mv3@3shj5}kF%l0W9EfNVx$>Gej}=O3|quXT2gwGnnn7}z%{nIM5MI@TE#
z#%fdYXvE}9GC~9wyg+JmW3=PzCm#SA3S=JG8@rLXl+s=Ojvf#o%5mb?OJf8>0jw>s
zAnAHY0W^Vl;h0U05XszGJ5UgS?j~j%f>3I(V&59cR?l3f?l40!SmO$16gQEm!9`e1
zECt@j%q&1&hDyRU@C$<^$#kJywvee2SrnCp2I7=hz=|^j7mjdW-I$cUADq4|pM@J|
zFQ+paga}sRcNR4=o#lvdr+D$s_?uz_M7yG4<q)TblPa0V)*v;OqYRR#H<^PZ^Z{%G
z1;#{sIAaGh8SD^XVxCBv7%q-095vLWnR^Mi@OKczWkTUW1*n`X7Q`urMn#5zFGWrJ
zKGUunfnZqf*_jcjYA2V>0&_7ri!o+kWo}a>SOto4k#ndTRz*{w;>WD!7QdECY>*!u
z@^Doit<ehnJ-gmbGocnH>qN6Dc|BeBCe&RW&E}eI%$>C}ZCq1DR|>B9!_}C$eAFpJ
zo8Ewd$sE&Rn4pWMC@<p=rG#+EOq^`il%q39X957><*H4hH+*Ue*p1!V@Y0+C8_1?<
zWv0>K=dGj;8|r6x8eYYg6Fpy_%Ik-#3c%)@Yp5I==g8n5kS5L)zV9wRPbZfxXw2x%
zIF~g}Rm}3w<VLDXk(|ZQ<OK%_>w)lcb5-g?J_OCOfP<3DBnzS|q<FH&iqJwBOp9=n
z5>YC)vtjIM?RhhyF!)<|`W%DkyephaI0k2GB5<Y6utc9H8_N0i%W=lds@ff>o*^2n
zFd5M<Y52hChb^%TI^EQPJHy&o3W#!b>A=de%^mMs>4kxfjka{xK{pYGWg=8m1`H5L
zgcX6nu7>WI46lA>!B(O6{XX6>WeJpDJK>XKqi|`7DS_jWJ^cf<q?uUE?9FS)+2#R}
z%n(}v&h+WQDaKrBZXDch3sAr_yJu#qS%ac#3J@I_B$5oA#u(9kwMsxnM`l2V?-}IC
z)?gplP#IMNsNP?Z;(9zbd(SYO?(7<A;R+scNl<Wj(9ml-4go{tA?zdLI0n-SlLnmV
zrxZN;IXos;xUzw>mukHRBsSR#C1r~vy9yl2EQ^ygHE)?2)#s7)mS#~0qFX9iPe(b<
z9eO1?XQE`8)u!2z?ntcI_ek)WhB*+-60$qBjEsq>;^0Xm3<-v2oohxHhb(Q_O^~{+
z`W)m>*})WY@2ut+%4SGuOaSODGe0}X$a@(>MRhN%Jk|MAw8sl(NDe8S!r|PAmO7R&
zVY!iPu-$`#Y*6K*)<Pga%{Hz-mKcK*GCJB$`()Sx0LYC1Ux;qk$z{kjGzevv95KlO
z%ei2f+GZIq2<+V)sACA&#w(z1i)*C?E-@@x<mJif^q6Q&I&R302ibsmKw(T^gd`9#
zVK;RzMt1~qZ&{QkaM&(5$0JOYr{_>Gq`-(63f;UKXecxgJFx^b<;;O{$fJUXZX>B6
zMv5#SQ08okA@{6cIcu7Z@GohIHDp$j<SK~J-esKy8xzojOKU<I(Uk*|Lt7=1wW?yF
z+WTg{M2psi%uv!mkd)-5Dq7l?;N7-&6iz$P^F#qdd1TDmr)EcC$6T$^l-ivZ?9-P9
z%EYq=P&KwnrUFC?(gQHYmmrE7O^zcvI<_eal-fdJ-)KGvcpFafLBkH@Ckx+21oLNy
z8J7(GfE*&vIA)%Wj|r$7ZpqO&2IPi1c4&(@%d^9QBX-t0nJXhHEf+<>Zl2IS5L7-9
zg(@!Q$Xkeg68dMBXi=P~Yerxs(?W(cMz2L7%{Ak-3c*9;3M;&h+#%7xgfN49rX<MH
zf=VFJHi=+5rf2B)&z-lmf${YUAi;vqav>=Uh3wgrXy`VEtUoYup%|nwJPzgty2Ku*
zEn4+sNk|lH*!7(naXh34Q}(b!3K?Wa9UuQ4lQiqwlJe#U(ba9|U@$;BWKqqKqa3Uc
z4hh>PIR@6q${Y;awqTKp;*yH%G9JX_KCD<oP;ubvUmaLUBaC%3xf&4z*{8E(wB&(I
zu~^5fmSfm4n^Z&;5uT<yCh0iNc@q*KCJVW*Ar@j3ln6<O5ojnbTz3;TY1nE&HG*S-
zBo+w3Q0HL4?L|5617~UGQp+jVlv&Una~4FP)9f)?0GNadFh?}O2wf<oz6YH{EiSh^
zovgH?81aM;j^v&LuGI&obZO2oWmC9;3OH;O#0edZGqtUXlV@jG)X>I@#51b|AcWCv
zjgvx^c}|-I#w2nV7klH)C>~s_RbmKo?vC)CH%|vK<~+kyJb0ctJnBw^t?QD!?6H%(
zNV7W0syliVYi}ZL*(EK`T3dL=6vH^_(>@vqsZK#o&M774M|W_Y;50axp#l;))9K!U
zH!7o|HgugTeE~gF5rKq<ffH`b^Y24bB26IL42lPa27$6_4x-TbXL!4_o0TqE7RjGE
zyz;UvbxuOh7q!~o5r|aj-O65Pl|>m#ybxzSx6<txYFOdJDB6V8z;uXRvhs<c&M4xk
zu55UAQf=(SF`o)b$acX;b&Hp>H!(_TT&Q@bgvs3HrRk88RE-xKeyp}2A38*~1R-Y2
zb4!*_SI%cl^=4^7A@q?OJt_mg5veT(m3D(fbEeolbQqA$Nf0DOkYG}bfK?e0pfnDN
zXPh0Xkt|1YYcLZ%xh7+%>N}g#+Et~EyE_~>Y?V_zt`<`}*fMK4!?J2=XlvkoAqo6&
zO(jfhryzo`J1Yukhj$!vl7Y~U@8cK<@0N3cF@@|x5?KO8XdHWbwcaP9Y4d61n>X3U
zdr0j~#|6Oc*{H`Ja2UcBdJ1ILc8GG(xJXDvObqtiw|bVcz|6UVpv;fJ_u*CY9hmKd
zjBI#Waug(lm@-F@XgCn%1u<g98jXiS2C+=c6zJ;Iv1E`I66~9U*R~ptb}-?AdLdJS
z+sW-b!x!VS>Yd0Rdbg@L3?!gj%p8_oxIc36QBhSCKpa>gd@xv!m_&?-kdr5?nj9g+
zhMNH?1da>AE`M>kyJqr)-ky-TtFqj!-d>v?>l=t01YjMfcvfd@c_!d@PLu>h3J7=<
z;r*535=cw}U?K{^d(IRnQ6Vu3WSEsRDUqyn>A7cQVk$Gj62!x$_()@MLFh^CIvLW&
zbRPheDioLm1QJf|Oa%Zt0LhY|lh8D{>^}3U@JZA!P$bEXRTZr(pj|mk_ONZ9pCQGA
zP)U)5-)sP8x<SA}Y-r~q#0X;4yTPTIG$tJ({9`yPlZ^xBh$`YBXB=M|b?-}9upmA4
zq+r3Wa&r5^lBN@2#A^eo>rb6~8*ha>mScnvn3U9Gcso5At0SiO0%n98Q)*EL-P;(=
zK=VbUi_1buBrT@aqqEz-DmhUqnj3}Iw{6Py!F5fda+C^%O$4?wu!Nh0(?%*t)4x{U
z#b`3K+A<Q^P9vc@0E9XnCS(_<fsx&3uKATRIo2xMTnhUmYo}QhYo0juS?>I<ZTs`W
z6A&0fIGK>4CweX397LF@g{`^Xg2EXV$vzMP#Bk0e)X<|drs`*WS*eRt2xM5H*oc;C
z%XkPwj?7k;Op#<M?(EEZoQ@6{Y!qgwjmrjQ!ia2KDDf^(nU=;F!bpG)!b^aKrk;Z6
zrXdFe%{5&EF5xMoC~{(%R+=3Sbf8Raz*rm<>$EmoIYy8%_~tVbscErM6;>1q!4e@v
z3SIVmutYL73m62K1h+e8;Ao;`qz24D)JVZ%NH)O?IAW%uWFf%{41<w(h;e9flm;4>
zQ@HAEZ>eKQ120L0cLOsL9ZO-tUvnpP2Mctwl9C6-;Nn6SWqxwv_3R@Rq)8R{L9Z;0
zfp~^9AS6dh9No){$~B6_gAfb1q|W&g%j|HJz)cq6kZ>t6uvG*V1<M`xE6qKr+}_PR
zJUIId(JvB1V+vp~NiYF`vb5WlY8L>4hNFRTf`Zsb;w)!3Wei}VGz@eXY|Q<74r#%1
z4A@rFK*C`PPk~;&@)R`Tp^&j+!uX`pYEqSWvIkd6;h+~x1<aQS2&R>YAg*KT2<*HA
z-5y6_I*|z2S53+pCk}1LaE4>QX8Iu5E*M~RT9GFoAb6fT7&Mb9*=VH>R<m+Uo5h$T
z$_q|sSA*p08YAF~b+)^wQ-BuV0SFluP8%UEqoV*a0+L+2X>}7KD5M}mftq0AVt~-p
zTr_k{A|)_a!951_9V6CfZj8Df#Uw<O+I*fK`daXVu<_+alu}d7h%>W5?E~us1Hzo=
zIJR0v6g%aj92`#Jcte7Q@(`WnK3{(#a02NAh|+ElnxJYVFlf~@25DtoqU^IFG?KM&
zZdgq1U{1^h3&nC81Uy4XE<mY3QiTdk1qc{QqrjBNs-+SIkv8N5kyNQg2#K&G$puJ)
zC03MNkwG#P0EwVPpiw?gSO>5fK!})FGj-2Az@MF!6i>MiimLq2ougKiwB4c5z&sh!
zXm^8z5T$np+m1S>lSl-W23I*`AWDkUHY$r`hi@%|u&^)&{caByI1#${3dJ~tp!{c(
z!aRepzc?qPC)hq`@rSdnAyJqUoK}GMYg-2;oA(~D53pnmldO?_5l{QliBxF<B~kVJ
zP92$A9?|+CaAHUnRwavXYQ4l$!~zUTg(|4O1L1&dG$0%$94LuMVIc`g27zFSB%+ZD
zR!D*pVnCFn5<&o>p{XG$sFooZ5?NxBNRT3lVnzaiPox*(q`<ku$pcX^3xG5OMyPpx
z9m578=4v72CjdqYQ8Gk;1axDj7zJ=Y5DK2I!P}nH#8XKIB|!C;mz4~ZNCXiI2w<lG
z^a8Avk+u)x+aV<k98jjJDgZFQV9+cdlG+$)MkFFufI5Ka*A|ZDn~U0J2XWyJG~!-$
z39-v5&{9<5QQ}TL4-9FFm_m-hSphT=K}mr#A&y{3LBwQYaHkxGNSKhUFkba8TP^Da
zNrWpDoOW$c7>rYcHz_!oDFk^=x}(fL2?rT8p&sI4l}t#45<&+_A%++P5++OGeDpzk
zq`e|#0K?mDvM*5>IckC3J8fn`;2enMQKFzoDTjNa^EhU0FjdicjeB6Cb&DOy_8M6=
ziZBt6hNIGOcZ+gV@Jz5ieu1dsteX0QPWPHUF#|wM0ue{g?*F^S%ptfPjiOG1YMtmw
z0o)If%LNQjAoI0ABE9am4$Ts?At%^yrvl?x&!-4o1rkt3li8CWSiUHEBBQbZsJJ1<
ze90Wa4=iFGj39LJ*rZOn@6S`7d*TFg&>(xJRTPJQ!NTC->=t@DhY5)aMi99d2z2&5
z8uvSc*b}r462y*(VhMmH$PiX6AZM|Xg%=ZuYJ^bYf|{`^6MT=6ih_9=dZWHaHzCX<
zK3@)~+6S;E8A8|=MXi<23@qADX%4@MUKW&ie*%-SsQQi$^wROmL_^X5HcDvsAclS8
z9*BqqB4lrr=oH1B!(AH8qXXt}>PEq(Wf+u{V3I_UBt%3+K@7=(-<+tfONB@jks%Vk
zoF0ul!`>_)KnYO*?wt9YkE9rLRJncl8=Pe_PoO&w&-t{%6H?E;1KpFP{6YtBV0MN<
zLyV^H1Uo~vGlhU;>5^6eoS}32&VVr2xXmfEuw=BScrcQnh)JD6RYg=*D8yvcH6)G1
z3Py;SQ)CH2mXQVsL=MafxUzsl5g`!-5CjAv0x(+(#uHfq2#`VsV+;_$fg(jDA!%qu
zh*?5plp<7SLXeb{NCE(*Ss92{NFgO4(o!I3{1G>X+7S*wo*nHTq6!!ypf-pJAfS>8
zfsp`mX58Mf<p1K`@|fCCtm=qZSQcL7oqz6{O$nlg5wi9qG76Mo)CW`w0AAxCfc}qu
z*#~s}@Cr*4aj`pv(|R%I&1wgK)xj}^rV%0^L_$HYf$u^L1Bbcu%QMFr2jU+5A0ye+
z+DL+wMex-%UCuTD5Meby;0GhzWl1s+p06XffIc9(bWVK<&_j*LgCrutAi(ktioA4B
zx3!*(aT*Hy57BG$geT7>6VXqU$kJGP{bs#n(qhZfPTht{YWDoGMStJi?x#c%J+r+v
zjsdg?Nf*@4{UOZ>NMb1-u3Te{;Dg@3bmTI1I`?eS=L%F&MHOJ8ib53H_NjUESo<bD
zm%h7?urjAo#V#CshjCNS)%AA|rW|Q!NxjA@f^qUeZba5>5sg&g*(z8iEFuG{j&P1<
zXe=K36|+#$Dg$U4$ciHvYb>m+)`UR;n9i6`fQ%LjR#&vXuQjM6RJ5U4L`!H+pj|@3
zra0L&vP;6HC@3)Ha!O3Wd1ZlFF(MZe7YAcxEmtYX+b10i*Gco2ZgJB{j8Sw<?mfGo
zpHuoDpLiVX5S>aV&d2#WeLO@nF$oFPO4BY%2UHH{y9X(X6CuDQV=>~Y1ShzNl@yb-
zkO)8l4`UVCb><o!y~pcC4jecR)8SM)FDSsrGt@m&q7>B>J<TwxAjsdB7YK;+J;Coo
z#1rj0Q2V`R2t)-6M8P7EN%xS03_>L+MIRUwAP6N*lLiow85V|NXbD0vgej#Y0U-*4
z$+Ub}_>>vjaYteb2Qtkn8u(JCaSWm^!VjAA7ybr`hg}^OYN(V4K;U2>#f89rmLR!$
zp(04ntg=j;EW#@T2uXF|6cV6n8wCVKmPR;qA89wkKG^pk#QQvZi23Pa(>JCE*T0Hc
zm<tNBbHZRF<3xlY6euzZEL9B1nn?opv7)k(^K5`OKQ*)<@Cbp&dPC^Gj4#764;1jB
zR-mI33keE9%0fV)Nf&eq;Q_;ZD=^Tw3l5V|N)!-V0wkhy90(x{lrp&nNY5lNl$JPQ
zfWtdvWQ&6$NF^Xr!oa0LAP(Yga5PQ<sd5Tr2`sXyni_Q{NHh_^M~48=fIf{LaI=Eg
zs!%EQr`-h~-JAQx0;q(NNeFf?xv8?zkZ_0vDefl#lO-@pDhPxjFSxjSf}4@)n5QU+
z6h+;<kR(ts=zhcXb_cpJl9PKrS|N~<8i=BRm>Rk>^UNTU%6@V*yivGlq*p){Y~OSX
zr}AI}0@;YbKv2iBb?~iEt$ce4<`|6%nC4*SWribEs!d7|&C9qn2{%5U6szxD0x5Pw
z*)7=lK{aW}5kyQr2E0l08wDCb+Kj~u>R?#K+?Q0L-bcXW!2}81bvC4fXxbVJqT>dW
zR6XV~CfPz7o<?lL6)q))vPqFIrwYgti(E!CK}tz7<|jCd15QQ~%oGyHV8bEN$>gTl
z^Lj1gIQyLv`Ib31#6!X)G~mwz`Fa#X>O%qUIk1_jV*1!P0CPQkqriK(DcBxm2?|aU
zj;0RCzfnoxm=F$pI;;*5$<$KjpevcnG0ZkbgrtH3WN2ZAN@|AcstgejHaVX1?;-)h
z9^(B@aZuoTKB2&UpAxj<W}BgrY4neVC@3JXF=9gQL1dy}>JN+*?GV)r$}Zd?2Bav8
z(QMrlp2y2@xV)tfMQ|b3!HkMT?6dTihfF#8))Y8MQ-Xg_D~;f6t$jI$Osr0CMrE1`
zaCR+9lOkuZW>DouZx}W}Zxg`_O{9c1SJz`zj}DInn6rW(IV}Gx`&c3YLKYOYtMovC
zCrG0I9nZJ)3LoFIK;#uVuZV6r`b0+ph_qOzkRDKtB6nk-cDxGVvt9ohaRZ=^pTJ4-
z!vqx3KtxCqOi&-N7D-7+Qx!1;P!Sac6-11Qs7@(?YsCd_BIpJ|Q3ya%_b|k18;RT>
zW;&dRl%b_+lBp}9vI-hfsTwLErhtfuv9P9wCA7hHoD<B4=lhSXKR_vbm@GsS5ef&{
z3X5z;R3uA5fIIm)r$ynq8lb2uGg(&4i$h93*leN<2L}-mL?Mv$Amj%it}6~eW^{82
z!<cFH=h<4}+Ur*q5+N%ZAPQKG62WLj%Jva_PEfQV%dJ&&$nl9H1s#tI4}XX=|Fxy+
zxvsnFG;>(RQ|t=8A;L5#=B24%w6P@_e%?x5!{;a>?G?1e53Jw*;s>Zse!q$sy(F{x
zs+y=1S-q#%tpB0RDySG>M1ldtRe1+R5L4OQHZR8up2PM)Gwu`93Rs874-!9leb^>j
z9JPm+Jo&$U&U9h>H-Y*%>GVdh`{W;(!9QJ;Mi>f={Ud}I82h+#;6`KfrUtAbtx1<K
zFscet$S?+2D!Tzej3H%+IoOmYQ>6kF35Jyu@R}jk+!(;5dvHho2`kuv93>FNWkdeS
zSO17XC_x?l^Z*a{5`cbDkqCjMNC|0BaDhQ0MFY}6AABq78ER;hiliwBD2j<88TJ%~
z34#!+AtXE?J;0T7&FTZcjQVGz(JyKW5W&mK(SAAlL$F*ZgGnTTMx<BW_;pzH0owS(
znDzw;pAS@`f;d2Y03+GGcyJ_pQb6{|z>&0Ca_Z<8cIgg^$bt5rzpDEbn*&OFgTSC4
zvKSFLIFOSJ1wkVu$V3nk{X3B#)byQ_=PHX#`496E&|Jh2=<s%!(mG@RV%nOTmN22O
z<WFRZq*Re4im;(5r6ecNfM!?zz0Ezq5JW<O6Mmw>QICcofsCk9lz>ToxCFp}phzWL
zD3oL&1LvW7i3khyzT#TQK4I*K`=X_;fP09B2&FVWbGWKoyV~du<Iz;nRKbiwFlYBn
zKYXaT6lVfDOu?8w+KN7+Gfg)(!|FhPSLg@N`hN4z+Nb^qQ2@oNDt~BP7p^6joTdzc
z(Co4CcxmAeEgbNgT#xPo3PuYKweJtHpoBwWERG89AwijXN8rRhU_!(MI2F^BRDwoA
zhCiLG4CzlhreC!Jk-*Z_PH}XB2>IBxkNeEr>}N3c(oueEBE+ZL3S<j}_JnAk-~InB
zofZaZkt^(iQb!Z#t=a#P`@i(_`nu07u?(W~BPKwhatl1QEJ>2X<bL@~M3a_)lG|^4
z{tDzccVTDKok<Qyl7fR%l91xN|6VUf4h{%dM6ny*t<Tgb156(oNM3w>fxh1;0Q=tR
z2a9<M@c9Ze0^6kp7R0=lN+D@MX^_78))o41gE9S<eNb*YyA)WqRZLPjfS9Oq1NGDq
z2KXe8B8Msnf<j0VKypYQW|RsJz{P_J`mSF7v5?rMg7SzP08gJUvkJ(Vc$N?{gCvB4
zB!CAF+%x)s5YZwE!=jKG5hNId^Qt329TEY6HxJ|!OJ*n>PuziMdwPQsnhcCGvB@HI
zBOxmaf?(19gFezn=w1Qyp;-F3s2>~<MKz-Z56n0)EB{!dAUKjJKMH&u-4HcEhb0uS
zQhjiQ0)Pk*1>*xG%`g<wL~24+Z9Y||;|kU041R7d4?Rr$?*RnTlfx`upV*peF%So&
z4ic~|$i8tvh9y-I<!2y2xz;=s`tnUO)%EHaz9C#7q=HH*Ns0x44g{d-D4-!00(8MH
zcwtk<05t&YG!8B#gdTYFi}Y#ypI+>Q-!=y{$K3`}$#fWgB=S3dCZ=aT;OtaM2+5x*
zK?r%l<sQBm4?!J8do*}SF{sJ}N4!>nNHH{i>rpZtTI{E|ibvmz1Q85R_8-{^e>MgI
zFrS|Zm=nQhpT-HXQ)Zcvqk#{$NJGRdp18IlEH8Jk-YWNpydBWzPow10tNi4L*DWOw
zQWPhmtNEAf4{7T@_ywU;+adTwPzsPWA#y>HPt{;#IZ6*DOSG0J`&lW;LWnf7^<=4$
zBxQzziHeyBl~R@@5+w-<3WAw9OBgN`q(H$0B#i_SBmiUp@e{$)G9p=4JBg<+%ykTf
zQ`+(fn^;uboDm58tcUwO!m6)s2liopzg`OzK@ebwDF}edXiugg#5t&80YGMe(-gpz
zFovtFGq<b!=hATLn2<Zk0Z~XgI%ke&)tD*5Qwo-nAi_iPZX}XDKy?pLn8z4TIWkbC
zN(xF!iee@D;7S+eBp=yj;&;G9Diug2A_5-x(65|>?v1?UJCcWK9}FRZ6okT10|5aO
zD3SpK5|W_-GX)Cx8bjv%-tKrJEWzC;9n*qp3aA(e0-?Am`6Czx{Z@NBDTm)fr{L@-
zt}2O=m?b@OWQ^7{DGG%URS`w@p?9`qWYEFL<l=hP4x#tQ7QxUpW3#B8x*Uw6!Y)TU
z+T%o`ADrO-WSC3l4!Ny}1=I_LB`F(F8bXl3(ilN6g8-89Bpg--o2txoUvbzTD7*<m
z4h93L(21dkoT7Q!MBV<U9n*>yPr8GV?H7hmkCg3{3c*i4jA(=sY!1yghhpwVPMnkW
zCnXQ?h`ib(357``E@YTcl(0F;;0d|Y2?>za<Bl9}*^A)(H52>roCW~^<sPz*X675D
zPZZNElj`90gw1HL1q9XUh3;_^aCB6$>WP^BZ_FQU>Ec5O2|0;mL0}n0g@~~lUa(PS
zVKNxhlH{Nw0r}FvPTLrDXwfTTLZU_iX<(rl(rD!YZGffy(8fO?@R+PRureYjRzhld
zmremGK(H7~#0vnyz}ABaHC;gUq;Pdfpsb+4#iR}ep%{lk0Z$H1F_3~n7OjRx=yEg1
zISZ1w*CF`BV4|Nvdel8hhXWUL#jB(ovVIcfu`}%u%%g-fWV51>I{5PnPJsiV6zzf=
z&gNkb$4Z(%lXNGC$Q|qf1(z!zI2thJDgE&20Y2NdG(A%p@;t~}+odqum@rC#{*=Uh
zE`AW=cod1Pbsa8|dq)HYVnc`>lbwq3wILp=6#-$)EcyreI;@GH`~M91RaI40QeP1s
zT&b%aFaOgH40M@UmlM8@xI0X0bxa%R_tzNt;H&eNN^H^@iFko2mC)k`@7G}cA)`)u
zCv8q(1L_E2DUl|Epap?Qfskb+T0nvUf+{2yfQd<_MWkhg7?O&Ks3>7kBncKoBthWy
z1Tbcn@xZn4C<w6v<_@tAq89yM)_&KW(Rrcnq$&vFD}Uh1Q(z0Y3VYuP!7^@dE8($E
z@itN0C#XF{5+UPKO-RWx9G~vXLqUrWf#;Zgm-etQY6_N$5Ws`g`7rqYe~{C+eGu3Y
zf>bCD`Qmm6ph$P-haxG&QR`?PK_O87u8Lrk$0GuL2=NMZ3UTxExS4RUwzDd-3N2Mh
zSPKLiw$)alQlakEi?$$9B$$?jut1a)L{fw-#A=iFXJtA7X+xom?JPk|SOj|iHYc<`
z&e!bQ_7{e^!pGupFMPt-ZBNLDnj!ZHAERRClj0B{bLN*ziiIL%&^Sm1`FujD@a=Z<
z-sD0M`dbh2e2p*H&~*;Fq6&%IPn4HYB5VqtIYSKK16ZP^ItfJnVW-p`LqB3!!9|tv
z+o~LwbK3-yIujEN4lwM0p9Cb70oo~V`pQKPhunT*z^_2MouG!>)S{(THHU{%m2Px-
zDP@@ya!LTD3J=--6F|qDYGgqQvEx=4(3+L!>NZl5I6_CEqC!tCQE=jQ_b?fOjG=(>
z`0RRp+_O}*uV4@2yKQ4r6xu)z<|GQ)3Kp9{!I2cqGNfR6i_|?BdQd+S0}6zH?-`_I
zVlmsf<N4q4bJukT<@)G~s<2S7Fy%X>p{Q55CU)^1&^I8OT|cG*?~q5M+8BIxkHF)T
zMWb21wBT_^Ne{2-F%MY-<tvgo^yWQB*jgn^7=5Abh0^8;iv=zvFgkL09E+3MP>a{6
zvVB)B^xse|^dK5JI|8vm(EW0e(26E(5$T$N=s=(_1&~vC*-s3Td;Npx1d9+w1RgX>
zQ0hXIEf10|$5RfV3g1G&bot8Z2LS<zL=w=Frt1LwAs50(hH$;PzcC=_Fa;8m0R$_$
zXgdWl1Zo&qjjU7$v>J?=B^)>kh+fF-oss&^XY=#+CRrccD5C$)kK~_<uInc;5+%@2
z=mrQWv+V1VCqlIzpFWO^T0FVFk<<@PA0a4mbs7IrT!Gp6Vgc2E>+GYs)tL6XqMOm4
z2)@$ENTJ=ayhI^^U}wpXLMbz4jVB@T1bT~(?;rXp#sA+jIwZ^e_Jzpd$j7oDEN;wG
ziUF_;h>(Pmcx5pF*|)UvJYmwGPAT2MISYF)=c1bWd64g6;K4j|>!iFU$*!x|8u7?E
zjITb*8$Aq;MT#UY8JnamygWewUCqSwhUE9~dK(iqNa>Sc@qs0j=)cz~B$ASk$#@fi
z*#Y>3kaz<SFenIsh#(0OQ_z$||Nen6fk>4Ykt`8>k}8@oRLOz^!{hW>Tz27AvCF3Z
z7n_i)wy}%Ug;hyYv<fdnvj03qGV_z~`2Fw8Tw2=%VQoFo7AY2juIA)+*~@yhWEEy9
zA!<w=M^~{5*&bwSQ9m*h?SXh4eH@w_xx)raG}DKv-~j1mJ29YeHR|X?pvp`M=sjmR
zr_G6gLcnx%vPZcOfgL(LVhTp2ZeD~`Y%dV*lmTH^G)fnG5d)ynPL-;!HFeP}+t+<|
zsJ+rMWmW8In+M!jwkoNa)kz_fqH94CC+R!jq4a?QKr!F1c2j`Z=s)C60RGq6Fm-4!
z$Y3x7RteveNMnIIr0tyU3@n-cW^Q&GAKLcd27fu%aWz9Y{bb?L67%@qfWbjRW|M9@
zNs?<hjD-|H<Fm;TFb|P1uuoyDI`3dT+CBl51fd^AlDc?8fQT?b_VL(m;m`>{ni9~b
zprBd6I^Gzwu}Q!g(L)&)N)-!ZtyO2MJVT&37?d0Fvi5japoG0uROL()E{w~Dg>GQu
z?(XjHKDaxBySux?#%*vI24}Fr-5D6%-QD5m{nmdj&eiF)Qt3)pl8dLZl5|(qvlW8i
z7a#gXNDUadc_hMpSx}$_BZ+BJc2Tz8)Ry3~<9%-?I9Etf6#tifrTZdz$80lTo8At`
zEV6B^mkfhx3SkO4M+|W<tUMSBh4fk2E__4O9dk+NLBA+C6*z)g2*1<5NVjiG355vx
zwfJw;nd^KX`R3Rsl_zsRJ1mbaC|@iS1#feRWM@n}1!}<rNZ3Y`rvn3PwyeV#U#fat
z!{aK7{pVttEbqIVNNw7dm6}?|7gpmgTlAQKQRCT*XGz%CDsPM<M;8)KFX2UpwCxBK
zKvZgs7bTg>A1k;Njc8(X4HV*A)LIhcX*+p*mgqUg{d&6PFt!5Xg5rl3t|_H56cZeb
z?J!}f;i54<t1H8DJauPJ!@sZ&e-rLR!ieFeUxI)xgOPCcg|#CX{-p%y&g95E2hK>C
zl={|dB?4<YNOA4((BDjr`B=@vj*haJB4u_mREhw8HN<dma@_@1EUS@(CS1!Byji=;
z-|Et&-oe>wdZ=*835jO?@G>kpP!uDPFy<k0woZ}=%y3D0x|C6%YP9iohp=N-&T-a4
z<oTp*Nf|;$DpfXtW=++<q5!5X7t$Q3x$&@(^m@yLAF&WR2goeAKW134+<n6^NXZ;L
z_&fh1_bbV*kzivgM%iMsX#@v%Xk@XmsYI*<o>L(7QuLiaLvQ^^7l7RX=K3sAyG-#U
zAdpV?ewI{3J?n3gSXxWrMg81`g~-D4-;4e%fJA8%rxTIOR~d-uSr^MMtWT4jjmeCJ
zE-cjFnYbNwzz!m6`{HEkAM2gS_acU-U)Hx3Ius^@K17m(3KW1$2?xTI%9F~>aL~&D
zYk`Gx6)I?B5@;!~03hk9P@z6p5)-wJWJCtFn`>m$_i&4fFh5C2%$zqHvGOb?NZ3sT
zqM{n%vssO!tx={HFe?Hin_~&spckc>5fS<N4dr0f5KH@-Qbd&D0Fp`qBq%vBQsptk
zB&t7oY2O|eDsX8E=K77UKj9!?krr5isv8i>JGn_1NkS@Q2&Qb#;HXNnim0+;u@EYm
zim0sO6g=6OG+~V@A+k!upiAmE3gOe>uTr~719J#IV-%NdkI8-+-^cWyWyBq?hg^O|
zVNfDq(2D&$9$@*$3h&9~6ww=4M@qsxBmFuF4Yam~f-A%;RaOmY3x|m+Kvezoqe@Yk
z1*WP)BBCLWer}@HK|l%5zq)_i&U{9jo+q9&z6uMWE|@p@M^J?uuIPDs1)g`&1d|Xa
z02FYoqvh1;ps6TeJ`JMxN-y0BJHMu6OcwyAP)|D}NY)4^@EkOs)J#3p4l=~vbU=6;
zb}axHy0>Tm8!AcL!RbPMaI&YP<FcH}9KvwOrG++AZIB*cyRfm7F6f4kh0kK2YO{O@
zRaSkn^nJNE>g|(G{1f%lfOF2z`?`J1R7~zzG7HU4l25ECwS0XueVEdSRzJuHt({(U
zYhok~xtB}R-Nv)}240^qSSd<CLb`TsXU_tY4Kn0T*1Ji5h4wFIR!;!nYI))`a!r9Y
z@-Gq!Q(lZ1CiH6Dti}eN4O*w}PLX!6ObdbtYi)<?IHjTIYP)iRkIDH&NT~TVw=4}6
zv3j2vCgHRweB<B1dBLgC*I{om$=|#wS=GT58YN2u)y;GaM!>3Hi#VrzUDR$|K(o3B
zij3Djm#cZSZ&dn!IU1R`!csE;`aU3n++2n`qAVZWe;hPA`>^SPgamv2=~^joA9CII
z1}K7l%z3=m<St|<>6Sy#a>!A%@KAOr6}w`wmN0y5#&*ClG&8uHrQnHNH>fp%;unvt
zkSKWJ$Ipwf$htbD6_D_S==tZ_;YEZ8@!;;C`p@e3)HMcW;3MgaKb#I<QK|AzM^X!K
zW89X{<@y}x;e*5tiP+NqL-9WHIbPwlEDUCfj_0P5wDxWp-kqT1s1Izu6x}pL{y~C9
z;lB^q&!!`Q&reoS9V&I5I!duYh%l4Dpuo@1?XT^Bt>;Uc=n!4KZuvlO>Sg?cfGjli
zgMd8aU)%sdKpR6qzy(3Td**~hltPMlT8juY7{rMj`?uW^Jv=UV|G@^|Z~a6SvMZ3{
zN4|L8IGJh@nxCqGb*7YZSGYlSDDb5dgn-_9KBV#CBh2{y_pu|0=mC1E5PDYHeg@CC
zQy*drGK(k(;xB69NRpo~Du#&l>yS@*djb6x!OaCTs>XvSeIXwqTm=Vekq86?R2oFl
zCIs}P`;|wB9|QyhG6EC?N)R#xq|=uM>3@A_5AfZ%3_Wb}<O2kEdc81_xX&<kx5jSy
z?g(B&j!S#H20i%6$1K{n$d{#eAGG0XL(dly#sP#@f{=_EgCKwq5b(Zj91zf5o?ksK
z2nfOh2nf>rUxh*mK@bqG-II~NWAip$7u!e2(mHU?Su}D}7nSsuMXLtiH=O8$e&C+D
ztpDvR*LU=I5G>=nuoEl$eSwlqklZM;7*e%<+$m^T+X0tfy=3Qc;qA60-xO}`g1mZZ
zcIl>f@#snR5N{)UzP`kD+tTIX>8V?lp~&Ajzp(XBHLs&<>MRecP0M~2>ilfK9@anO
z{`|PZLUYwUa~a&_p7DL+RW}94rb&g?O8MKXTj$c^(U0yWb9_Dh`;Akg`Hi)Q0nUp}
zJ72U%M|(+up(UMFh96N@<T>l7(zV>4=6Syir-d53uG{u*$K5-3JAc`qLBJE#oG-59
zuWm@UT&&zqoUP_1%3BNC%Ny9&dF+3$#{)=vB6TjWS|K%$JUkkPCiwCa=3kuW*$w%w
zyI^X3|K3qn&M=cHTd!sBg6n9fmA~E$LF3zMd;XggPP10=_ep!%{8~2m;vm^Wxg)zG
zn5iSLdFsq*-NCM3@63vu1m&^gVx61mysFFkxU&)2GuI&JC%x3H^<b#hs&l4EUXj&m
z@ndVvRX^R|3!YO>-*u+dsc4MMj`Iug>5M%}jvx{=1eh5p4r@p@o5C!JY+E1oNja-z
zMLbm5vV1atG6_0Dl!R?Tk@~yFd!<0-OL>KlbY(M#SJ4Rs^p~SSAO}&*QAm(t&dXSj
z7ILz|m5o*vlobgI&@7Cmik6HD;(a|82z|<$6k^t#oXQJxK0d)!_9<*I_jp8Ng5=Vr
zkS72l6$l6b1VS=ebc_#NnL>89tyfI>iv>|gKISZ3HYdfqGM(dGj%+=dO{)5w{SRTW
z92GJNQ4aJXHcX9oWkqyBj#>55W3H5fll;n$vV}Qcx%`qjd+O}+vZBH-@9dwh1V)2U
zH|a{LhtEDOvJfyIIjm0LhB5RS^)nRB@aA%;=2@As+bT6V|MFJSl(2#;X*0yBC>9ph
zespMQQOwb#Z!Mv>#M6Gq|K40B#({2&Tn0oZQwyPeni0RDVJK#_P_=KWWt11b`0PFk
zG@{`#xlm-yq0_D{)sc`=`xiq-Mh~R_7BAOZTPcb01D0K{-rbg?MNh3|pU%>r3fJ)s
z{MmwUa7xIfODnaa+R`#mHG=^N{bVf0=?}bO5k3gK6u9d`=5J;Wrkhq^wL?Ar5MFwF
zLUX+R<Oz8F_lLkdiHGOnA~m$baezEx#oy@Ed{zTp6n)LwbP;ITb7E4?jl-L=L)jkA
zBHTka(Nf<mrDv^6?s-&~6OXq_!`f7&=5RmS*^u@F6enq#GBPe9+LMw}cr)48H&YM9
zqDC^V8S|GysEINkk9VMFlNd~Ao9!DLTbYZ)rxc}$N^;VRo6utfty&wX+i1aE6nSVU
zT|TQ;?(VDizZNif+pzz}H^*ZB40eV@&kAdYf-qmS$oEJRegTl|a5Pu;XEdWeqkSH}
zHMR8rlm}P~r$Inw31IRh@OoKt)`6;P4)}XbE3-hxnQuLrZ%>K{3K|MWVun5I%TSN~
zpQyKYsNjFrfkhG3%o^;}AHP1;G3QJrhgl?KP`K*}K27`3OC*v+D%l&iB=}IxWyMR1
z&@sY(pwj@0Lko)w&SRMER24)~?|UJMl?yf?Hh8R#9|H|@0y~cjP+_4zoTaS{6y$0A
zS}!l>SYtcpTlIL)ySqP|J{+q|kXz>Bd%!F*WepB7G(P~`tX7BW&u2WSiU%~SjLFXO
z;P76BUKuiRD!NbHY&`mGhv+!gF^$@?WqfX7Gmr2b*Kl|Txbt`b=g@v}w!_G9$_1H@
z67UC&@!VRwoW>M_#&%nqttFC@>5NSVJNC~054i)0G8~q+eU_G*A}LUWsfm7juz~{P
zxXU~eSjQDVlO6d71CLWbpkH%9x6Y5L^tN25YENlokQH5WJWGu-jy7WDn>j(M;r90y
ziwW!&ge7~n0j@0LpqbH>X#CH+W|w0rwqYbzm*q4U6T5g86WR2>eJyrYba}?oeipT?
z5)j*cM~=P)>wxo^hW+rF?}}@@0v-?8;k(Ppi^~;n--@MXq}z-qFURb*1>zVs-Hxe+
z#)S4-6HQfhL{YYu%OJoa?vIO_#zfRExj4Qhi0e<|^`}?(24vK~aK^ogW|dul9g!ZL
zrNtjwIg4Q`M0CJMjN-nO(+?^HtePeZ{U&_}ld$OEAkui29}?>9EZ-$HBqV9=#^t~Y
zEE2j{7#X`Emin-xU@*BWWP8dgeT3XTOEWm@05=JjRTh^?5;oaldW7R`{Vrh18ygx&
zg;V53mIZ~dHb_Jgn8=)Cdx&Gbi-=C_`irCZO6t)WLqSZb)JKALc(<c}ZNHmx-A)Lx
zS;Lj2$W1iL_ePeYW_KjRe4Y4p`%@f;W_cbRlz-_TY1kt9&EU^p^z|LvUFM!8J}*k8
zPMtHps;;@B)Q&UzB=xy}K6HkmzWk5BS4RyDJ(*{Ksxb<xl4#b&Q8dLNG`+HtK=k5J
zJX)IKRH>ABI1ZpSYw3U#M}|DQgmpZnXgs?lRXmz?iIhT`nH0?+&^XR|h-MJY{7ZmJ
za9LwmrN~%QK_x)bIMFy&DOM?k|ExfvU%F}(s}#*p9Qv0D&FFuk7w`Y{zEsh;tP-GV
z$k!FkhvGqnF|3lftWq&deoS@rb;>2zlha3fkC%AF75X2=iV+KA#J|I3P}!PALm637
zR9r=VrGHHeWo_+!>|FQ=`C)t0x*h#AL_SBF4b)kZ=4Nq?aD4dmG!W<}n3}S3{`;$T
zi~PXhqqZ|P(y9)+i5VGS?zgcvYFi!u&R%?o+=yi3|H1Lrc`D$cZ%~ho`h*~bqmsK~
z_|i`_e=ekc_|i38|JWFKAoi(JO>K2Qe%zP}o;5kuCQf^O9^(06zV%rDyFqEX?4Cf7
z02-3xvExlo+6yzq#YHidOdt;pO=6`IOG$|Nds<Q)q6D%ji<}|xgUa^F##7{&S8BXX
zix}Qx({>=a0#RL)8Hb<@?NohQEk7AJD1yH5`9f*7gc7I<3snDti$g^+MvkVmM8Zro
z9*zMtrycS?pj6{2L!tr>;vcSaIX+}!$pTh@D?m_^4A(>@C!@SZmWd7~Ea+bmG90*6
zG(IavB#i^lz%|d1>{>tl(%FnEhNkfAMscd~pwa)tY>dJedU2{D|KUfoA@sd2YV^O}
z*Wee7Y^HI(t6xs=pH0k{@^virf53j7y8b`p<3Z$KKK9>`)VXUIdZ%FLu@p@xP*n<{
z1n+-)1yvCl|4~?>5pwbxx8M$4CN>nFgBbxSEEuKQ=YrM+;-;2lJv~uTjFlqmYT9=a
zDC@~pjuk1|DBvH5OcyW#OKD5O!Cs|0jV{_;nb?k~P)|q&orIy%Zz2fgErTZxv#k=O
zS&NZzM3JMZ?v=8^t^P`83EMbVnf}kf=@*~KW0R{7;H`lAs5HBPJ|^k)tJyQ^<X4W2
zr%4<pgFL<*0!SU6IlgT$)g_~i2b<Jck0pwFo;E~8k*S^4zRehfF*K_4wLGLR+Go+A
zP74l6g-mPymJvuINPSN=+BeSVD9^&+vR0L)%QIegkk@MCPzHQqbeVa#Zg?;ETWZY$
z?Tx2m(b-dx827d+5LAZ&CoJWtR23M~Ss8WV5XHu17=p%QTK=-MB9l6?k*5=kMwn%d
zXCazp(u9H)8rjSz`UVC-+u`i2_;GAA66xc~BbF9=S*dIj)`PSzOK_&?(ed;lRcp!G
zW%{+O$N)96xOVMt+F0gNU~sr?u^FW<Wf52k%rex>_}zxFT8g1E%5)!lZf-j^4d0TA
zr8i;C<D@c^N!@8}4Rzg`VeEqYi*1<$y;osu!{PV9UE5XK0YMZ=NC`6Gm>DpN0$oCd
zPCp~|9s3*NII_a~-RqGVtSYgCC9CX?o^4glmD;{l8GZ(d0iVOXL2)L%bCXUx%Xe2i
zp7u<P#BCecBn)1{F(%Gva4H!znms*|6cf2cbL~VU41Ux;BSswDuPPiCMkdN;ZBvX{
zyNW>*S2j-U?GVZ=OCD(?iis-oc5qg85I3GWDHwbr*tu23sP<QHJbA(u$tk@IH$*<&
zNqbz5K^0#%6W>}W+Ep?^MTgbp;2Sw>lZ12lV67aG-bPmy#(Er4mI*to6+g_@!inBi
z#m1tEmB}Om6s_Pi)Hn1^Pj~E#_E&006*F6>yoNa-lDD;P67Ao2ER&ctOOpu1INf#y
zNvUR07Frv=d1TxgbQswvnzd0%<M>)g^zUk8a|11~OxSW6vubHgV<fApPR9BglFdye
znwnX_Ms$-&aE{n&49mkws#jW*gv3N@2y{ge1DOVA7OO04xQNKFaS1d63$br<a0=J}
zdJ%Ivi5hJa``WgBCgeW~PGW1*6|bL1;_g3R&H{IzU+eCR<v$r#Y(ymT=FRz~AaT3|
zMyIMQg_l3x@#icn@`MBCre6>Jr(Y~s(VhbtiM&p^cr3g8NQE&U2fFVlPG4Wdw}$|^
zboRjuz^Q-Jc*4cRyQ+{$J_?fJ^U>(BQj*wkoPUp_D6l{eQmk=!O=&a{6g`_HKTJM1
z7&)4GUZQ?|wi>-3`?-0L2EaA_3|r5+Q{OV<jzHZgk2E6qvpA)ei1J*P%e&e|4G5r}
zFWRIrTxD5_oPBF8nHG0>YXC12f(hDxv#p~1Y&pr&1v2Umr}8$+MI@$gAIi4<_4%5m
zu+f44^znW<yGl)1-R+;89yK~Vc^keG7XBdoj5PevUr{`L&+_>+WUude(56y6Qq2FT
zeUqc0@DLz5OCyjQe0wz=o$mj;{@jC0hns9KIj}s{J=HNk94awlH_$ee&zjS6ln+Uh
zHRHN)62bL6j(%!MaUL{3W#}JS=jfsBLPsn8C<L!JjbGNK<FzvgM)Cx#h|543{U~!X
zNJE}nGmPS@8bzTzVuLxF<sZ8v#~@vomw2uGZ8%3~2`Eh^0}PF!!vr(L1yp#J8E<4t
z6$P3HM?OH293}b5+tId!@wwJ0jU;lI9IN^xT7SK&+~?Q9e4=ac^hY`eb7m-H8Ih^T
zynHODB@bnnN>rwMQ@oxW(Z7Mi42AJ!PwhV#u??wA4>Wh%ZG6{V*<s!DaQM2MCg+hE
zYZaR<0pf9k#yzQZZTEdNel9?7+vv*e4#Sk#zHDMbAqRs;6<`LvzYRT>3qxE=VJIt2
zs*1;m54(mlrKPJbn3K~U6fQ#p0F(~gfSb_&TA0q(5MLVv;AwtrihOv&Kfb<G-v>4>
zA|4Fyjpng#eG+t{-lHs|i`w>Js-gjmf)T^iajf-Z-|Bec@$s@J2CG$yseek26(Cnn
zdIz2!WM#~~{S*gAMMbfZ3D(mTKAQhl;j_d}`6Y{E&l+n~YI6RWbsW`Y^`40u_&ZrC
z(I-&L@RC{o#opus`>(e}Eo-bQ27`9}r{N+TceN@UX52z=Oe3bgrgG$}R{7S8MS7m3
zDvq%8*5ms{Xf^stI`u|FLb+a<EQO+%zrT|aSznkNs{afX3m2a(#VGfH$^+Fs6>1E5
zv4UFYj@my4pzxb<_4WL#il%?ZgCMHV`zAC!v45HcW5_^$_0L+pV;9<L;SBVM29j#m
z-De7U{<T#_oR8S&Aw`%b@#60k>DW;$s*3$;EbyMtH>*X70fPM0D6iAIapk3^hDrlH
z2m$oMdD9xopU#=R*K$eEk1HAv`;`QfGr0?a^xNutq3`mygL!K|vaNXtue_+E;Q}SZ
zIG;!;Hl;OrF1205tKXJW^N?Gg^;{zAUvZ+bB!O7h&Vwzgbmr~bj0a+65XET<EX@*3
z`bv#1SS~vtCN6*3Ay=Cx8}aU^O?`TTSMTRsED(Xrijy<)cQvgow&EC5UHASW7iY2v
z?u#7PrOobQ*UTXy0!%<xz4yeYJF-%&NtcEv2j`?kv%_8;i(J#>y2@!d)*_a~-)Pq?
zA8UhnfX}GVsYE(f@q(HC_e;*znirgq<D_MIU(kZoaE{iUWk<`|AWN!RJrIa3F8uS2
z+UGO0Bit;5xM1B1Zv?0PqjTkS>-h0o?%(Bk-(-*tqUf$E%#R!99yISV0MD*J6iPc*
zyO^e4@wMH1Lg2C}VNUGnO4`pV;%LEy1Xsym^^V13ZKiU}lfcpSrJnCmCdsIRm*gco
z+c&g+PSv&WZ<Xf97l|5^Fr(tPA2w4cx!q9C&BBQVXM5^BvG~<zJ%p_eC>sf9%Vimc
z-zg6^@bde4Cly^Q*S7FuGvH8+P`$->l~Lg04Cgg}a}O40EK4*wENho_gxmQPY3xdA
z%GpyX^rNF;WV&eHD_@M2e~YW3d8NKnm^e-`)<4ypzKoS@+;Vtd<MVk`2G6N`y;^X;
z0ELHVlR?E_HRJ0FrUkmiA4YvWR*4cX_VrnOFUYdO_3ir25<J5>xGuXA$sB>=Bm70l
zTNhak?A4%Ie#DCPv~G2?;1#zK@N-UYkrkaT4t-=%%s}7Di6nF%F*W&I+5UN|)_EhK
zD+C@1yr0eE)%p82pSvzI!rW(N&y~8=wQF1dk44?3mlI|`XIAjQYwP{q{Z!|A))XC4
zwi<za=ZO2(7%$(Cgwz_=N+Y{6vXnec04v^=w!PkD_2N&i4*5E-JH7b$D0GU#3K~no
zy$XISi^3-3hG9^-wPR`+FPDv+mxOlk3V=BRi{o<KaOlL5>p<2ha=bQCXbn@+SG5<d
z{pabG@QW2QuS!^@N>cjVLPb8SdkBj*vcK7@0|<;l>OcKV`0|1bP1qzMCt+RKBqb;z
zMPO>*&PC`4hnj2exZc${>}YN#oh;GWNiy%5nSoWDBR_w5E4javW`*~>Yflh^huDft
zXod`hzNE_^5ZLwxEO`}dhI6Fs!CCR1J#YXMAH8_$2lo*d91JKt`i~&ko(h`7QP5>S
z8~8QliXRGj@~o;1F|dqa2$11GpUf00l<J5#A!iZt;8eD^Z7z(^I5Z}A=F|4BVkX<n
zq3qMPmuzy*x8<(J>=3(`&C4=jffX*+)nviQk_Ia`na4jvR{a@ws#o_V_o}1haS*QQ
zs`Qo7&YyApT)xf8523DOO(-e?oatwLNbg?`CQ+yyLpk1U=xvlwcuc0Ku@xk|8dU7M
zkxkmWe=0B7^c$RQ68-iau?6sfbLK(V1isipQUm<9D-1YV2%^Eopd<+vni!BNksOhW
zlk?dn3ubBAm@_*ijBHZtm~EugzqN|zdBiu|eUkdX(t`dyyqu>kNA3_D=M(h1yc`iL
zEL871Gxo#iEpKFnXU9zg(H=7uPxK2^=;0KoCs7rFpqs=rE9-AGd=QZL@Gb!tMbWu6
z{JvA8Q{7E>xpzN^JiK!It8?;j_i652Og7@fZH_1YVlQ|*wGw<Q-uc!#W}r;w#qKJO
zZSt3pWtyOkQKp*+1;@2&JNsG5V8kJjjW(2LTTeZBOlcV<Y=M&;W+Ia!$|B9eXJing
zBaL(GIIV@&D!f*@Nm4Q>Zh;4UY+hj-@KX*CAtrT3teA9Mj@-Jo0SQ1xM)D>fIF!o&
z@g|(%68f9nw48>zD40fxd6qb*9=^ZNr(^Ya+cQPR=bgpJL${V*ujjbOp6@sf`B&t1
zZy(J$_g9?Bs#HMLBFW{$Ge!VFQQ%Se+xqHtd8xw`^Cd}7x+<Ry7!d;||KBMoF=mOI
zy6KJYv;QffrOCSt7El6N-p_mpGC5tPNHnV6pJBjBH{E_hVZd2eqbYri*YvIS8AmeS
zGWqSo`Rv*Kw`0jTpfOrVIOpdE+QM;LM?kBnZ=m3mk7wlU>Pd+C=UBMCh0^+`oP^0*
zmF(OHVozmY*g~HHym{Wd+KEBt>a%~n7r^J85fC-kAK+K%I}@@U)r1`j%lwa71r;<)
zicCtpm6UBg2Kc$ozqD_U5{qo5OZsblstHEdyRYAXd57&mDJtDOgK9j3=9mkc@GCDN
z?YOq+(@i#I?^Dted$Vlwf!V<)ADpu+jmP#kUdt%4NZHc3k+!*L8E_{nq9BpPHHE;q
z8t^d0Z;5H`3VUr+pl_R@aUMZN(U{tIO5iDX6GxE`eV&VdZ^M9B{jaBA){ITNqV<O^
zp6Fw_#JROu%}doC_*xGzACy!YpYGyHp`egj#!OQ^29;VwpdP7!NII_^p;DaFbE#b1
zpeD<w?HETUq}%(Q0&r{vfQ(5BA}LrXL=A&gmO%x<kx+_A22{`l(k>}}9E8pMshol+
zKO#jarp>CN-GR5(i0ui7u946ml6LpJ_v|aY4~bVI-yqn$zczAz_3!MN-sn8-e!|{F
zP2j}^nV}~{@&D`z-fTbUHy@?Kclk~gJoQD6#`_0iVNr!-_Xib8QK{qrJUR%0Hp@Aa
zM^sc6QaS*&4(Y87$J#f2fRrM-1N!H^QbFxC8u|TUn1I(5VocFL*;E9kqtNtVY~;kB
z7*?PzYk@HC_fBEqOxr8_6hkBGwaeWl5eQhE0B4p6-j`$jA<-V$4@^Htw=SN5PMev?
zLEX|6*{{m6lwUcO15!lVZS4qsAkn+m=CsTn>arGBh7{SoxLYR7oN>?~Md4SCkN6Ho
zrtaU09eqrLdDVh#l)0o%tjJgCq=5YJ^iENOYbZjecl3T#&>BGsIVm|=<c8qKyE5%Q
zK&iaB&@QcpCUSB5#be%FCRc8hZ!Ii(2yXfB6Y;bC0MCI=PlA?qDrF!?Ve&%Z4yUT}
z%S$4^&vZ}6h!<R*p?l~bN(2aIe&P2*q4fkJC{r+te|)A<h(Y<~B^md@`^7eRir~rN
zqpe|Ixcggjw^ohGKe7*X9C8RtI5CtmeE;dW*F-r!><Dv31meP^!$mK=eYT!QAsh_5
zMD+-GlIbyak!jD)7!=>5s^NsF0BhLDXUn&-{!NtXci})pP0ts)I1nlFzwh*W^RM#s
z9=8L&5T~dcx1(|OaU`bJ@Ai`}$(1&e40D5`VIblj$J5j24)UiYtrH0&!H0n3(4in2
z;haGZ4kqN6D<t3Mz|@(|%$lPWMNHqce&$W{(}+&!5f&ZvYdh_Jnm`9c-p~1*rTnfd
z=<}<c7Mhn&om&^SjJ@^X-Zp?8A4^j4j&)QoBx7WnLDqdqVEvZSF(7{~$jT*{Ue5Us
z7xoU6CG(%?9hhTy0br<gR1HV433^+z5`Ga}EMDw&zq1ump<^9^w0AGz(hq>lz;#1V
zQu}A%5l2}tDePqxRa18om)XN^bYdenij$DaJ*mH&7zWI`rvk(347Ho|K;0-`pO>PG
zE2owz;u(Y)wd3fNwy6W8_?D}%$@2A7LmnwY*sx>21KczyQh-?W2~g0nzYP?Fcp#aX
z5_YylA#>8!Y_mho%Km|1xffRAO6x#06*c)`s_|l#nicp_4r$oQ2xe<yZ0*enw*MeV
z({gj+rHRrb&)_lr+en^~h}x$!{6@a0Ge>k#9w;4}O))2{YL68E-N+^?L&X0Dz?*6m
z_HWk88hJs0HZ|&$V_xhT-%3H2ofeUu(3-JPdq0VSDsw)=3a^Ow$)>r3Ttt2gH}$q0
z@*or$vMKB);L3$0;YC3qKB7uQ#L~nj6k-`GE-ktkJ07U3=v>5;jNxf@Qu*Kwp6SMf
z=xI<}pg>`#;0UwckqRS9xOVPumUT!SV;j{Sml}JL$VU~{*%L;?b0ewVO>7V>T;_E#
zkw|etjr$hazzBCu*pcvC+_A9m(H02s#mpnV)cs9)dWnsrh#bz|aS4`=BiS+jm|i}5
zcsJ;l_mE-Fmmy=OM)<yzx4(?ya$2I+YLBz?beVRQlZ;*e+58iSa*R2)YICa;(H~~v
zgOJpB+wVed6P~$+C~pYu6`}vh43)nFzx3czD*)H@I6#osuOc5eO^QmDpigO{5PT=V
zSpeWs+Z$IxB?C|y9!_HA=6UY^#_of|V?gOSMF{*eeK>n3wcwKVCk*?A$mS#^)iU-J
z<>Oel?a)-Z2QXX5N9D{_s`j{K^Gcew=9ZLd53^r%uvAk-L$;FKY3yFsXr+|bvG8=7
zC?-&70#$`*es+R~;x}@JriwJmY#{h8n`H$6HHESn@kZ8GV4YH3p<DQussVTDwIFhR
z*Uvu(!LHNcTq)1#nZ7Ljz<qTRQ5Xx-DIM^5{g@Xw^nqesGDGLDP8Yse`l>?Oi%JN1
zGq7fXa3Q56ZWLc#MoG#h+g@RYIyA*5ddq=lK7KYuNt{1^D|BwSlKz;|uNm$B-Ao3r
zKL|Z=%V;|>XIaDf+$WA9gwnpjq<6?o_-!bX3{gj7`rkj8XwZTg4OI=qc*YoPEj}3~
zESiU({s4On{9$kjF<PzJh~Y2uP3a^M!yU4)8jl-$^01daZ%Dt42Z;toTfJQ4C>bG%
z#V{{7Wdv_&8fkbIf|IzbfiV#G?Ac?7C5Hwt(46-LbMDd4#>2If-x_kycnFQf8ri+9
z0P;t!wa%X{JQVJkfCBn}9_2~m?f2`kVpN*I@^o5BQd0SYHJka)9R+iho9C$Kst?Ow
z_)D#i>c`N(Rw{Z-KJY$WuWotA&%NqmY{ffBNjZQ;xKdDJ#2-mr>Wu3L@G@TRmsOyA
zt^*y_p6%QCj+R8<tY^(@-%Y{eI8@rXABJbXO-B~MxQuVTJP}#S6$5j}_~{ae&86<^
zB}7Y;N!*#`MN-!J82ea$`|SMy$`Fsm+IyGKc)DRtg*kb2<lG=NloEl~x_WHFdoX{~
ztz5-9?RsOhroj1BWsY30d${{Fm)rJwo{r1RFe(u(pG>fH8ez4r6unUW8N3jaNIL?F
z&<)k_#JHcAwfN{Ar?m$TTO2X^2WWT8ThEMvBd|k!;=`R>82vT6_3%ER^er%JD=3lz
zM)>DvFeK_hspeh)%^Vp8^vsUWd4sUEzXo0s2Kqx3>HB-U)c)`j#7b-VL@Gspe&dP<
z27wE8)1L<*x*DuZ7R<EGJsOq27XVI52u3<-FCdJ&ZLSP92AekvjMc#*pF#j8g+gD!
zbo>Q)+R+9_)2A@V{M&HiMyGLPSj;+8^p;*_liHzBP~4xC#h{Q$CPh#vf&##`_rs$I
zsKmz~s#oUjjeadHShO5BnWLa=Kq(90CZ`Yzov=ofBDl=j57cPg9n0^2zIq=&`u=%g
z3UPRE68bBuY+h3-yaIHY%TR5+>EIYFO-4<exVwL~dx$<qAK|=!nMXI}D%1FBjkkh$
z`Q#)Lh9D*y2?8R=QALxrE}g$_b{J7UzHx3ZzPXleMi|hVlZeruCBe7L9qt5}!%0gA
z&$O=eTgkdwOu!v35Vj2~RM`adFO8q{Hy^=?EO=T6c1{=kLwL^37xYuS@%Sp=KuhxY
ziDvxxdIjr~`g{Xb$740@<}T4`)v>L}XO{e~lKk>-gu74%!G3@D8=EzIArU|It0&~^
z3O=vg6$771Stx9NKYklOae22Tgk+U7bP$RMoQ9oPSdYz&08_4G&RK_V&P?Fmx)EWK
zP%nm%=mcVW6!(pJpGco5&_A*TNUeur%s=AsI^$JliN79wGmps*_r?ur)HG_xB~)2v
zw2$ikY$s@*`)_frzc3K9GG%N)JhV6eMr1RwnjOu-Le?xvjpan7bTcmWJITa|KtwWy
z!&xFg2`hL!lgugcYr*ov3%GOlEo^H{b}LWbIT}`ZQb3X2qg-`S&i6KfwN@`4P^&k^
z*P*lt<B{%T3a`}8)!1egYd6znyBu~8IVFno<BmYwA$?1RGy@ioaEG&Zpl#`k)AI>E
z49}80g%-i1i2uS!f&od4G`b@oIjc!^_KZStSaG$7Zr6t_`uo~;a8?Bp26<n&nezcR
z%|kf8i!Gr>Cp&yHV{@6;cdG_=g8al4c^b>PDSfJ|<8TN{pA07LWb8j1|Ja?u)WM<p
z$!dqH)wVOZP(yYS!J(ugwav$|Hf&y)8Be^)ORxA$xYy(4Y}a$Vasp<wiI9YPQ}y8B
zr7;?5rJsXBc^>Ee3?^~#D1+-<^)mxt%nrguN*ZD87CoYa&p&Y!`udLgW4Zm4;~mnT
z;4O#mr{pjzLP^>~!>*a3Qf3X*-HxNR#7!mMJP9_Cew)NIzF$=91R;?^EQqw!vG440
zR%8KBVWrX!8EKg$xT62)BENf?P|KV!LOb;y(?eQga#aD<h$mDBnnTji*?uj81}HE>
zW(TEZwmn!FuTEsB07+3bHh!d0BMpRi2iELD{N06v;xO|}Fu##y|CX}m1>-1yOg!cW
zU<gGUeW;uUr6QUoWZ_uF%Rs4^b!vHrE)O?1Yfw46D0!09Y!Amj1X!+49AgE%%Ia@U
z+;Qi=rTyOdmDuz$JuTh){O&lJSmsN$>6R*~_w^B-6c!UrLNi@?Q}n^i_ugYIhWy5|
z(KZ?u#}GAe_vcC7FEY!+Y%1v1r_TF6EdKKX(-=gdP$}$_iklL^?@x!JO5p!z!TBY>
z&pP57a4upm9Ab$<?Rk(|-*h$N?a>y96n53Uu~k7BndMs{*StRUuE-k9A(&*jSl27O
zZ~<q$WzeaI`4i&p%>IM(Q~-cr*1kG@aY1^^G8%MZ@y*Sh)J`(ld9u&!fh0!BT|_|1
z*oSKN70j-3a?-l4QcXy4f2uI5=bOYzvG(DAI}{%XVRo{ZiKnpKP5I{@6j{oTAxf%A
zeh5)aq9d&^UrEK4jgBFxNJV~h=bbeeI?lKA$^a2R5Ed2&hQh#7?7)M+Dct-<ia8-9
z2+r%)G;VNgjg7BQNOJZU&l7!Syt02zoZfJ>KPOQ@;Vw>2b9H6gSARE$INTL8YGk>e
zm5CY%#fs%$x)dh=b=P1^@|qb%3REnG8ELpdO!EQdL_<Op;+NGE>kJS7j+^)k)mj9c
zGLCb367G3RI-c2^HNx`E0ttou6K5xmCVJ3fv4lL{vIEnUD-<oXLgs<OP;V3q+PClR
zQEtG-IsFy0jobF12bT3B(pB>yui=vuwD0FAxhSdVq9_wYn_WrUSIjcBXeJWD+A1&Q
zq^WW-G{y0ha7v>A373R{%p>);PvUjcg-2BpapGs+aSYpL@bX$6YvPsCA71J|aI$8f
zj@*|l4ON|F)|pf5gm2VYd^t=I5Md<T6mR2*f;i9JP~f41sab~mJl|6X4rZz6WzFNl
z)b_Fc84ncRx{zK)51jmwVOgK0|M`4-wtgHTa?8pq<%0SaNl$$1z%*B$W*6G|dFh`2
zsK{e1XH^tpR^U|qY7a$IX88?<XDW#_m{g|z{YgFMY1SJg=7qkM5M`asO}rc)gJ3q^
zPVw9Mq&Ds|aFsVrsGQ)YK-J`9ZJnZ}%utK4Yrf~_BLqMMx@)g?a&zqD^z%1SgH_4=
zZG@3k?V2Gg9{}3jb&UAfNKM9LOKvJfmSJa$`|YshGCaflnG+l#P4r%guvq8)*Ix=2
zA$j}Z4>4#>m8WqbIKeI1BhOkYLG-})WMM4MOk6(G05Q?#AQnA*eSOXLC3GBxHD#e>
zHPjI}NH6X+vUYvo*hL{%Ns<5T#>1XAFzMICnI+N|6`yi^%}q8g<e=l}HmI&bop5`u
zerom$ZzAJE^_I-vK(zCGX0!gUX2ekUJsd@<LU8VioLD@?Y%O`CYk5cR+m!H~ru8a?
z?dEnyo~=i$8_j2j5-^T*Inn<>+}rDdNG+a3;-~BeUD6}Z`nOE`J*Pjp9#0I4*<mre
zO>ie7NoZP=>EJ0M7)UgNKi3aeti#-ry9g4Y*up^xe#1F7jlDVJhkrwF@xeFhS^JZ6
zd8{~)PlrTL5s%Ik;O5+f3Os)fK;-g=(B>{gQgE#(nK;>{XQ_*UsAfED=kq{w(n>o2
z>q}jokzbtIrsYhXP@i3;klyPecCsG4XPwsYJ;xM9sYbN$IOG6nJtcf-3_=7>Sfh=^
zzBo(iuLDyc>CZJIaz@yb)1DLkaI$1=lBc-DKDgIYNQ3EuD3}RFN`N^=t26P8@MC)D
zwpZ}x)pl@EdKK@2mwPk77HCNlqp=fEK+0$fPn@H`B$wpRKc`L-;uO%dpoj%NK*~4X
zFgE$lpj*$S1Mh<e8V>9`JW@4t$>7P@yLp!KMl;(LC3@DIw~V3NL~`4|a_(?P=!4FD
z{T$vjLe05)y0Yn?YQm^e`B5UYBDIEQ7G(j|Rnlb6=U~KX>{D+`9*teO`+^p}R<;iF
zgw3Bak$lE-B_rK-^J>jnLs6pjo1jaPfBJA!^nn$jkgt@BHs?SI96zYg?Q9kH>z^t&
z#xA;01A^j%7_8FLs!%06*Ek-Q?m&}-JK8kr<1Q4#(*<2q?!0v01V38Y^`8kz?nB7-
zShGGC2iV48cdcUd_*dSRfw`kyyC4N{Hry`%1Gb>6;}n~NrIG`&oOEd#$(1%5&=6fU
zx6QAKt&2TYEA=RQ(wplSIp{6wklGRv2cSf#r@&1(q%gH9o^%L8^W;X1dug1PdD8TO
z^9epe&u{s?S0aBGk4|v{$hq#J5?3!0_6MCI<f-ssFKrjvpv4Wn6cn{Zlcwe?G0g$u
zBmUh4{9L^*=zO<Y><RSqGU@6LW!w|ci*fiENwFWc<N5Y)L#5_bd0gR~ud3pXfj2Yh
zM&c5HX)GIMWCtvyF$=B2O!6OyBw(X84J9{w9xEM=o8BFUba<Z%yi_E;Xj56Um1LlM
zbK3S;a}snFdTrhM9(lc-S22bEMOU^$5{SYzWcY4k&}%19yIklFu#Hz^5>XkbxFsg8
z-o$?JrqQLXbH8?touK+xC6eoLe){S~(AUt~8hf<XcDJH`+ppBeydZfi$Zz)2NpN&E
z)#x#eKV4QWkXU62N7iC==}B$+lQg^Gu|iqO74Rgwvp@8kkO)=@-cKP3OSVHth#{7U
z+*2fli(s-z@ZlGgl<8t78)}vj-YQOrkK_dVrY9IM@dt~>OzF{{18?SJARlyF#AtU3
zX-vbb%u%nY&bGCJ6|MfKr-_E;vSso1;{@VYL-?NGFY8EDG@Fq)VT$PLo(7}V2C8c+
zkzdB$Pf~R=?Z%z^30xeZ<u{5C-&U+mFAne+-U>{-rcE>*0R4?Hf<~vAn|PP(5XXBf
zW}rqwO^&#d$0IJ77($&f8kMd6at3x%?bgCj$<T3H1;0XWr+BCa^#_R^#mCm#6Dv(!
zJBc)n5w6nui#0RQ9~E$y=qe{XqZcx#xU&NLQ~9&tA_}hOpO)+A@HiVAVw)Z{RQ9{}
z<@opbWKE66b?mUU;^1KHdwg3b<NUvj83ZG*qNc8B{hUy6_BDV}ISluCK0mL?c%5d2
z>Iv?`BwRlo?0DkVoeZqxP&pA52LQBl*i~ybeDD1(OIE&>Scw(j*~jCvVC^O_ii*MU
zPMFF2c4G{QIv4|4c)oNW_bML0qmxdyR7HIq16Gp6o9)4k9DgL>&1WX_kyi@<oMPc;
z$?Y!o0So#kF12O4T_d$_wRYt&mWQ=hWm{xKXa+1*@)ffz_x2AjIH0lW{UFA_Rmr_-
zex+*EhGN#9a<JMzsH)CEVf)iyv1Dp9$@^6??K1nJ4&+W5o_=U$k&9Lr14~E7uu5X3
zUYC3x(UnJ#)1{M)u&iWXDTdoY+Cm^DCX&lPmA<HCH7+|3n4_!Ckpe0kIh-Ys%e(~*
zZi{s#5q2o(J3!&xk%<r}DozuI?d33)EJ)^<J7+x?vS9a-1t+m#vc_&l9jHVi^rvwX
zl3N?JDDn=$M+SS;#+9!x2GY9WGiYU?laFIqW|?7<DS>IsN~Fj=mhb85SzlJfhjGPl
zv6|uX=d4AE5l!p&W^$?9>rbNE$7W(1;&cIYYVmw&#^Hn^MRRY;=Gk}*F?>|pX?Yw&
z_UQd{9i?AcPe+eVxs}Me*`{o!)DrB4bgq1lW@nyW(kK{vG%T6|bPU_U#oVLAM3J{|
z+9NzcSqj0dL(j02bz*4OK^N_1)<xw^$$ysY<B;H)S$0FPLwDSnhu~B>Cg$ts``0%f
z10t8df~5bS?X`gC|FVI;3;MtG|6hT;eij`5`Q-N@-#)FiQJr_T&)lA*_!YluJY$3w
zh4(Wx<cEy!#iXV5biOJ>5Kj!HNEmc=L*F)J$?T@3{>ADsZbRx_f=Xk@6!5BEg(iTh
zXVtF$6HUq@`K*(gEV=%0wR+%4JF*ASTHTGBxiG_=FB<Ez4$Pq_8;!faj!n+A$J5}T
zGRvn;K`o42708rg2l##MN@0#oCFav(H)K66J-=JpAM*VPogk779;qi(#@W1R3Q6I5
zoXsNl@F;$|)I3fhlp!ly`aB~r-or~MCsolrk(Uf@$NN0amNgk>%1wlZOe=h?IFh)b
z>3-qeA|oehI@~yS<i-KtK(twubINRVm~V?f?=HaM><NEkH^-Uu9|?IzSenH0(wh9B
zE!Q<#IwQrEFamtf{xe1a7%r-cK$uz!3eaD@Hy%yDwie~>`lDP*B&ZJY9|;a7VVDqG
zmpMKdd>m>@4t2g|;WOdPcl=Z{M?Pm5<t$1SKesbe6DBVP6A-^F)r7ze$`sd-Z9myV
zW#2_P5(E=q;m#YNZD|*A#R^G@uktGvvCj$jOGV=fw5p+zH=dq`p;XRC<1NLF^b@NO
z`@Fe!vFAA2_HiEY(uOz|aj8=CNb~zF{3>8;X<Gku^MQr4Za_tTw-6_6cZiRt1~>8+
zNT^F52A>MdkQv7{GMM_HSvzv@pPQhgSA*ai=bX)HNF7sIqr2;o3E%4~sjZ#GaOhr0
zuX7EhO&XCW<K!<~{hUH&g8Ivr4+;mZ3^rEI8&^5B9EmaMVr(ZA*~?owlUPMapim^*
z{3y==a=A({q9s0xab8j&{WcMVvQ#ac;l(ngsv+7rZihuztLnS(?&HRh+rAaho6tat
zoFV)^r$}<R;(k}KI%*C}6dC{NNY~J&ZzEjCy9G5cWF#zhSFasT5H(ftP4_V5=deJ+
zVnP9T!Z~$ddXKn+HCz)O@akrj;MWn}FW7*(>H-G)!N=2It9$N*6Pa`@iNOq^<{VF-
zy|p^H4%70G2@Vs3FnBBPoi_9d?z!F;ye`hS9S87tW4GD4CU7AkR^R@PTLl})la>Y3
zb>!DXLvf#h;5)DWlqPiPlVPt+iwst1mc=x&kucV3tYUK6cBUHZnUcE~0CvSjOEP3l
zb<9eC;L-*P7!w~xR;f%(eV2MMo`jH}rAU$`xvzqrd&XZf$Z;v+`{ADh4dY6-$x%W`
zDa5s&SDr{}0XZiBb8nh?o2m*6a5NulIYY9`6Vi^Apev~B8QjycY1704hP$ePMw)%H
z!k6-BPqjeE@piBDRtYtU-t~L=HFY*QRO9oM(29}GW)4u<;H`<bIk;^w@I4iGeqniH
zx5=YUhO7DgD7DVjM21kpL$t7Q#u>Ca^rsZ!-$MQb$Yf5~eh!1`2Oh^GhyX2%rjQ&M
zFb);8b1Ld|MK3lyvf6&Wrt$s|x6&vzvs}Mf-adlmKZU2c)03do&;#J|w!ETS`uR`D
z{#W}OV|o_`84<&xRbxAYGwR^sn2pH?rU28rw}s)mv1N$`GiiXg<|2Qo%=W^T;kk;!
z1%h*Vsh>CQHst$j>FXxSW&*ND+NUe#H#UVL)XCb+5D}_bJ_1$cV3fwEDLCciysy+)
zpOIC+)>ks^AWJI8Y?trSD+m%i`3hQU53PavHLF*@&YY6sRS7TPv|bDTwVjzkRI^N~
zVEQC7poTphYe=|pGu)Fl-iX-;2%%B`k*&}d_hBZWeJlE{6ia|~btj}diIK(w8b`?K
z$YoF%8Eax3ZrU!NBxd9=Jb<uY^N=Tgr14^G$WxTwyz*-GbnEPGG|IkW1^Mq|u5qDj
zJW<w1D|r)6Q2ho|RDQ%!z8#ACG|4jS>!~|z+lln~PyI}2aFj&dy+ju8m5U&BjE$Lx
z=TcbCg3|`1GLDrsW!|40KMaRjwKiw{yDTQ!#qoqvakbjY=_7cjZvn~fB0C1yM*eQo
zohyhDlSL$U;+aR1!c!~lt%*;fCKG{alep>6%ehp66U6M0oFh;qf?dxt{FCG9mJo`5
zwZ4pEE1qzd%sTn>#ieQ6?iA<y5QiWVhBDT9%zyv`;9~jyLYsk%=Hsg4;}-CUx#bK&
z5Rd9w<YRB4#R)+zBeI#fp{~t1fx(A*sgKe5%`@ASTl^1#@n$p1qcV2Tc<_w9akAX&
zyvWn75jNfZWvYM=CR_berG881I&N4FT6esQE@OsR_wm$^EfusF7#RPo-6S5B+FFi1
z1-$TM_a=-=rx~If^5GDe2>5SE`C4HC@6nIanSG2EB$Idkf5eVLo#<szYc7A5t$m`-
zDjzOQYvI#d>06qY$n4FDlZFQV>O(rOWbgm0W*_dV&uPTU<<&}v>=501Sk>VcDJqq^
z2`%`@+Q(8EYoU^ppcI-($*Ghxx<sFAaHP}&I1M49ysk0y8C-Vn>{a0)tcsa&2l%W?
z)s!-lOl>$T2lh1X-mGh~R}k-Qvnq0ix*D5H2|0cnvMtRKsoPPd?E|<;gk6;?)s?SD
zB*&;GK$+BO+;Lp9O}NB0ipP<ifqO9>BkKsAEw&z?<eDcXyY4%)3wxG{UjnwsuY1>4
z6yTdshk=!u%-Dj|pcF-RFKEXVO%ZlfHEHUeR4ZWH-kvpiFf>a03xMDEfk8vt{z^_`
zwr_yb8<C#$o_aAx<xaJDbc+?P^mpYZ(i-*2Ko3C0*=MgTvi4@l?0Qa4n-}>rN#qS;
z%L3d3GQP{qeE9tohcI1o;>X@s=HM`|)T&D-P36?A>9-xSU)j<&QV2lTpnakZ5%`|*
zYtH;F0$DmYr_Y(m={JKWwB@RO#ya9}+qp`QDwAa>T$JNHo+N>%%S4^(2!sdV;UX_>
z9X6va-T>XjWRHanU_RJ(C{-hOij2a-WJL=j_*HG15~ZFssO>ilPncBM%zC=`ktE=B
ztJEfJT&FM=m|pb{q1)Y*G^mT@V;1zsV5U#s>(`L#?O4JC_iJ-ykpMXIlcijYL?NK}
zS>{rc>M-7l9x1eKxy(gK`$KLhZr8xlvi*5B8eOYg=c6!2Vev89a9F5q|1tirnt+_h
zcXIA~<Y9QiEcd7aRdYcz6$DWf?H>-bix9Z^1~a*E-i4+}kp61b6hN{PYOX&#NNDL0
z;?}feqtFRKL<G2VR2TE!6%=VcYjJW=@9=Be9d}!wr{^ESqg9J0(7&zTaPy)N|DJi?
z7xbsK-g@kj&gvpP%e)u~!l2z_>`;#cgZaGucM6t!wx2%|OP>REumjwF;BY*=-H`^7
zq|nHS(Y_}GKD_X^Co{>n2d4@eA2uR)MEG9AxEl?o&V<%Krx;vBIG(l6_$uF3eA#oD
zNGqXE(zhPP&88q`&<DoaUDMLDMXImu<xj3=WFTP8ArK&7k|+>KAjBXM5YSj*f?z3v
zzXAy$F}@Ny+iVYc8L1ArLF82O-=hw>d52kfpkTsCSVVZIASZdpb5XwMqDWvD|HJ;4
zCYIjvZ4eu(uapj51`9yOSYHeqM+Y@PhgR?~;1mests6)TerIVi7v9$p?}BU!OtW_&
z9%&&SC`(un8LZMJUbPZ{{Qn3$r|3$eHVt<=KFNx0t7F@?opfyL#OatP>Dabyb!^+V
z?PN0l%+=gXt$kPZ?Oj*3R_*=0&+{h}Eq{BCFYw_9!Ts@{a5BvRcq0@DG=5}oe<&ox
z>`gT2EI{asiVQ`(4GnslWi57+jTUR#+D9|JML}U9Yi(rbXy=7%48>Z!l;#>vYOy&x
zHHs80@sB{v!w;{m66Wl&%QxGlt*UM|XwIwp8A*}+0UrXTbXY*DS$pir4>EX;=OV)Q
zKC1MtZKGL=Q7iLh9`2sLyK`T|^6wl@@D(Rkvi_X=#h{jt#PVPgB_ReSbR)IUpyP;q
z3Qm7d(v#&bSL@UhZHR1&G+nUe506Et5YkLB>}{sy1M^o;N1v$FUl`JTft)QSN7bA*
zX3dyrtX2uR$fIkJ9vk`M0eMp7>u<8$qcC3-dq?3e`lKQskWSfD;s7&LB4xaa;$!IN
zV*rc@vRv&a6xmPe9K4tlj}&_=$*)894}Py|5HY^eZR%8M@-~xnQFv+XF)4Ukb$NWK
z-!820*Px9fVrKZg;x7#1<=?dZQVoi)2ql+?f8Y7i1m?ZI<e;+)m`VJoFYAI227c$d
z)b+(8HiW$i%|cuJSyy=(PXu4bU70aY5CFeM0}6Z+9^$Y0{&T^fx<}(R^rJv3;EzAN
zEaQhzu!yGIx=A4MR3Vvr+G?Mz_r2+K*$Iqc{}XpHh=x3>PSmfWPobPHmCBg4d5QD-
z)17oidFPf1_58(Z8JBR-b=f$^(ur`^4SLz*TT6Lh7BVTZ2+$T_@M^l%EdvvoH6mnG
zsx)ht%GrQl*~f&Emygjw#+aQ+1RWRe93??7dfzd_svWhlYi*<$cjD)`K}6bDa1fOc
zab$CJ>s;ATO~mcWG<MnNL1%N5hsN+%7`dcin7{&h3N~za?Z{Y{@Q}O}-rpQ^#h_{W
zM4#DT$oiE2;_p#pPW1g<$E^gjBNOD$Z`_WgsBs9A?>}koMIuAxA#BhY&Q2GgsD=Nr
z{U9p`?XexV>lzC_Ogi21RwcGdw-jm>gIw{B|GYXlmHHYKYC#Ynrmo47F<EBODz3;Q
zNdh*(1O*XLrG!nYc?E+j`q?}g_nw{9KbLdNPZ*5EN`Hy?+y5o<$M)aPA(N>AMdX{I
z4klYC3Z(U*eTbnvCVx{HvcbsN?AMq(_~^#ym=%O`%5>R*yb06~{;uu63V_esiI3Q5
z{Xb3<RwKY(avaLQP|g7=lk_;4N4^UoqKEddZ8%B(=^#b5T@$_<PNi+|qHG1x@$@$m
zpGF}P;c)>C%J8Q%;vvwJvu)G`)f)^!T$g7*Cu|-=Vwd+2ajhuR>x6fc;Y{cHv5hm*
zm8W}@Oc=p;!#t5xgCVo$k$sr0qzN$IDy(lYdv5!BcBTEO?R$&iJSsn9j<gvX6$R9#
zEiOl{E;B}myz59rhVK|AW)v`ap$cmhTevOUPn;mSQ|pzuH%J#rQKxddJr1Q*U%W2C
z)x<rd1vA_~2eH<iCC7y-#uGU{&V^zey$l;Vx)31cjYEgx>;up|aA>&mgkQnZjoR3L
zvY#Trco~#wtLKqA6|sIhRZAh#f}eoDX*C*RQpnUSz|K@e!|qEd9#5sCcA0^S-JG?9
z3a4O}BAMt=XLVfs8(xqu?a&zTt4LLCnH)Qgy|gx#H99IF{ldLXw#3e8(h>OMVpoNx
z*}f^tW9f_H2#&bkF!_RJ+rb8xC7x*0txEbhAe0Ht>XIgmolrcQEZ$D&<b~^BcdY-7
zT<vaej^M$;3pfQdg@WZ>;&`N}r<;{ce-FxU#;Oom&?M%cP2f^0*mjMbD73=}*$nDX
zX2l3SKJ~s5fn&oj?O!jY#HfLzn)0miu66)OR_T1XI70~-roG&P!!a)+{+N=lvuz-p
z)Vsc1hy#y1$H52sXZ8_L$k|NwSETpdSddj{*nwBaJ*Od~m~Svdz}MmJ;Z>E6Ix{|O
zY>{o~a?Ht2cl$fv^8JuW;}usgfR1%j>`!gBT#UKBvf5vM(n(|xv}}Q3_1ZdYu3vPD
zPU_TECE#DK@!g1HldjFDXk9lD{88W3>bkQOYGBtpET+n}#I#evG9?BkZLAlJuMWtl
zHt{%8)zH?VpYnu<0ZpK%5cl1D3OS1s&2=VaMTmjzaX=laY?HUnh0c7o_qiA=`O-4F
zAMkdDaeIG!&ARpJB}&z@sI>kxm8|c1&va)#14#`Li51x-x1PDqnCYM^tDZ&qD85gd
ztm-iK!P>2{3&{_If)CSV#N<v@R1+R!3=k)cNe=OCmDusJpTsp@ZeLjxPm<#;4dLke
zIKvx%@x~9#+>me*-~|d+rOEq}SVpwlRe+||_rrv2&Pe?wPoj9^j>5wy-ZK~Z99#SK
ztJx1iv8#}-whRNcp??ORvCLj0)I9{$xcv)P3B}Oc1Uuo|ttdzr(n=zU(#d9-l{&cb
z?M(DR<?6$gxVYKL0eQth(Ya@-y4|em$8+2P|5j{cPZg9Z`?t!uODKyryPwN7J@{6?
zdq{l9&%<{PBH_Ti4T1F%{h69N_``MJK)HkmAR&<Z;;^Z~a#<}^@-`QsM}4z7iYr#y
zj3L(RL{`HYsu6j<e&&bhDDY<8+Bpopbtrr9oI?E7CV|FThp$dpM42cVnejm{UD1V0
zFuSR|VW)#|=dyE}xToF6>4gYDj%@3n+3px^^>QC1vBiGwTl-AyDvDb{C;IwDdSiDY
z6VX0if7S}G?ErwWzgq89w69{UFjKPqsV%NWIngFb9p4KrT;)j1VdEH!hvq)kCR$tY
zV#=BRM3=L+2lE?ek<;#7;?0}k&5vWGqx9ML^K)-Rp@MI`N6E4$yNgk03OL5Tr!qQ~
z5&@f?FEN`N^!woM{-t}Zy}nJ$7yIEhTC*!`E<S7F`QgSL4XI^*&2R29dqzJSvKeTM
zpWVJIZ9-N9*|iBR&t*Mibi{(l5)CR7k<Z+Ou(Y+D7|KvxV#ek~4o=lngT$eX_f{;f
z%JpqK0G<sxdrWODw1p_1pUd$3XdBM?o*g`7VZ8Y1F{*iWUkp`g6lj!eULfNCA`A`n
z;Xb^SN0M2Jyvhh(DN4mg&k~blg^cv_tmZNlbdL!<54ym0J_0=0J08O{n`<;YP7N&p
zKEvk9Lp{QVCr<PkF`WmURdBv#)~=Aj=zf+qYFl(FUF{yPRx24iVUNC~${-Piy3f@4
z!e}G}a>?dh0uis3^af^}c}Ldk=G=kmGQB$bO{;<HP<{IaKo+t(P-|iWW9I-mB(rAz
zkqz4?mLHFg5WbttJ%NR>7!?~Ody6W8L5%s9a4ImKhqd<Sf!tcN;F5-?A*|69^})tB
z+j*4$8|5u{ZSihtqo`*EVX2@HdP=OZRrr(zA*I=jeOGf%gN=31PQT1J`YLD1bg7&6
zG^;;rF@we!K;POMF95Oix9}k=n`=1t{(w^EXuW>PWhXVX=#%B{q<y*XCvHbvjJ-J)
zx8&^d{)cjv(h{GM1PyL(M0$F*?MpT!94(86*6K_3^S|VfkLxLd3fF{O`SIpFpKOZP
zyMNcEgUWMf<Db4PUeE7#AH)mf_r~GN${$gDm?f+E)|WI@#L6w5Cbt=0->%W}pRapR
zk~>?S^+UX+7Gu~BG_q&XBpzJ1V}2v2&1wzjeTW#n7Sg)Tc2_a}bE}6Opces+B#$A?
zT&ug_7i}JU{^>I!dwK<WURYtJ;j|jH>-{rt<Fb1%qu(g=(VyfatO={H)&Tqb#9vik
z2Z1+^PMBEcI@GK3Me8KZo)`K898K>nM&6s;jaz;=%_!c1a?=@m@Un*K*F4OtZKmx}
z23W}!%v-cv?0x`hb<l}j?2z;*=Y1o{7nQ>Gm|-aLYG&zR7Rj5g%Xv!s+dAkLx2`m4
zchQV@-BliV!BL4;O2dI1V`7+MKC!l#PxFdOux`puvEpUi#ugqf&t>eTKxL>m)mm#F
z7K&X0x(0iCyUI3O-Cf{)dsFwY^Au#Y#CJ3&3;)}S1Ptd0>?sh6skCf;DdRXcjwuhb
z(6hc1CLge__7$@Nvx<la!aLJR#L=DOHn@;&D}{-#c|~;ZFT-pHg^;J6p98Mk^MM>u
zyRLQ{Dtg+;E2~rb#%##yHm?ptocmVeQVW*)F>M&mJK0%}jJ~I9(ld9VAbn;PkcaJt
zwu+ymTiS{H&Egx)CmwfuA&C2lu4gVLu2O{K=*GmbrB9-7Lf;VVv7mrV^`ij|+SrNE
zy~Gc!+zh=Uj#QjSZfq_C#KeI<BF9WIY>n2x#+qpL{=OEMZ=x(4S1}?ZJCM)JBt~6{
zi$RC0Y$BIHtDXunYN8XNPLdp7CA9>oK^V&}6xpygVwepU3`Q{3OQp%k1v43ovs>1s
z7RIX<MgCfwn4q1FWr2vdv4Ijt(+sa;LMsh4w``50B1w=Pl~IwNBc-|;bEZ|EO4UG_
zK(0g4j@ObZiYujN_k%pIj<M5CAZ-ww|ARtI1n?#aDNvAa>zECS3ZStT7^HkZ=y|gW
zipA?kdKCRpdmG9y`Ul{zC~^_HgY<a}U4h09{Z;*l{>4jpefD+6^+ouyxfESl@2T*1
zY=8{>6SSC^IxDdEHTRkP)%~^W_wKj(QT#=ascMU^749GM&L6XP?|Vz26^K7Hi&laZ
zCQRPD<0u*hA%#Jv_zPy0`u%r1qhdg;;g4NB#y(gk<`qp+SPUtlADURbbtWUiw2)M)
zv~jYgMk%JL@yy_OjCFz)f029H5jzEr&GDtse#o=-$0<6Z4)AZSNs1`?e~~wQ@uTW=
z0OD<o=58WdDba<(sC<6H0cBw-*mA!fX?`$8P$T)){XhnT`J?=^dy4j}!XVgJ;HUwD
z2lJg=<VjCh=sp+=3idAZQ(QjpOALp%V6T118XPL>U*rhX53~q@*iYmwq`jeE7080`
zU*%(OerumkFYBLXsnCU=yGnkUYm~inOzH%T(n3Yl#`QnNjGNHe`{2ap19Kc%f3+03
zg%w)uhMA>XP|Xvosn)_<R;s|6^$%<?nUlpPq;$ytGSM#Oqv9^|MiHSE191t4L{ies
zxSF&gNIPkg4H%I$#wUqOVNKx}1~s2=oOz)k*y#7$A;1s!sIp)Q_INhc0u2XDHzG%C
z5?9;X$49YKQ;o{XN^b*D0rV`tXpU7o2F5qk7EI;U)a6A}B120&Bce*9BGXG4l3p;;
zL3RsTF)@mlyLGp<Wp%Y>X)9%iB!-2#w^uk6w^`2U2NU&VJ!J7LEW8CpSysFB1T-YI
zf~9R0`EHWmQ3;em3b}Q?4YB!&#*wBmk9H56GBw8KDL|c5t`Ua`j$4!bF&0JH9sOn0
zSYz^N5ik@u7Us<oT{$94;!I-~*ak~BMpBd-1=Z&9=SlX6#H<)nQ43g9gAos{L_=-*
zRr~pMhCu_&I5pG$op8A>^;#|_?dF}@-lk-l%4F`IQs|b89x@9*J@<>kUQtm2U`KqL
znoCJLt0of3#evAYY_FX5*BO%SkFw(U=`123T7)gvY==#!fD{ta3fmZ!d|wHZD$Ly(
zf+d-_e-o44^3YY2Udhm;V;iHV22Z{wHj%5sFdD&N961omz=29lB{h$cUvDEKK55Bq
zutv>_rkws<Pfbm4qY<FO#Sr3DOjB26wm&gxA~hVDnp&2c;^`R?G8`3=5!UXG^$?@w
zws--KW0g(3a(k|#duYtE2CxXXfS>%v9?VaS7lNWj%a~HB+|869q}3X5fyIcNcYp+w
z_{0e9ORV<1=~IhMlW`SMlL>jAgSiDY7B!u96Vrcjb17GvwCgBR5OL$!+iLo9qs38S
z5t^e>YPw=rY818@7Ev6|&Wd&mEM${Lg|+c&#$Bq(5g`$&9%D7Tz3kZQfeq%840Cp1
z@6%ham11mfe4U#v?xRD;chZU%etmbo-BZ6;%U>JDRuXsM;+gn$opOAyF6#d1e*CUx
zxVYX?u!^5oJiV*tdFf93%IHvaee{z@$*wOVNHb(m&+?1)xavE)f8ke9n6O><3-t7I
z{la6-iVU!~94kwRy?Ao?wDre}xO?cKGjS#GJNkw8nc=Jd@yT}gWgj2u$&c`bD2}!C
zskgyN$dJ^%s4wbi5%EkA*k0ZY8qt2iBwjeC@&upem3{vV^2*Q;vX0E^9Ae1d=9@x{
zoI@VzASMLxFy<1*p*&#1pTw)KXb^t0P9d{O6a#Jji=y;RG{<|A6<>_ZF79YHHdf0D
zd05C}<TK~7YNW*?`}+=!l~ru%Z<LTDY}CWd+$~!}hl&Q|l%*nvlZqqa41y^x@lE<C
zN>p(SicmpJ7-~@!9sd4FOw1?oCloB05o4ybXoqu53NCl5jVSY=4!ONqY)DhlMT02w
z(b9+!%kb0`U_~)7vOPncj_1G>dMve0wm3|NnNCGo!IeRE$^#RHL9oa@qa>xdAhmBq
zD`9pH6q5$Y!Yfh{Nzl|#E(2*OCQ(6vUV)F?$bliW(1X9Bad28_IJdByEI`((ur_ZV
z)BI+Q^<v+Sm@l$dQ4W0O|4k>$VEJylxyje5c@%2>?{lpnsP=D65qQq!v8NUyM3r!O
z#L}z_IZ3O4$r=pv5HkpEb!N(E<0*Q@I<See&hduxh0pub2CNzVQFw2U{;n-_V>n}#
zL_!d;*vmiS$7{=rcQz*?`+oYK2lkaz@G%^Je7S>dp+6uWRsMKLmxq2TdqsY(!!Uva
zXimQVF^wVtHNz1%GktJmFTlv_O6GKjbk9ud?y^UqWVh{h)ihJDc}apl!1IFQ8VJ+>
zDnZEJWE*9O`lE!11VM9*dZbuH7iA$=StA|d{k%XdboQvW4NDB-2>}DY9}pe1jc*tz
zNYEu&Xw%hI<#YfZ9((u7#)+IeUMWW`9!M0b3JlpEj{PH@spFCZ3CCz4$ZRxgSH!>0
zgrZEnT~8Z4J?dI%MK^;K<&o!;7|5DN+3d_={F7VImy#gGO9PMBa)Ea;Wj*7T5{1H=
zG0`pO8pbG<U4_;T_Sx-0v-5LOv+4Zd(jFi;%bCOu;|g+S9MlWxcx&R0IGXluPL4(y
zvj?vhKMJ_DEEK-rX5?T=w$6IL;YJk9t-?n*9=;lz$_a`k*sirO-gug&5MLFlbuL!g
z!0Tv9!j*k<CNd$)-bL2P;2>3*8ps73!xvgAvQ`m#E#u*RZF8y~UOs@Y<1)e1ydr^|
zX243_qBd4C7<P$ISnj1*5zAfEMvkVVA@BwpPMd|t@;3{*2~1`kz39@OoZf*kGI5;{
z7Eya@*^9<yH&2dh<8E0DVQXz7r($El>a0a%LbZXGnm&P)*-Npr^vA*#7LEqLgKDJX
zMw+5O49a)=J99<G)w;%8s*5vTTf72-ns4g#{Wy1ACnR7$nJPDS^2?t5+$y4+zYgk3
z<;6I;jQXYB$mohv{*s2DH?T)TyW$EDw-U?|6I_RrDALpOW59$;+%$#g)?~dRWdLJw
zTAnwoTn@y+#vrt7wVSTyGO7*F))F}{GfBmjl183}gA1+|!eDl@hI(2F4iHo9p#ZhB
zlsdw!n~3A8M4!J1Zl@00q;ymu0*Th4ippEQ+cZ{BopGEBat+I(It~r}xmdV_a%GHJ
zM0Wlfjel!IG{vz-YBbqRMk`8ML)3)IejycAFp|%g3?mWj1|V4eV+CN0D+H3zfG?89
z%Mk3!R05#X`=ts3I?}CEklEasLG?9mKrgdlvsl-XGPlz5dRL=6+B533Dxq5L=GX*c
zV}4R4gSGuNy%Jy(vbY@%jTt>86xMh#J_YL);}RV<0N~I_k4u0NWt6K%V!+x|QfZP@
zXlI5$Hh-wDNTT&4x&ek5E^=%vBeGQURAduQXycLr9O>AUnDu%IW6(up*xfirE83ug
zuO{6%ZWre;pTyrP5yW`@_(VI#z$90}9N&?M?GY7@sTN^p62gX7&7?Gg)$5pG%T1#`
zB_$Z0<@PEYMj%8N@Ak;?dp)cfhqv?Z3uW{0u2*!Sd*hie)@o<tU7IM!M@b3wW54L<
zBT+-YVs@Qmf^S~@1F~!mF`lUQ<7!SqSn%_l1&pS~P9M$G0t5t+gNtHU1K;FT2Q}Yz
z)-@|SCQ%fG3o0SBk|L`(cqtf@>clg{;S2Dp*`so4#H2)+Q5=AiudjR2oTyXoRy9DY
zC~A!ihSj&QHB{ad5%H6RR@h=oPI|v&aMmKf^Pur;p_<^ylWG9c7+?%58j>e>FeydB
zDurw$Mbz()bGT&NI96bc6zlG@=@Lgq5>(igeyzWBE1(jed3I2#Ug#bI0ULX!fn$<f
z*E&2SWk{WJzkU!%*=#H4K#GL|qs0P9wzfGmz&Wk|8$v8s-ux>9uB|1gpeLtJEGMrA
z2NuhM2^|?twocg~km;{dK16~z9S%|t)<{9!C~HbsSfrE~n5L{Htrbkegm}~hni%po
zH%nBrA1qLOPC70CWh7^igh~XNf?YO+q*p10A`hG*hxQLla9n?aSlEmqZAwnQ36a?V
zvv-r#R^{H4ul2d^Zu&`e)?3VCA9fz%jtpY$>%<bK_{mt#!85uR7OP}HBzFy6t&gQT
zywQ9<@hj91qhm)g$>B?JwnB=>Y_GXj@HESZ5;Eet-zXC9AtGccL&}3!c8s16>l?-u
zfL4Tw?rBkwE72A|m;P+GQg_gX0(90#i(Iio!8m~=-ygwYEu83OQ>Y@Th6MZ6bQVz}
z*;fBZLGYVD{eT7S1i749+J)kuvM8jeDhZ)KV6Z9KThGxXCCukt<7RKa-2o~cdN3!`
zUGb_@ZD_vo^zTi3QC;!kztxyE+$~mc(CU@OHV{i*Bn)1PqgFz~E7pEUvDzR&g9Tq+
zwp?(z(4g=Ar2&vUTpZ|Cg`29te9K4@9CIY}n{GMt8eKN8CCMUNPjHEAI5)Vl;WKIA
zXr#z|cr;SS&!vOWrG<&y+x*9=Ph~ugoYXVO1@A<_NZ~@R8^&t%SV34dLPZEnipnsG
zBuc2tEyVO0f4OS*(lb$*?dNY#>JVPl{c#YBFTY}T`EPoK6c%tFd9sE|zt6qM{sba4
zuXbzP_!8=!t{rvhR~J9*2O;Plyh<x4T3XGn|2Ui5d*9rf`@2<=i3EcMSRv_0Whdki
z=!}bz^I7iW0m<);;cf|JU>g4*?m<02Tf;&O_=zMq4^v{j)(B@X_ISD}kVbkm`}~!K
z3oXB;9h;CJE3(tpF*Pv{bK`^=zj%69-3Y(2`TkOTVykIX51REOvT0WG!sH%?ajkWs
z@re!%40PeP5W1Yk_rMdb&fkvx_9wP{d_!s46zNU{C5g6fqM?VOHNl}VZOthC;XY|U
zyAM3Oo0p>Zz+PT?p0;mhRcSQT#_~=4=NN>Z$0<psPNW&Bei2MXwzZRcekAmX*hvrC
zEXs*P5sC0JhHV^E@w&LR>h)U?1Ww0Dj9<Lf<kVx*qMP4-@o`wTwy1sgMKqI_eT+xP
zS6UALq(z&Ztc>s^7ae02feuClz^9I{Wja%`r7wi6QR<AJ-Wxjh<SDmuB<li`EBZn*
z&G<M+EkiUsTO77<%ikggGqJP0>Z^2YjvbLnVv;l%QlT($%>sU+`#1mi6C#|sWq)yY
ze|9jpV^2tmugv`+3!#&Xyv$p}r!RA~CBV_X6jyQUlr@r-O{hLaBOh-sk6YOEY~FCz
zg}*#CLYdZSkZ?c>t#{*Vh2+;>{=9XRabgI6^1)dh-Q14<g7JZ79W~N1ReY@Xw&#oY
zn}vWOwV<-oxSG4ma!;c&3xzE)cPi`EvCl?6`ZjWBjJIwt2Iji*rv5^v&!u!=KesQs
z2v^z#=)}CkaWq7=M4ha0P>f&9OE-nN6ykj_%8fIr$2?+nD~hfg(N<wQ2aqUaI>^5)
z+zBe3+0UJG``_Xdj+3$f6rU8!eHYLDpJFr?k2y)R2)lw!PokSG{+<tl-v;hWL|hJ%
zdL9jYD9Z2z2nkl^_qrzIzTy-mKD>i5*#(X=3rEQxfpHSE9*^d4bqo^CN3M8!&%Iln
zkp%CC;4@PifMei!ba*z;!xguk>Baeaw~{yYor@fBnByWzqkP|WOXI@ph>rT6@1>!9
zI@jmPIHToP;v(u%SI(AAUFR0*6nD4v5|^by?$t!0elXlsJKn4LZ`&h0{3C>ot>Ki@
zK@Wh;C&P5@DTdYI>l6Mz4|L=^7xSfERu<!gNAX8f@sj6CY#)or1|kAzYIBNnUYv7v
z!#wz}eAI>^%i3YiTUT%*f`VnUaoH+P{|zj0oot3u4!F+2;{p7Kb1y%4WW*J8L4^t`
zitC*>0mKvjn;d<B@@O7f17kw(I8qo{kP(rYDX~8QhEYheP3sp7RoEbSMGk;RIMOMe
zQGynpWY|nAC_o*9R<y`u)|6aE&dR!~SkH<S+a@ROr(Xxfj`>?5jkE2rsurWEQsgXd
z(;9^-Tmdz5z(BC+V1zLZt;C18G$8C$RrHJB%!0<iqICPP`QX3_;%_fXap!gr1-}JB
z0`%pJ#C^8JlrY={|1HRu(65HK=l&h_rSAZ-{M6x(M-K$}Btg!j89X7DEE%$cgMAA6
zPa)(kB!?793QV{Fn9vU1M(^~p3q1|cuj|+S|3v=(`=j;$4NA5n=?lFR>CVO->2&Hs
zYHeaGu&^J08PV|i405GWVJ>pMXE-`v3U*!np3JRU`VaibHV;CeNEOUCrRn>MlbU?k
z(N|mR_<k<FY~y7<KKg%FmFN0ioV)n{zClLm$f%Rl_xPV1qZx5hl++_cVPPOB5IhAm
z7%Z*-FpR>M;Jl4sicnOq;SWJgykB5se}5^FtIod!8VVsgDAt2d6M4WRBKhYyFK6`q
z8R=K`2=O21{YnocX2Y;*K;sMCfTd6J>YG#35UJsY0{|f40>B0Ta0*J+ARr++EWif$
z?IILGio9U)hfb>B5^})^-!_mllES*aZ@T2cN05e<Xnbm1Z-{(8)%47J%S({nW%Vs|
zkMHOlDf<?G;$0sPN);kvI~Dxvz6t&CJ4d59?w>vhMS@Qhmvu#^>yMfjS9xa6^2RVN
z#Vn0Q%4HGr@>OA(r*iM051K9>ND}+jA~2<L1*@>@idMJ{ksPn{c9@DZK#X9xlbDE5
zMP?e$<+@EukI28sCSpTyrLCzp4Oc(z4oqAlO-xK^kQ^SaG-1#-xh%*TZjboW#dza`
zSJbJvA>n+AA2_6Oh5PdX*JP({aV^tw_13gGeqQFZx|OvX6dC+-xAyO1TeGe08kF8*
zp{!4Yiy_KO5hp28yz8i1Qj2r<!1+mGB-&r6BH24aoXbQJX%r+0%C9U{E3qv<-*A6^
zS&SRo)7f6qO+6@_6z2`g%YA`N2tD~^4R=&LXwh1D`j_)1_$L$-Ve3JYT~K}~ycHC7
zARe7bR*`e5!FTr4x+^KdxX6lKomvb#(;nO8Xvw`tOr?*f&h;rwjtPS_;9WO`sS7)$
zeGfBObweD*-9&aWUN$(8adW7aXDh%&vWyG52*Z>5fI|#RqzK*z1aR53GHY@V3ez>B
z;5_Gba)AP?_S`Z&a5&Q;w&#4sBO!-MQQqtP0nPEX*m33ob=Rsl_W&qr_UhUb(I$k#
zr!hdD{ibQ*nA?)Ta$bN3gRVeqDba)4V@a6ENz7z2n+<Ha)!Ngy<thy<))FY;KprY7
z-5@PtLNqC|lDP+Qu#VB1yS$<@HP>B~dv01O_6baQ2-}_UXW|9PDCBKapVkvE_3J9#
zHmNC`88K=4YbWqvJhK6@LH9~$=g7WFr%uBtGsi&@SfQ8229_LFwvDHh)zwS<?4q-J
z6s-bszGECtZ~*gi%R%+eC3m?E<bN3#%pTyDflM)6OB`FenRO}AabnM`tgO5tUf6pM
z<GC}=Jfdf%w0#p`BDr2e%+~gRX5La$Jos@pR<>z;&=i?oRpf+iKQh^U9X(+uSnkdr
zT23v0CE1_oXoOgvwFo$Ar}l%dgbpFc&E@m$zYeeL_b+U*60njA$@0u1B0za;w%LuN
z-L~CD)obrt@2B)&3fE;now>UOww&k9mS!`d@V68eV)psL{^ct{LvWM1GKwB+KEq+*
zKVCBrFjAR75d=;4oSI=hWt)#~UL0~5J7I8U<<pkgaNK@E)&2Dc(-yRhx8Hk;emnUl
z+Ab8Czdp&iDn@wv#|Kka>K*cwSTur?n9JfiSf2@YqjtRup_x*e_aY6ZLs~lK4~K_5
z0od#}4kH)0F6tC!O=^nc&oA_qJaUZ_6IvSErLGCz>RQl+plhN=KIdOc?}phjI+Pi$
z(4I%aYz>`bf>!cZS?d7Wzz@F3%@eMHx)o!iU7G9Rk^o_+{dKA)V0uZy{b**O$ez?I
zXO2XUc)%>AXJ>2m50?NW=#89q>L*n9k?g7Ue&_>D02*{1!1AK5=&2VA+YT5KmpQ-t
zOSb^IOU(z$nBuXSW&5V!)o<-=q8$w7Q>8617na;>6StVP%6q<yuF>K1<!=$1#=+B*
zYo)05qWR3zvwhe6Ng1i{Z#s^FN{g<H31GPr#>=a{ex^%F#LLc}t9rxOZ-i(bi*RQ<
zJrhtILX)v{J3GppY_o_)w3lu9=D>x<fFVSaKL!@3!}RP!uJ&;pQYJ5)GBQ~lKG_B4
zhIC1)-RyH)%HrdCgPj>^%;X1_yJP_DMQUUL4AnkME2Gj3^pw|7s$_m1HK_@un-Ny-
zv-c0SEA5%v){EAy61`_7HZ|@`0}uP^s^;j|du73Zv8+qHtXZPybiD=9=d4X&aYT4B
zcj2l|iUyrpiD2GHN<E_ikPaaV%~fS95nbq~6c`HtA--#(3`$lO<KGOp;XmT4xi#7>
zX^}o5bEi(Gvo+Fn9rG*{N&W*yvN)THM^yYqhRG$Df#34&ht&v`;vluB=R=E<x4TN5
zOZLUAW=Pkp^djC4=WU3m&~c_z3N!3~b8u%#0h3bVDoJgpcMaja_93MtZ9!67^4A6^
z9!uMk<Wg4hD}#=V;e72(<ZCCc15K++9xa@9&U|Zg12f)l?F+0jdX2`$&LFr{%dF$e
zNd_wZ)qho!g$>pXS(x*dMhL+IL--hS_K+hoO>(q7anSU5oKmv2+(vO#d3a%>shBJ7
z!Lax(2LE2~M#IF=YRU&#rMo}^GpC{(`G`GOji{`KXy@7WwoH9;V@f+dh4|%d7*W!U
zxL3BoE0<VJL3OvVCzhyS5~-J)hTc$Lv)htc!8qy47WmzRzBX#+^0?E>(@R&C3xP9Y
z7-6LMD@7hhj-zj8q48FCdUw>gvB>@#Aw~fHecyg40S*vNBtMHkCmG)q#@TwjB_5Wp
z#$dY@x|{ZaL@G^u9u0rA7fHrpoZZId1o@95I6htF_^!nrv-XIXbUf)cxo>%mzho{v
zW*r_Q{o2G_T9LRN{y2%UhT9xK$gE-2;r(R0gRB$eXFP{1d-i93j?QI#5kp&<=R%?^
z4IN1Lx2Yi?Wm3}M(7RI(!(_!Wu$M6<1kvtX55eBbM83Hc2skO!%1=wymKo4s>3(!W
zUV%=*?bPEh&iprXZ&o=pShV%}{im<nZEUx2Q_vwxOaZZRaq{TSadiz}(fz=_&Vh$0
zB2uohFh3X1=r+}DQr|I52*YU<*r4_NuNJ17%#l}$0J`HTxyIoU{24#mPF@wCw&?4%
z=c^T5n4j!60a@ieCO9+jCZ)wxX(q@(EF57IDFTMbl@osmzw+_zQ`QGEZo9_`Px|e1
zWaqph=Yex}{DoesSo8eVqoYy06e|OALsqX(R#cwWqE{Tp$tks}Y>|~!Y%IgAoc%th
z3q|j|uV1u*ZAgCH-e7X~X4mdQL@dHUeH4q_WWPU7?~>fn4?)E_6)VexdG1m_PhWhF
zWS@gjzykKlr8yjGc%sH8H~Sx;V$-fUX*^YS*;$?_h+TxL8ADh+N>l*%5C%rm0S9!&
z`b6CE)Tqv8G0HURY0m62^02a7L*8J%D5`IE04FUbu1A$m(djwSG{+)S<)%6Ty91&?
zI7hNgB5$wCgN2w6+}FRQQp-W*;VJ&T?OpAE_v>ilam+V;tu*9rN#P>5%R;rq-V<Dw
zyPM~^srD#~lPpY){)#$98h%zQV3wuLmJ^g@dRO*T^22{|@Og7ButF+P0kNs1n(ns>
zD$}VpYp2Q-y(`17az(>HjxJSEnZ1+jTn_|Nrj3)pWM5qQqb)Ou?h+#Bt~Zryd|sGG
zlqde;1uRpCP5Gs=oYY_ZeZfME#92ke!q8z{2>Vsd$jEb)u3P`K^{rQ~CfDYG_$|rb
z@>d_`LG0tpFo_nPXpQP6tyL@oI}SwayoFig&|>ag9-p>#AYfC4Wg~R}f670Ivj5on
zpz-ptbt&i5Q)aH6xrNn+sT4SO?QwWTW6qg^2W(nDpWXZrjBcUw!^|a-qj(|U{b?~C
z5(J6K;-qK}nn5SP#gr94OzrYAcoVS@j(5r|pPu|PeWl;Y13^r3<>iojR2FCKYWFlG
zv|$F^+zsY;?5n;pqY+W?#F-`tNuRu`=GbR#i72ohmIhXO;ry^bxQ@}ML-l#vkW;ps
zW8Ou&I^^kgZ4Z;YqZL(~;}ZNvBxSATk-hrHcwJWI5iMNaw52BV{aS0KF9~Uw%oOXu
zN*Kt7>y+>j>1R>tCQjo6%RT4B;d|V0Y}ufHzbjM4&s|YRKWK%`ZEedH$Bdt6#czlc
zqCN9!LZQ&{(RD%dKE^C72JXPmZ1PFu{4Cc0(_1w|4z9H7@m1w4`CCRp%J5r};3Mk`
zzeWfnt&Y1K-LPu5G1M8tGboTkTzG`2CF7}JDFhm}2K2K&^Uy8KT>x}#KQ*Mjcgtz_
zWgjqg2Wh0Q0|2@G%yI}`Ih{s0EgH^?1pG$oQI;TTM2L>0qBAj3TF7Hw);&z~{wIpU
z8gW_G;pS!vOD@iHCoMHq9d;46&WzNV5^rc?lLmEp9-cK5ok=~o2rQ=p%<(ZZIl}35
z=H|{z_6)|fu}JU160;E?mKLNlQ`{43stN^6O;3Vhsxq3Yp#^u+-zBuKX6+xtHf8;{
z<4jp3d3xP^764r9bc0MSWzrNEw%pD6-hZ1(won&{rXCI)0$)A(Rh*U0Jfot9S*K!K
zt_EMs6AU0u&y;f(UqW>=)aZT!*;e0|(Xy;K1qGAUGPf?l&`*Mp@(q}e)sN3Ee#}Wv
zC4{T94F=`?8}D(`@vZ}w@**oC;qYgJn>&S~3bW+InWzN~%-iZ$Niau*p_*VA!ujDK
zuMTSO=kz9RhgDsYci^H+hopV_%^uo|e?M*uxmu#TV{}U|o_c?ceJC5^)h5s4<K-7F
z&^=4k?g@$B$Cn6k{N|)|OK(iK$tOF)AG=s*n7s3(t#46rGrv2G6`!z_DczinZoQkr
zERFnrX%whpN7y-~gzt$u#e2O6sOG)6r6Hv`yx9q^8XFg|Lg;HJ#5Tv@<cglsEe;6|
z=8-=%^Jw=+Uhvo=^isj=+D-U5U=is$!mB<3>1LS9f+BkeWNro`q3j>XK212UR!w58
z`tkB1>@SzdiL~9~U%%+3Ib>JqxKg`Ju#U&EBLYnERp!yW!Sz4bU+=nNG9Qg#?{{UC
zkRd#D?hyjJLB^SaXg=~R0oT$YTOP>xwyVlf@KLLwdbTfk$&Y+*qx^Rnx1JA7h>+RK
z1dR4Jd}<h`7cwJuahE%n+-7!7UniG1!aS$dB<0&)>t1X!peb%snYpK*+S&Hq(tLm3
zSI=gO;6G?x5|Z3Y!hT8pj8ls;HcSlzX#H9B=;@uf*xxj9W-A%HzL}~XIeC`%&zeB+
z9hs$1Qb+vuGT@|RKUjHUTPpp-S?DR{$**LJ&&46Cgb0pO`>;TKYU1N&o#WJQ4(8WV
zA~vXdLY0;BiYjSu!8q5%%=o9erbL}j42elQ4p*;5Bi;0Gezf*4u~=A1Q}MWkBC~L5
zxC-sU&ww#T?9$5f(X?1<Rb};_tceLO3au>!9?tG7sLH$7h1&FjLRMD5o#PnV5a$yL
zDGB4!?o986oGXtd<Ss--Xpu5K#bs8M%|x(aF%ifDVEJcSK?n@-?%T5sS)d7vMH2J_
z51VtFlhL1O--V9b6dXoq6ESemnwku?+7~3#eFlDx<F%}?_|y^^V;Nbv<Q-OS$v4E{
z2<?15zBm&1A+r3C!_(z)oZB-@>BzzQt3y6n$PIV1ajqZh?C<44JVG2c-Dt>@>Mn^6
zoCu4YN_RJO=7fa8mR_GpX-DyR6++LQpoJ+jy)e&(<G}$%Dgb|PGRii!EtDs0LnA$P
z3pZ%qPe#BG{OTEdsXIjP>E;56ws>>n&MdZWnsL6B(zm4>;*#;slJsYM27YY~p;oM8
zUQC7~ux;e7nehm><f=t#yIZ8D16<Jd_(kujBNYQBSN5<ysRgzz#IB#k$n1#XsGjfG
z`X7g{M>p&A$1`TarZU&hkpQ!Oq>qhykNvy9lSC}+sv_~YK#!2fgZa^Oo`)r`$rC5I
zF%2VhgpQe&tNXi*tG1%mley@Xe5QfjG|}=Vz{yI-Mf!v%-pJ*axi5Dp{_yE@Foy42
z*y&ClR4>r&uGsE&tP^O5J(^_YcJ;#U1N9|R?V<BHvOzG`-OAYC?Yp24i3cvhx98cA
zUX1Xp$<eMS>`~(0)yHPcEVaZ|iTE9{+VWUJTQUkxY24FyDfIBhogX}O-)UrM1{^8H
zinHM8jy5aI*`x6pPaIyA>aMZ5a;XRiV)2J`7he;BK!~@(aJkIbuJ%7V*r#S1XjgFQ
z!+Zb-p(H>Quu#!VX(5Jw*uDTsKKrcA&{cN$CLq8KE7eQ3SOTrH0-ltqZ(nbIUNMl%
zq4Ic8Z9fH~1TiM*LM|aS9ZV{5e74Z#MV*P=xVX>k^zzaSa>1lF?_Xj9NZO{ZVwTGc
zPDC`S15#aNBTTx=a;A9LrA%vK7Y<@Bq(gW#QoL^Sb2P0qkg<tAHN#Hd-0QcCj8Hh4
z&~Bd&J=?-@^YFtHXd|e;$}z(OePv10e(v?R@I>LTTM(?6IRy!4kF-hU;{3yG=<k@?
zbI&eM(wVcx4K)e08oie~gOpo75P+k3M0iY}W1U|DIKM$~tM{S9bCbZrLi51r^MfCn
z^E2clYj5=QRN9E!;p5Su$aqrJFm~^uvu{jCl@wpz&dA>Gz{vQ>PfVmjXAAp1$#G9+
zfZ}HJs4aTCElGB}#!6PTsD?OIRl#+vT_)Ckdf}CjuI;L}D|<LAV_pWy%;)7G@u07`
zLJn!7ujoN(GB?~NEzHA)=bjg1O(HKH(TY%m;%EN>dxvjfKZS2<Uc4fthrHgQ5YY92
zC$ppesVZ9^(f8$Q=Jxfb&~vX(xZL<OmZ0oo)xYJQH2JD<awT&m6?{{GuFRQvE3?LY
zljmu~qxI_h5cZt@jImj6E3?nOLakZ$<0)n?l!*>9lP<|#u_xD)XDds0i_W?J80QdC
zCPyQO%xwX${1p7&_Oy=ptuk|oZka4@kL3js&2;v+#M3dMhRkH^WKMIb7s3QTFT3S^
z{z9V~_$f{9Hk$GP`6V)0<t^zy|HURjoH$n2^|@PyB<{etn#3RZWsOjx@fKu%LXkpS
ziUaefiMKp1cCExPtSiwYL?{!s*Rx0ADIyTyqwJ$Olm<EbC*uedL~{x?x=eVI-3G{a
z>cLGZ$0C_4Ob&Q8+sCz&+FDtKMoS`^x$FjeB52ZXRQLNk1e?$i2Dckj8raoYHYMH6
zD@sONIA;meY0-L)Q_ZbYG74!Zd?cR@8L4A)6H&NSXi3uJDNI(;iyImDabZ@H5Y7k5
z*4z8USh=mDKfIs8e#j4kl?@+@_ypd0qpN<Vi-t=PS6U#(P5|zmdxnqi2~yv$)m|4#
zOsutW7ViR2CYx_E_B5o}9P1b;@E$e=P(VdC$u_Ug!NX>IN9G+_V{!tj{SQq#674P?
zF#Kk+dmIF74wq-_J7si>FFav|5BLL->62~k?!g;1<4VpdYNKIPIEC{8EjxYZms#0B
z4JK;oiv?C$5zjeS-Q39{u6Z`MEt%9Sdu`F1R{SiG%1wfB=31@KMV6uZ6VoD#n(sDW
zzz?*0ZXwpgo%H<mY?_V^hD*$xb-Qi@!aq1OKYfX9n&?^GbA&@~N%JXuR34l*W!pc&
zmkGc=-9rD}dv0~xY_vmoyWI0Wu}Q}Aml1dVX1}^Zm1pt%9Hv9Z?~Oj_I1%gP_-*hV
zv9;|N^m$P@t-^O%4mzu<s~z#mZ0||hyy1vja|7VX-?0pboCBBCr+eHCr_9akH<6}g
zfot;|<|=f$1#^(RHK9DAN8DBgZCQLKkH2{IH1x2JWmU!#JSLwM7Hlh8504t|*dj}m
zi1TCPh{w{KV%i1pZ{Kd-PPcMt2Zu6+ff1JrNnKK5!Ilx0x7^{$YLN#;E)ec%jL;6Y
z@@VTO;ovVW;Lo4BKh$=9+`^(Fbmj-b2%g<~5kb|c#X^#aS#bY#aOQyUltVv5CW8zO
zA_=;j{TYEYC=87SrUga>`)0w<cEDj}MroGTrEdfaY)}2GjbiBB0}|Ft*POpfc~ZQu
zz%54oxg+eE8+XDs$?a|fAv4NBXR|2VscS5|JD{i<(qfZIq(kHHW}1wORk$p(&}uO_
zl97x-ztdAIbc(a;Si>=kWJDF=QL)ZXncPYr=N^+wooZGvMXt%Vqzx{komI4M0hYrT
z&6pC+MH#_4tDga?DuOl%=<PqYu*~C6nIM1R1qP~gmVyR%iPM8O-e@D;@L$4f?^-S>
zv97t)mf1ZolC%RSxOrXXfl*UJbQ2v)Zkf?6Zak+YcgSlcz%4^YCW*`nvykiuW8fyA
zw#Sy9$iFU@_Bo21Kxtp&K2doA@{s2hI-Pd8A#8HFZwkloU3v(h--fkqW9%^^WYQQa
zOiJz6n_%I}=Xcm;wu|Mt>zZ!Q?O_MmRjFYM##qE&(%qt-EAyfrrypc!q+DRJyU*aO
z>q@@Fl22B|*<k$QzGHtN!)kNDdTPaJM9~zq$9_Fp?Zxa>CjT~5UCO?zo|{gDys#p5
zVjn8jNUr!6jjk+5HI)B4_{v?~hx34fa>EtxiTlfea_yc?soTkbOyhWaO&8A=FI<As
z=0O^+j>S4lKZoIKxNov$@w@n~S6ALBmlPTkmfgl$!|d<Uy_lb;uh{?{)w`}oO97Yr
zq^hjC_D$E3Kyml?La0Z*^%klmL!22f?21p+Ke$dB(=M+OoWEU56{UGp%A_b^(2--g
zGRAST4KD?#7uq|{QTz|VRci|FySDjyG;8qc!e~XGdR;FBFQ(P1_wKxRexb8;bI6e{
zc(;}@IAvpCY5}l`<;F!!8u6mMk){+cR5YtrakMYDMJR@%SjkoS8b~?lr#K_oaC=b5
z#)~ozGS3LH3SAa>uoY>W4uoZEZ<bX${Y2EdjwxGPI6-V<STtr}nG;mND9q&8l-k{0
zlFZ-=@zmQgoYK?69Ds#|!w)I|xDMhQ^e5>#7hdNffq)bcldlllFaQ1)?1M!8w!HeE
z;5~%Bckzz<*<iGcA17++ehk&!mJ)LB#1;z!N@w2L;7z$tYj|`W(gldZdrkiNA5B-T
zD0n1yT1r={GwE+&dN)mW=6$FYAUYx3A=YlM4b(ZDo=sRLTU@3HY%(dCkgeV$0LCAg
zbCZyWB4t-~oY`A$==47^(Bm(vt}W5`3`2~Gw42Ozd#>Be>e;ZnE=B3vU7_={aOk+5
z;=*@hnB#CoY}U67Yt(nym!S*W*(`K(4#aw%F@$Huy7LwyWxbl^3zV1m&Lr*gx>E*b
zDOk8D#L$gh&$Zu`-VI)Y+q=g8sYPwzX&%04lM@Mb-t4>X_Wgs3dz`rb!dGh{W|KHa
z&CmxAy23GLQsFeZy+IoDYQoJzc%5{6fj+)qq%6~;!L#tqef11sf6ze9+|v>9psTy?
zKwqqGIssxf5XqTi@i3i=K8z(Pjy2p_ZRok;#`5Xl=!7^(rmC(3GDYs<#NKxvU)|1{
zQ=bV>iD86b`XXUHPPFd>+v)UDrzsuwMVD`Q6;Ml>6{`R#hnzL%f0P`vF$oD}On2AE
z<XiUEBBHKUsxF`dDi<6m$HQP#cHJV|Se%7Sc;cjUnSv+g)m1sAi>c*`txOjEw8Q8Z
zblT(xCT;U_>#+k$VpS9urJE2j0A^~k#kp1##zA%#g{`s=Eb+2^CbkNvBa6MgIL<bc
zQ`B=~xiIy)H3oggcDV%s`m6Y?9UXl8eY}=Oav;+TR@Iyb60(1#371S0(+w`H$h{C?
zFo2|CQ#!D^cyQ{C-ERjP!Y1R<?k=)!h@(Kc-AT*2o{F={h0|-tDM8zTiL4l#i_6Au
zV#fjzIhN5<@5%=>Ki#XApt~02+FKfLd<m~TfEkVXXu*I8deL1~sgPAtXd@lUEKd}0
zZxJlcGqFECU!{KDk<npxVrJ!F{@&AUcx_A1c)j;zj`v{vzID7%W%gI$zeSVK`3~Zc
zdNG%GbK1FiCuHRGgKl!uLs7d*-r#vNGU6v16VP2AM`y>_lvW2olI*-ESyy2|iHD?!
z0e`C~OS^cGm5rK%q;+I}Q322oC6aD7sVA(f)E9lApnkgEr+x%v*M2=TwK)$4w%a87
z*mM~&+jjeQt)e^csx@7_>oH<Z!4X_il8~t=0b|fQrOz^5k<)!H?)(ccOjauAOl9?o
zc6~*!l6igWNlVVW{*ccN)<$$x)kal7E@QQf_l7&1z<BvKJ@Zdpycm3)e1$&U`G$Kx
zoxRtz65fxke0)ZoJmtThJz>e^ft+?|*1qQcf;Ci7H3w#cS_taF2=)@7i?1Ha6JEhM
z-nlnh(ZuCiKH|dLvX5^_zkZ4mMKzR6Knb`PwqHBlQ4wYCUu%%-qEZq_e5(iMUV0@9
z!#)QHM`5N`SY4n|3bG?Ce<A$*vFZ2*#tz|Ff-sgKhpFe5tylWjnrkDGr3RNMog1gr
zg50u>OLdgXRnA2xD80-a0(lxX1H@^8T+U?v=<xZ^fo&12dyIXH#OPJ!E5EOLuc4UC
zsK%;XA8)ujo^!nsZ70h-<apA3!${bV%y@UCxWk!AxsfQ|{mv`j_sNPPpJs6SjoEE8
zwSPhmJs&wzw;0Ka*l(|Rr`K{zVe@m9ze?4M`0uXLSq#>DEt62&Q)?Y(ao~e#OQ7gK
zk2)lcsX@9!g$W)eRSl|+rggtLIMXd%Hf^FdYRDikm@m}jXGcFzJJmHlR*wmGRJThx
z-b7WZkch!s&$caUiE{hn+uk!BcWd8G#|;msP<+2=ukxkZCOBW`wpFv!p6g4UyyL!A
z?Ukupp5DI&0|Qe4X>cX0^x^iuLT+@9PRwpODW~#0AJCY4l)Eh}cTF`+YQplFMj?3-
zoZ<PDads)aknZ!vs1hE{+BgB5wMtsl1K&Wm(w|P?cpkUFSMJCoO^!xgL=C|1ugTlP
zt=M)sgyg{kI=uKW8U2dD>N4%3YPq30w4pAXd-vsyBY$|^<$xV3dr4%pZ%5K^3+Pbm
zrP3ArzqN+Xv+35s+yzqB@+PE!xM;^LZo`G2NxDxhvYzbMTYs;^+#ie2!yS0Uyz|2Q
zk-8DK(xD}DMTY<#(^SR{WN9&w6<#wlxG*Fjii@{tg8*rEhX9hO_Us-{Rqd`AR?QK{
zrUbS=`tf#({GrZ|PU~opZjc(&Jj|_FA1l65guO+`cAa?moc&#kpZ^r<7;3SqVF5wO
z8m!1zBq*NLWD`ET&g@boH#)P51E2ef&}Mytt;2Jhr8u$~QjPa|5<pKYfd7Ow1%f_-
zfxwL2gJDqEp=)_TUaqNl=30*EKi^xKv~A@ACR=<!EY9?y{*L=ubF_5dA80J139tCO
z&&EK?Q^iiSBlWKhN-mW~w+GaPhQ1i_e*sNEvcECH-iQ|LgzwH{c*C!QN8v+bUvwK0
z3f!x`{vBSay*Llvz9l4=ley%uZK87Ho}>G01+bSILyoeZTRHS_cGxRp*zEdZK`p7n
zCkTkivLg(7p$-eUhEOZjf0BQ1vXAgPcqY$hn){KaJYaRD-|<Iw6Fx;W3OQ>K-is~j
z2<hXDGg0w#it0sEW$Aw26DCJNVV$FCHmy@;fFpcHATb5)Lo+c{HRz#Oy46?g#~7qk
z-v+pd{mJd`XFQQ%{yGrIjuMMti+6i{UVWy=V6aJaO^RVCdGnXHa{={m>qhv`i5ZAY
zsEz2~=<Gf<5So$?0T(IpLA{Bb>XZZG>ToD}G^6&-ag{f(PUkrxwqE4~e9x30)?dar
zh&Xb6g+EPT^6nKxpdnViG`5uI*Lq%|?#1Vr{SPCV9oRdgID}!&3~Yvv2Nwq#DBHw#
z&_}Xv)beMEVp&c3DOLU`JUeNOTh#8^j35{@OfiBd>Gf`faqOG)+Shj<M=qNEc89L>
zhvJ?v$z!YV&F|j%t0DP&c*OIqdfm{LNx1NIutcZ23K@{1@~?F!pd1qvPm8uFzUORw
z@5L(lU>=%E81=bDlpU?1&&0>z3t|`Hq06s#UV&bm;9&U}703Ri&tQXGecex3cbm9|
z!Ss@*JiSZ(&xh-ObKVE-RuK|GB9V$kVgv3Mr3il+0EqxtwV&2&{O|CwTRF{AYFFju
zyX|F`LTmhvp#!Eu9dZf}k+XK{y4Ag=5dI_lDt_PXu}l$a2lhZU38)*QSM`QB;4?CW
z<_94&#K0PIjcS%awbNU)+6GcVY~@>-RBN>zzdu{JJKH3b5IjUiK=L>+qpU`3LR7)g
zG6~qiPRF5}5)}g(12&UbQGtUXY#1FQl!4HMtb`{N&O;_3B1$x2yLcfn4w)$MU>6Sq
zmp;#%^7~=&_+x;~Z$Jmum<U11`8!}A2*I$203Vh1f&Pj4N+kTIh`OvtU=MIZtOKsD
z#PKSXG?oe?TtE~n>G}$bJ~hbe+~xD@qv8HSf-M3f|5Ac4p5z|A$>~}iouUu>f2dFN
zvOuhrZBi%iA#z#%77DQJDxDZq{xkPTep^C`uu@e&)T#Rf4yl$GVkV-^`JqGb8|r2c
z^#j&Bf<v-P5~ub+>T;t{Ily%TlIU>=ZUM+@qPm=U<d6CWF(Szt3R*~<EQchA?GNn(
zs2+TSwul}>70&(eA;>xEbOh`is@Q4Pk$;gQ0fqqZ1Sw?(G_F))u7?5UX;Nlpf#5ri
z1ES~(=p7vjn4FU*17=>&N0Ady5!Nb!mr%3y1{zJ5j(pHIh67>dK!N<CZOkZBe5fp9
z(QjA&v{WVme(Su@X>apOaRo)+>h*6Q8s**4^@SBlSyfLKUIj~RzVBee+I+rhPb0+Y
zyPJkZd@!CN7sz4A&`^gl;4F3u<W7Z#O9P6K0Lu(PGDK=M0yJ1OEwn*d1hNoef;iT{
zmEs=q9LSL(o%KjS8T}i>{UCJ@AbW})GzEtx^zruKdplQYfQcQ!NDw&CcSrWb3Ic)|
zpZc-}H7XgHU82lTIZ$opM+yf6#bE^`1}FI%wozq<<Gc?KSaUnTvjvsDia^K^<OZRr
zci}giD53dD#r&Mkm1tLzY<KbaKsx5Gvd;M0dwlbI^-jiL&(U}k`br{Fl%)jqC%ys7
z{N)bjgf<4`KJx|JL<BHz)Y-Pcp!4GSr~JV+a%xN>ci`9{EMy=11GjF+5I7_e^<_3m
z*)9jpV4KST8R$et4noipA`%4AOL>PEH@;aB1JjCkqh=WKdbfjN-7>+5!S`uR!6YCM
z_(T(!bq}2=cHl8;6o$A!Lw~5?b@Nted}wsBRW=$T!Sy&S+`th${dGDZd4`7pp=5=b
zHM4_;Aw?K0q_FD`kq#l^bBdI0wN{uz>`DGFz!d$2f0L9U_fJ@R9)6QB8HNYvFwtM}
z-<=GU+8OoGDbO&8c0d~Khlom!@)h4+B6fO(C}hlJLEdPOpf(U6B9YMwxf}x!LWgAB
zU=y)TN)mVsxL6zFnSr}g$ajIk(b3^IL0^m$YxZ0awNA%Ua83FF?tnTF$Cl)`(gq}w
z4l0B@b`rOGFJKxBJI@F%j3As-s9W9-2Vte^7<u`gt_z@aVz?$2&CAFbGc2Z+G;E_G
z3PimjFpErfb{+-6gVZC=Z0r~vMt-*5XvN8siQ-7gl8+baq@{Ds5SdhAMG~`3<}Sog
zx)ci7m=KAZ%tj`e9N=iPY7|offW(i^6rjci8P04~7&m&ynxqHNAZ+%imU@pteY!j{
zlSMs4s8P$Wc<f{xu#7Ch)={5G*T&Y{ecip+zFZusrgzBo5)WrjGeF!9##A<FG!Ca>
zr;^72PcVU4Ea?(tLr!)^ic^1gmp+EGFCck$=;}K5e2o`$3g`Dn#Wx=yJb2{{0Rq_5
zT(2Qx<_}o4xN!0WrS2pk5MsbE7}~cAfZQtj!S_CtQbP{r7W3rm#k19lK*NNh41gNZ
z2XMYSK!juH39AG+fg!STq?$yh&<X>9;9`M>pCll7zH|6U64NJ-yqq2$W7xH}0ofpX
z0e6E;wiXun;XWrKj^>8Iw(dunlP;+PefD)32f0)v2mz2PfXlv@c*kv6QkFWVlvt3B
zu{7p-koM1u1P=dL28T|<>U}4yDDfXe+&+U4D6s6G<u&=Kumyj)pa>35Mm;_dH=d;l
z(zviJ1H?JBvQX7lW|=|JG=blf1TKzaX}Fk3s+e*Sl87b);5_XfQfjbH>Ao^!9?>zq
zFy0a~0>FagTrMN$I3^nY8WwbYW&*%+c<`Z5oGk<|U_TC7EW&cqmI$v1atcz&YD$TR
z3Tcx1X6X9q)x>z!42r>&Y}69zxELVWL@Nmr!hVH;v)G7v&u%&%!4kWmO2fr;@xa`x
zz!s^BRlnVVX@Jql`&oz>P=)YmXxk|NjCu2|)!llU!7%;-z~fG#O#!aKMVg}%yS%|w
zAgLn5Z`Y=S%o7n)%j0JL2gxDdp{LQa6?dkl@i+uSN8wIF#G$Ncsbhi&p5Ka_!-ohz
z>g;ql`lX-Eu=-X4RwltS;{nz4RDP4#sOnkY?Gw9Vj@~a28rTbBbU0`oTk=5Ahj-qO
zZ7r`n9#6egZ29TKqL5E3&Ij0xVZw1?YZH($Ljm}YL+F8pJiKakAsEp)@U&SpC_5nV
zxL=Lx_Pf4TQ-BI^Png3aa~0L)jXou1Px_i3^8#oVnx~~NoI{-8vY3n-boexTdDTXF
z`2oo_TxbcV`!y{B6h@MP@iy-}sIDa*4(<vaz?ditf}IE!K^q0OkxGIJ5fVTHd=at<
z-~X~b!n{ekC*T-@Qv<|~p$Bme(y2B6!~I9nak(n$s;+MacHqHr*hmj58eh#(I(Y+*
zAsl1|K=oQ4yQ#=DVdX$%TWKgf-U_0^$XqZq^ZJkwosljkHq_u%Z#R}%&?ur1gdqq*
z5Y!JXK=q^KCs+yQQl|of!2(VnHNUUU2e1N8Ac`QeNRmK_19H@G^gAhB`SK267Gh28
z92v+SUfILnF3KTvW!~yJHsX_**zfd#lHTsYxn$3N05rFg9@^5p$^g;<vQ%u<Ep0XM
zzcruAc<Gvbxfm{1$+B_kU;+fd-$8e25|C-Y9L~}TaArUz(89$iM3NvfO|0ZM5d=V%
zd9k1{gZ&a^*b`%gQyV%f*UCRV`>!FVt<}Ma*I`PZ8N<>@LdvV&Df0%$ijxB&(GWd<
z4x$tudGI3ES6C-9Os-5Eeha4Jf@O3HGI2hES}24e0~teNcqf+r<JH|Zd94L;H@<xG
zk7tfZSRFzJyo|h)0@`}C&?gEH7(GW0cKO$1w^io&pJX{i53oNK-@-rN1G9JEWrsn`
z!EL$|kaJoxY?uZKL8VFsDn;j6rb3aZ7>RKz@<!THyr#Fm;|>X&S4C`D8#WFDkA@CF
z<3LS-++s#7Vq1Rw?LzFc1%m~dMhTcZkT!+DIcV?5gcDtk;|c!SD8DMVbY0Pj2YV=9
zLRLB60i5z^R6-GQIeP`4tRS6czejVSv^Wb66!syMm|9{*#j?@xp=d%_^LYm#Adp2O
z%zzZB0N*}tq0NxZRe9T?S`u*J&pHYUX<fM=bn%i38v)*%ne-R=0U?MU%oa8VK!aVL
zgTxNzO0Yf9S4|5{WbEMVe2_1U3FZ9Ka^~>!3~UcFl=$EL*awli^h2)`0pr7!2!3HG
z$pI>dE`v(=2R#(swxhfY7(6s9bEe2-bWDiCG42Vo$k18}s57t~m;g<XIz><PL#8s9
z4q$RD2c+b$j{W^ImFE(5<B)Y;;J_$O`Aim8|57L6Keb1YTzgU6;D-j@Kyey3Ga&$*
z5_$wj9ZG3;vk0OQ%yidmD!kLhn&5#CK*2JpZgt>bghD@HDL^Qah(gjSOIZk?_S%8(
zNEi4NpP(UT0*7;qd@uzB=|HtAngfLjZ*_q46YJkNbqVVL&<Jy2KMGEtv+M&qurVIR
z@LQ7)dStWk2Aj%gXNOva>|h!qJtH_R*@(TH>yh9}68Uip0kGypA%fJKCc$I8;N>v`
zp~3P`S1qCQ%^(J`Vh|G%CPsiXvXBbgI+|)j*q&+OJ39e4tqyoBGyud9H3q9*ngD)7
z^mK>G@I^u41VBD+0|P>@KJQ!eQXK*LPXGvqX(S4X+UORbNe@$zLW5tZ>Jbr$jC6>U
z#}MyVLI-WI<5~oncE%V`7C@%J$4%lJ8=-^_PNi?49Jzt6$qq^$(#Fh%L~J>>*8m$%
zK^+W-CznFqGy&}l2@iaA;LWcFgdLWO8i5`Y-L;cU=r$awL&OQlhO5xY2x)Z6PS6@)
z8Nn6{xEhUfR1P@<z=A-~d2UaUzLS3dBnv&I(bzIlC{)<;pvDG*99mOvAUtC~FL7zR
zMw8<w$Jr)ua;MbloCt&HVP4?nuvrQk(*f7oSl`Gx1wgT=9mSGl?+UyoQ_Ql53PPUb
zoyqOs;3qg9gY{+QTB@3s=zM?A>JLxHL((Dik!lLPzuoEG3kS2b`?*N=4nl)a-B@{`
z(|;sw$$((%=SY^Vq60-S)n|v05Jo+anCo_I&Y4z|DH<45t0W5+aC8<1Cy6@}8_fWt
z0KuR|&m>=PhWww<XKjQXFi=0T*eEF?!DLI5`8G|2K<igInT%r1PY=b)O?}(8In455
z4uj(H`RA<2!?^fBFk0fy*li5=CeSGS3ES8*eP1gI6%1<FQ^$yP`{rr-feZSi)kRwf
z5aEFL9U2dc0T+lh*(nYo?aV1K^EhPD_rS2yA<jHdH3|lTduuNy6(490c3}V^1wD~W
zpg||MP{?3;5lRb9k<jWWbR(ld=w;r`0rVPnItiQ^k+wWd@%a9!wgB4%hhjcxZ6WEN
z5G>A5FtF^WspyR&k%|=+^`rcV1VqFWGh<DTha;Kh*nmvdj#f$#hUuVB5#ecs)Fe*K
z2$K|PoeK&YKVUQ@^su-|ifJ)zHgF&w4+D*Ia0Nd}s3n1+v-R^1CqFkrsP#5mj5cHy
z;QzLMN#FA0-PS$i3m_+6^a~wKN<eK6wSugP1_=l&_Jp2>z#qTs8%iY`X~<Gz+bXbH
zl{TiKBqV=ch|}=kz9#3iYC@hziNsFTu?nVo*X;~YW7?9K?XXD9_<fMUzgEq|ZOJ5(
z5?w<>2Resrf{Zt<3b~9*8Zod2Vz4qZ0Ey)ggd=&mrG@%0MPO=)4EdTa+{bl<9Hz32
zkQ99a3Xp<8fIA!PcnR7~Qy}}Y6*UN%7C{e&&k!D9#I9Z<ZX^T7nHmBi&pNOiFH)b1
zVNN-Rws&L9j)AiH*{X3*-fB_cPrqw0VcJk}O@pw}bB6b$*$kbDsj@t9clThNPYjqi
zo60#*@4N$mrq0o$CR`h;n*M{l_Gi7T0X&9D?fNNqu`||m2a^RWdGes@2lRmMbqc`X
z9^Uk%vFi#@f$Rk65f;zY|0y6z{oQ2!a-{sF-{mB?%a__dAfwoE&6BUNG6%6;wfT^N
z26e~ShpZY5t52KJ^)g$4z+|`C^&tG=s+fFV0Ewb##^<~?z|BspN!*KmA>8?g0nCDU
z2ireu1K!q7%uvq3ajxT%c;;2|Vr&EifI=Gb8oeWgFf!s<Hu~&39&s0SO%Jau8=L~3
zNF9e@Qk0!Rhvhz3&`o+62p!LP*A6UgO+y&vNk_J>=LUvA3h<kLGwrz7(RM?R-9fm6
z1>mOhigmHTCVHdUBw*n<K<x*1%#fNmnn>-NAt4DUk(2y~Er`vVdrs=(Aa3C998AbT
zJSGzeVkDb!N^(ZHMS=jJGY0YZA4mBGnK$S@!2A8D6hx2fURy!}gSYZYR`RJ*5OOfR
zVG0T?!=L2xzw&RM1V6cHVJd<4AC&&Me@us>{_Uc^c~0g}A<fWEvaF;|?SOj`l{Wrz
z@Y(v0dHesb{CNubf0qB+iQUcMXK!6}$ck_Iq2U6MicLh{`-d&RXY2nzuU}^q@pgTW
z1qOfJXvR+^27F0=-^|&FFvI+-hLEgC`7dc9(j<M@OoV^m_Xp?*_5P#$3jb(-WiE>|
zz^D7L(F)x~pTkBE%dP%1Pv(cPws4Ydld^tJVL0Z@(faum<vUyXeZ9LI|G+ou_ix$$
z65}nQpF26fbMjxJ&Py4q-13gkpR3vYaz62bhyk+vr+N9hzennX=1y~z)O&jWOWMU8
zxAOwvex@cCF$PurEZ@XPNJv?E_9iv-Kg#FELA-afc<4!wH)VxCJo6#haC*e<F0Neb
z(CL@fGN~$c@)Yn72LaW2Z{l=ep|SK~{=>2wjLz)0!xj+$CT?qnc@rdl+F~ELzYYmN
zfvM&-0^>Eo*t=?h4sH(6CA`3+1i<SeYRyJ!h9FQVN1<miIEHX-TKGO#Q*km!tNvVr
za;@wb(^JowEh)c4-0<|_@$4F>sB|53#Y&U?&oOLErw7P{DKIwf9gi|R-g*bHV4>Hq
zuI9QKg(1I4Vd%`69}1+w+DALe3I_cmcm=c|Cf-nmKrtBAsYy+ni!&|1mC+;KalpZz
z``~I|X1Goe%xSv{fzS#CHJCUC{9Up=jCv12I`Vn)XsPl(evOU-X*pE2OO%kb8Uay=
zhUi6unl5u~`q4L6R87Zz49<5P<Xq224AMht(rYp{?HtG1V_!x+jUK#)bY+`J2R0GJ
z&{W$P0eO;nRSB>(VW!=JV7A9Eq$AH`PG-0@-@tOOq0f7689<Kqn<Emq2u+62X2x(-
zGHvnFw9&B4;Mw8|l*Gg+Ovsx7R*#XAW!)mK$gsza0|AZf)n;Oqp{1xc1Z^|ecOB!D
zdk(|7PXAM|Z}L<>onSq152gul4tgDBP3;qK+kk$)6FX5LLJM1BIxwC`1A)YG&qM2%
z)3?5OJkC0ale14@JxvqB{Jezd13+AyNdg9rK`^$JGAEI8W=Al9VSytMLm0@V10zJu
z6u~nqsE1sVMnF7CoO3NNk)^a**(8%_cWcPxa~yJ}M<Ip4pm~l$77`nNcCNc{D$@gq
zYe+UKLNHCZ=4fs=7aVg!#Y{qs>=x<@@geDH>{DnRH%AUa^tUf5h+xduHsXhlB(Qyh
z*fi?=O>Fk!1K6U}@W5=AHbjPlMW9eIC%-&T5~e6_qRR$3*CD1j=Lj1oPrOX{cF~n3
zl`EDHtAKq$zehgt<=;6uWwUOUIJ0vJlJzGBz%p%^t{hmV5vhSN*tyWpAdS|baQNja
z$apZ+JtoTv$xmcM?kL?K5Pjr7X%(Uhk`L!7C?G-*_{l%W!O5E)m_#sh?I~$XN?oB*
zX8zc<t_vk^$NSFvtN0?j+)0M=k(ya>s4NO*U>GHaG)5%<0T3)hD1=*UAXHTUx|MR)
zB%z=3yd(@UsE1qmf9g~BfBBE({*U1g((Omp`hvGmKtcH4tTP|wFf9S7;n4mk^Ka?;
zLQrwES)?Z<<pcjZ)Gc<wh!x4A4k55<Hj*eK`k>gv;nwCPi((odpfi>T-C!uge?vX0
z&G#l5urLaQ&(ZtGm}YQUk>1QmB3CAC4nk=&QekA+VF20RxSDVZ?-5U82asjT`6jpJ
zCr7`puP<ceXaHu#_%SxNC+i|6WE`7t*DF@Vw_tx%GD01R#5?*rq3d2D9s6>U1PLSv
z*C6Oo%;pAN{cn`9UeXCqV0!fI4$>PzBod-jT+cp>ytQ<M_jh|&k0<5!c>dk_cj5Q|
z^%5eG@Cf1lK<jjxh9@no{ao~m+;7$DB}hpMsuSC4EkW0_@O=*f?FrP=T~+5=$|$FI
z;vIPrjG&<eo`p$bLehePGCYC<8=LdENLc>P4<Z)9e0Z0oTzfK<3|~>c(RSG7J>?7v
z5boTJ^oL@s(LW|Y<_b=ypwsY}PU$32Ey0i=R3^6)iBg140}>D<KHzYnR>%_)aIb|1
zIGmZg^IBlA$ue~jl0h`-V4$lLMwk)Y)q*k#+R?tI$ThYK!<+Kp5HdG`LfXnriw0B&
z7*@nMLg|eFG8ily$QS`y8XZI9qTL<%EUqA%5y&ecj$^=MK}p%J7q4LK=x^&VwWx7<
z)WOz57Ffv0-*y=YjI>E%#s#PIFkFLJVy|RnQhNxVP1e#lL73jnDW!)CfvDOBr%DgJ
zO{0@&`K_;m((}F-q>_jc8u7e&uZFy8X}ClO2QmTofe%Ly4wc-)X2S(H2uWLkKXd`6
zy&xcrz@t^(`Cvn+IE9(o3|~@v#33Y<u4627#{7eT&L%bDaCC8$-`qUL0BOYPLLAzy
zAs|w&5fcC!r!r7$8ig8Rj#`B9Cy`b)i9t69DX2V61-R;PVZiYY#O;ZkWV(`0Iqnm+
z=bn!F`Wpe{hMXGmwv3l|2_%pS2_XcNCP@fLNiBi(;vF&Cr1?u&PIE~J-wsINSIMr0
z!rYhvz-OtLq`KW9BxMFFCPLIR>~AX)uL|_*mGW)4@!>u!!F~fYM{GCHlQ#;f0vB7-
zyf&u4M!rql2Ab#*jFLt`XzU!FY%p?-7U|5wJdKCma~!#(9>Bq^C}>C!Ycg1K2cNKs
zyo}id=XT@~-pb_Jif9uCjf8I5@_2-#Nr@-ME@3lLcsVvHz^hP5NeZa>rb(J8NUZ3c
zr^G$`fy^&rcLu3ShFE)pu7vV!_Mv_jUU!@~ZX=CjlOlqp?C+sTwOd<+4CjVS9Ih2*
zyD+N*A+x@1-rRHo3*C{`85Q&&J^4Qqw<Oodl{+a%fzlF-u^=cwMUcdTjNt)eFnMyb
zOPruSIhnkIvBHL|cK1GndE_~T#tb8?cLHYQ9c;v^aXJJQ6ArY8q4iD<d+|JA#HDR+
z5GQA@9~R_B961K)g&qv#cGUq4C|RuMSV_J);|4ki3LsGcqDgkn!)%bN@uN%XMCH?N
zLDuOhwI2M2x+IS05(I=k=rK)<IJ6rEW03uHiVRrL+)|}kOh`q^wBT~E?MT9Gs78&W
zsI(Obz_cx-=iU_##vD{AfdU-|UPnFs6SeWw@^f92uxzX3^bb~~u7^-8{O0x;s>eow
z--t%X0F~K+s3Eg4j0)_yZ)zIEQ(Z${&b!qLd2x`{cyjMS!R`Rg%RyC>v&{~NF+Dl3
zHajeL=u;Qbpuue&LIWG827tl`?x~9mKF02*t2X`tih%diUF_HAHlT-t#fue}0ePV#
zwA5<11DJC%&0{+kBF()q*UyY7$V?$wx0K;GL}VPfg;>OgR%nK~Or9Wa5Lt$6hhrPE
zDr`vtI5(6oT%aA8LvK!JZaR3ePXIh)Agy_m9G;z11^RS-&pv%mCh*=0!>a8jG3G2P
zJRLJTj3<swG9kc=aoZzf*{q^(MKyXDIT`XYc)-K!4^a1RLC8EqU@9S!3XuwxU?(6(
zMn>D46FZX#J8u#!!^@KzN3pAhDdN`$+}B`21cFd*rNBeBZqpVu%V2zEh@eqmCUO-Y
z7PECdF$^rm&Q=c0CN2trh%7?GZ){>w?wL=Rt+cNjKFpJSXchGCC0fNWWR0P`r^HWu
zodpAl6NzF#V0JyHuST5NXX^R=+6Gx`3QTq`ZyDM*cZ6V7v2mBA)-;m>tGR3yg%Hh?
z1`8%l4<m($(p2>QXBM6#hfd5M0TLJ?2tp8sS~HS6QynK6?Gh`SFm-kZPJ<T<vKWhZ
z;1rcWo~+&B$5MU9ffiug*fujKuqa-n)(YRMii{%|#tv92N6;$}qzWBUD?Yx$dw69y
zK7Cv&+yl)gKzX{DPUxQ*y}(GqNhh%Aq<x+fj;e1vcI4L-2h{{|->RdB+=q^M55Nwp
zT2V_Vl?t-KjqLaQ2o6ZdKv4xwryNxjLI*N&^o7F+_UI@<X)6STm?gxR5Rr756#sLN
ze?zApzZ}n~1kfJA82A*~;JSA41j`49T_9jNm2wD3$aYO_Lnz0t1}1eJb_<Ndw??j9
z0NMtQ#`8!sSuw?)#2v3^sO1~)<b7X5lN%7Rp`P8oZ_yu0_Q4$$nV4sbkMIP<ev_!o
zu@a0{wrqGkccxNWTQ9B4T&ZoQmXxwE6NpFj3X&|JI$K~=fD6B)pz(w=&|3%w*d3t0
z(RkP1b}@1(5DKOIbO|;Ln8XAEPx6c?Bdq5Oquj8QwEc)4;y<Re4`<4?(d-l7j-N5=
zb3X-prMX{((DWm$k=ts~DoR05wb^-3_7C`lcm#66Ptp|Ak~{+V#QWh7cGmQ-zf(&k
zBrTRoSvHV?7k+wev%V#l9#?Z2jb-Ly!pu^Dpj4(N1{f3lGzfD7$)xIh^x1_~vi8K6
zxx|WK;5#^zolUX_Li&=LNhuKcFVw!ETE(h0sI~5HHA+;GiZT*41xmtYKq2j*HjuHq
zJq19gDf5ZXu=@&N8VQF&W(yI)oMD`}oZDh%W)w`#IDYeb)4AYeo;S}yW#X<`mhI#a
zZJ#k`m~O;MjW8labqctTN1>f20N8j&fI7~n)Y$4XM2qodl7BdEdlLcbL%m>V(4WR0
z$HX>IcrWGqH6er_*kv$58f%z<$w*X^3{ZtR3;C<;D(xGLA~z&KON!925cG;Bd^I%(
zkWlXwvI-UIh~Ml%;?+I!L+oe+{0JPr5F_{KS;l!M>l92J(0}FH$M}<TPw|bR1jSHc
znx269%H{Zd<~yPM_`X^@BYI5oqXv=I>K4k5SZ)?x#ndS{lJN?iPJt0Y$>frrB0(SS
zJr9?FaB@GSi3p4M88$Ru&d4*NKFo3s>I0FM41gXC8W|6XNPYWCgjNI@21Tg$ArR()
zg{U{@CqFczto;EprzxdueO}@jUVgfXBNdPcgcoh+d2~UGCy|qqZ1eLXZTHCN?m+53
zouq_406cn>P}PpF@uJAY#Gx@lUpA^C9VrR`ffsbDgVQCGphY$`CSu5jSE`h5ApcBh
z2r=y>O@l+u2zG9NG)WcI1@z(S)y!E3+-Rqoz_+Z)p#gy3qj?z64_tx-1Ga-q3{!3~
z4r)c6l0Ko!IhIxrz+iZuwj_{_*mZFn18g4KJy|qAn$N)Oi~XG)2ak37t*y4-endCi
zs(~gH!xN0V14t2Q9HtwGeFi`^3g@sMBSccLKoy;uVUrJV@hEr*U=MK@z9}IJ)X@nC
zOj;hr9|J~(ci?-+q18M=IBUGAs=$CrAyL}K&m4NwXkJAJ^y2cw<K2KP=&z^ZcKrJ2
zN)Isd4yTdM*65QkZrmdG`t@PD!W)I$OmQ8q;H=CJUi>ZsY<M5ZWp{XPevbv9goYr2
z2}<@>xRdRDuZG+L5<(Z%aC4jh0uVq52VAeIdj7@i({xdMOScibY=vKXC~SbrM1)|)
zj0p4h^F%g15*1dAw4wcl1|0`o{%;DsUeA6ar4*7zsb3qLjUq@u7jl{cA6rJAhl&)!
zc==3KV7S;D1Yjxnneo5fy6H~2J}i{U!}gS&2}awrlY8$4e4`?vO9d;>ZU9KB6(Gdy
z6CgiGhwMIVDN8q}-xBF5rAmaN$N}>Fe}w9JKA@%i0G({9jH;-SG^s%OZTyt1KO+uF
zp%1offC$yEdfKj4HGBTZ9P2f2Kdi0EMj$`}C-q4bGav6J4|z(igz_Q|0EkE{>Aj$y
zvkA}MK2VRM5j{`C&t@LKrgH-Y(fJ)8gEzF|eckxozHBxL0YqR#HFlK378^Rd-kLPc
zGzu{0B}|vGWG;HcI);YWAms*(KOQJL6jIoz2kpVFn#R9{D}1mt6-XT{q3H(%IgqU6
zsLKP49otnXm^oXFIvhwxmoWARXY~A^uf6;8i5p612LZ|PJUWVM)9$c72Oy)e#9uFP
zeB=cE{m-?F@Zf#r+6UM}ugF?6pPuYGo@me>L-;{R#N9s9Qf94?EQfoh7#tJ}-eC%m
z{NBE?AJBe-?k}*Ppq^o}o@9R5ufWyyd~h5}J1a5P@+J(~L5nbIL4@rQKOp8nrF4lP
zGAttP4}DTZpGH{;)DV;DNEHM@89!Hj+gnR&bfUO~Hbb3O_zQ+U-T<Qq^?-tJT$L=t
zK$#*?ks%QqU@%jdQVQ9r#tLV{qr@XUkA+nQ{Gd^aqoD$ie4(54TMx>9e6RkP4&>Yz
zEdPkU!odt;0o=4O!1xg#f{u3lFr9*KggwDUMeNh%Y#G?FN&<vRPty)l5S-|@#P@tQ
zz0%jGEzK#jNlQ~@GP5Ya5I{K}ats~Z!>|tmPe6Sl#OXf7u%`g{pVD$TPf*vg5aKci
zbEE#pn~CIx7vZgWC~v5BgEstHPwSEl3l6aH368+6#}k>#8uqYOtGM{kG+p3sIDWSW
z64dZLNXa1x$vlUa;jaj$17Ij2;8E9_lo+Rm6zfTb3-*Xg1|c>)%LhoFDj8Z4{6RxR
za8N=4;6St9p2%Q9Pw$F}<XPE;k11FPJqUsP=jcDueh2+u%5gjjlZoGSU2+gEa;z5*
zfKaMY1Y9a4GHXvL6%bP}Gzv;$Su+B|P5)nXLlck3`gP^`Pj0Y8@YR)8Mzv!-aXjF3
z`Q7G$N_CM7zQHt;tsY^9Az>nbIZhr#P0s0=a|#{IGgaNwHGbc(cZOVY=4N7kXfy7K
ze|!m{{e-`W0H*;2Btww(^S-dg2%{>#hXSbs0pFrv1;SMZfxu{N698Z;%msxf-z*Gk
zq4wBl<4{cNc?G~587v41VCng93991L-GOyB94KXXhGA%C!tC_hM9d7hGNsXu8C;Je
zQ`9}L*c6Z|3{puy6zjnF0vAeI0?33ehl$K2I~*K^9U?LM!Tlzot(p*j;S?y0QV>3L
zP3;O@O_T^a_b1c(Y&XU33OQO8z1VQg;ytH7Bhb$;wygcy&da0=eyd6$4^8K{vebRh
zB<1^sHy0glrtYcGbOW@3^h*k!Sqcf0?YI~sSY{X*jG!z`oy3<JOIqq=h|o$K0Vd#b
z1(ItRupDL&=K%xN3|%ArqzX_-Od*JA3XEhx+<Epr%=zo#68gieJ0T^&k%b?=5))&$
zi9=i-MIF<;DVLI=h!mYj1gIhgAY_HGgDTh{dJ-PV>(f&3SLrv#l-Fe(#l5SK{Hv%X
zuqc&5N*Dt~HU$F4-)Me9&X_R^PsPO7W`sxcky{^Q!-24yzN|LGs+YsoQg7Vp<&IWX
zJt=T3fE<D3bM|a9AZeH!W+i2!V(i$8Rur6`=)Y{hJB;N2u~>cd)L(w$Z>c4nL)I}U
zN*ElE{1fspL*yR7_X4*-bg<}p8y>=d&QPHtRx&~;f(j!Zp_pXB3RsYm#;rz@3M_#r
zl8Pk#8d-`1P;ED6xpR?Qg-u~Vu$6&Ag_bagj6@2Bg9EgcAS4-BO9hsf7+EHytYRuC
z84L4=!{|Nc14rg=8Mt6+k_8GP#Uve}aF^mi8NnD`l99=W)1}#_24IF|9BjoW&}gee
zaX-a|@av<jHc?r~7%dd~Zoh8{oR(2#o@05htM(c;yS6KCmZNI8;x(=cJ@JN!5M+u^
z7D8T9kl={*=Hq~iu@J<+@TwxmSx}wHtBUyRTWTHW>wZEn%s@gS3kK8Xp7IC8EE9LX
zD&U^8-=}DT-h~I*m8r`mpFpli;Oqq7)2M-?qqElNA>rbzwADu%OnDp!$RH3V1F=28
zluw!}KX{TC-h?&eEgWnTeg8gchdvX-)Y=;r;v7}62#^D#&<H?)dkQe#6`(ezi7u5&
z8OtUAeO$5oKFt3zA6EjP#1KQT|L6TX3OhrA|KJkLM2GKSz5&zBi9z~I2kQ#5PFO0$
zp<(sz8;S6_cVD?XdnLfkO-qghCHYc#jMwm!@n^eLRR`XL$Rj6_J66caygpd?hUZfu
zsZ!oLpEWgz&+wrXG}B_CI9fm5`vR0P2p1@Upucdt#pLA3n|OvidPhS?wEV}{CX1*V
zr|Gw`fj?SAXg3eE)Zihn0Rkxih>{`_Bq9I=hzKx(ikrk`3Pj1#pvwBt6u>$$+&9-<
zCwfcCqzW%gze#xt6ZHa3fXVZF8dE*VLrW<{3kAl@5-5FS4+_77+0V3QT1o_<ic&xz
zx++&AlL7+*5aGmVD%^s;V8jq&nRJk1QzF3%J|||(EX>DPjmY1@RD_TkvCF`r?4#H@
zaKZW`D5{bbH$|z@9%tFNLgM0^-9^V3xPBXLx~eH@>$cYCNKx+4=Xzm<_3FRyu!mh6
z=xL&h1cb}2Lllbv7^E;+o-CV|U4UgQ0tq7$%3<gUcEAi6StWjx^q-*aG}PL<kPIO!
zv+&d)s?(I`DUlRMaoGYHGY+FIRJKS7;M?HmE?914j?EziO`hX2Fh8{=JkmhocPDv>
zj|_5J8izg-&VDV<2Uc4tTf;I)6?@@i*GOtmPo?X5;K_RBu9h2x3aMcs6$l){nO;hm
z1u!XBEi)wM?tn<{j-PnYqsd^U>I>_0BcNlLUfpQJ*wC7oQL<Kz8u1i23mEVdk*ULK
zF3^KYOA?hCb(WR~f^Q2sBb1wHBWP9!f%ZwmoXUyTcZ5jA!6uZ55d5+#u_iUt3p8lt
zYa(GUy%7wv(s#Z0!QC|IU}T|@I3fspH#PGK)P)-TBkr7=XMg251i6`@MV2e*)OV`a
zyJw)POi`}oL{4y6qDeI7==qZj^?JeHeVIH)oTqSkNr|UW_PAU|sQ-y$2wtw`t~(PD
zG7*x%r_wr(_zDJ#fEj3k_u$%opk>=}8tP}R7=At;GN$~x3<N)B{vDQF$#XJXZrX+;
z5H<@N1UE(G;6JGT5I7-lJDr~&{>5R5FT*<%;Ywdy&tDSfT*3NUxu_Kpks|XXc?QQ`
zo7u?J>($k?P6(yhW`)L(OC=sVA6%Pg9jrDEg`SkA*$+vKa12Y6VcA@FJIED?;xI1Z
zGF;$P!Kz+{#CYX6$+Y2QMK&ngV_gQcIgq6Zh;jo|(XZgl;p7^x;lN<D&~!acU^q58
z9lHn8L_^i+4oE0=72V-VmcVem@B`p-ABgIPop1dBlla6xDCmV6B%xqrW~D?r#J$WT
z!<SM0P1D1ZWU6-kVJQlL&@En&@_l3~DQOUa0>S|y*@ScJItlV}p;;!!N>i#MV93M(
zp!wIjVCo&L0Zl>zAFDl}6e7eRfP@JOh&kU&2q;?!7z7rOJHpi9q!%SJ`}yH~LhCMx
zK~LgUC7kv2<Ge7R6l8>4Qw-`o2dYg%&&B{N1A*28Xn#b*2s+4immeHlOC2f@uy+{i
z+09UAk?0u&0jY6O#~#i^5>$3@UvgWi61yct7(ghxZugox5%AtpS}Y`xIs^uc#P<60
z*YxYv3xSv+Z^~$x+uig!<{0{SDV^{eXP9T%CV$SHc}*bB18uQ4lyT4V;-@ORuA9+#
zEDkWb5n}{_B!Q?@CBU54pPSnu;yvWg@F4C{H3OJo6DUAof`JeI5D>1h_2Krw_4X*n
zXzA8T;(2oG53MCIivmJM5lBh?O}}ClWwciHQq{RDS6aRKwoH{!kPg2n8?fMwkG|Bw
zdUFF58hB6EKrB6J1_WIQJ+zehZBgiN*JsE~`!4(6#h9@%dK!B`3I>A(p_syb4AdfX
zKeY<Oj)*oIF@vXmU%MuGd}O_pf%7DC9zGBb`rf_m=`2#3nI@U4X{935ENoV$)YX0J
zYT<-IiwMJDiIdS<R4-v6k?m0jH!WobAkY&VH3EYZK@zq%J(CwAgNiCgz6Cj{1y0c3
z98K{&N|59@=cshs*!J6*Ojt%lqf=(DhPhU96>z{pIbv}Kmky;!T6M%cPMw5=)~M;w
z0lURfibV%u;YTD^Gnqr(zA#*xR#2S2tv_e#|7+r?2=h4Sy=#<n+PkRFDJvk0DQO0u
z$tc?lBNW|<u(1?Oq)8li2vwTp$-Y({B7tOj?t@h2N?#^d84`vfZb<JzMW(Q>C(C=~
zrZQhS<{cWnH`8p+TpDShl}9zr*?_f7oRH)h5S)Ia_8(#Wjc_dg&%ukf@J!4$hEg}|
zwWDn_aMIsndKhy!A)g`G(9R}#0*lX~q5>As#rVM(6exS}EF2#)%)wa%Wcpv4GC;<1
zm$(E3>R^y9be{=BySt!T3|vG6AOW5VWYoL7Q}GfzYdM>%3rHd@ur3|5Hiq>(m|?4t
z#EG6?@PU&%A)QTUCK_-gz;WQ#xFtZU3c3`?NEC?i37{VK5Jb9rp-DSC^TR{V$6W7B
z51V}%;WY6g^gT2T=@2ObP#ji30nC;wa2vAVhz>Yri7OZga>I&RG+Id)vkEw|D!I6f
z=;rqh;b`^89ue1OEOEo^(xI&Hn(wh>cD=0^vZI@fvcPLGdQ^-^=Vr;7f^=$#x@p;+
zv(Sjrb8TMKrNc-FrYyz<pAs2_EZNUFNwC%u<PSzgcbbqQMDXeK`qM~%e1N62eG2s0
zD@;a*T}uH;d-|6bubfNS2p<r=&}QkrA2WXMLbXGdXqm!Ep>e^av{~(>f;6S;7E3IM
zkRw##jw6{MiURlwiUSac=KKhdl#NG*8neMzwoqc|GtI^twa{fUg{N@_BxjV^W_<87
zrlfb-t}#0d?WEPS%RtC7YBHQqnrjAFk!Y_&rV>w12({4$Ta4kc^n`1J=a?)4I11Uu
z$%Dh4ggR_ax*W9**1fAXZm1A8g-kcpf1WvuG4UiT>yDMVkzzF^Wp;EjS)sI@uQc_C
zE%WCjnu*^GrbVm0gUWZD+%-<+*+JFt2;{j5by1aER(nyz=4j!gd5Ck}aVaG12>CJy
z6SxYx;OWD_n&-r2ua*M`dT}8n;%i3aSpjl%3O3^q$*R)20)+@B2L(V{-(=WwO=e$O
z5v&@)N82Nz1Oyju`rl3V=4A`OhJywddYBKO`>oEtD`@>{D)_*4vLHd$!$nYt)6Xcq
zPem?1w1A9)6SB`7^r&8#md^8KWqi_{AzVl?Dj_wNSvv_fKmu@MYg*?a)*W+}w!l`I
zwrB?$VcWCoA9}DHQ|W^k^#Q`uwzw<~`w%+7M8Tav1}qUx8tFFcn$VpRP|{=Na%aFm
zmd%XQxNsyL3O<M-xF|ef+PNvRAS~1L9^%L4_YT5ZHv8+Fz<XL_r+6^z?j7Lk$@8^#
zF0AOd9m`hZ3$#Sb%gfBn%*@SGxerB=^IBSM-~&Sl5HmNR`w+3k_^42%fPAlr`55FZ
znkx2>$oleru&H%n%5D#y<DGW>3g|{4Gh>?>y)Cy`BOpxTFnlWE^{cWYKx#xC4)_q%
zYkeVSLRTSy0(h_l1B+fIx3KgmP=IJ;!?Xg7qoov1p$p}Uc??Q46R4Owr#;Pz)a|>k
z1#d&0fMcsOMvX{i3a}I~OVfHFX@ZC-h%%3)oa@Q%^zAp_I-LlK2tp8qb>mHXH9@xm
zNR!g}h66A%`@DB~vD-vC98CibbnR^ksDuhq{9dPia%sOj`qhUq(uk36?9E`t3}CYW
zZiyg03vva;n53;v_O*10<DJ8CJ8<UcY1!kz*&kCLVp7(c(9Pj(TsU`k^^Wk{Uw#1(
zq=8Nbp$f=EU?8#zl`N?lHZD!0n?_RET2}t_5`qxil!3ex`=}P+q5kKuFoR~2fIrjh
z2P@09X%;KUf>z1sbUFv*=!dj89pV&8!Wf&w0nC9y^@PM(#&CRSQcZ#ND(v`qzf0D~
zT)VqZR0KFVB+6iTd7Vz6L&U90qb?`|AZS^kgfqCyNHQ`u8IcIpoY?Ae1efkdZAzFC
zAHun-CTC9*iG(<$?HtQj2JJix9pz8kJtKc6)W+gtL=%Y2920}b1yl@@Rnf=w!mn<<
z_HRWQlavbpW`b*ji#V23@7=6sZnP?kk-`R8g-BLY+=+DnfJ;T`gZQ9G!1_ZZEoaRJ
z0xUC$;Vm)XCvnZ@{0XsVmZ&L(sLT)$Fhtr}lZn4DvVvy%(Kj0inh)4kqa8I5GXckn
z5Tt{Rzwrn(gQ^znfnG1yP<{+ov;{+-l@O^4(I~4iEWxP<`#QaWsmr1rqy82pQUVlc
zfN(f-O~|xCo;3eVM$q}7$WV5LG$<?XNW0N@?+l7^G;&}3eoP3EfVJHW6C(!Kh(a(R
zsfQeVG(yzRcQBwlT+9G(Zb|BD5R4!Y7E%Tudo93>3IvJ<yTZWgdqn%rhQ4HwFpI&%
z!4aj@g%Iv@GPMS7VTnd4kdVmwQu&feZm=Kf2ny0BzcUML8&k?rh#(%YfB7y7E57o6
zFk|HU#o7-fcr%)H@*M!gsU~GrR4S;TOwO>IA_;(iSRjZ<SUraW;1~eNv0$dRg6%01
zNnE#5einbEgd~K4GN;BW$-(^WJw1T0na_0|zG061v{X95CwLhplG5zF1PDUN{O=9|
zAe2Q(7HJv)Bt+i;>~|a)1fG}jbrTwe5qN><$ZbLS&pO}}XvlVZDBaGJCa@qxkn#jD
zV3ItH4^$hRQ=tPt+Qfta->)vfal2!8EmmOc4jcm~di1-rWLjUIb`}~J8KDcV`#j~D
zs!eE30Ff4dURi?t{+MRkf`~n`1q6}wpivU*X`Ee<k~J>8AZ<Hn=uY&9T)0%@p5Tvj
zf%kz!s&iHyN>PPMu&@G@prVNv0i-sG<Q|7GHfsa-&_Wy7h<sLwG=9plCkh}T#4LSd
ziPNw?NZb}hBuN*|lqQ-eRDl4En*(Zq6Oq4@)Sgl!5;2m+Q+(RBq#NLO+Ffh|2R}Cq
z1&Dd?7O2?53YML1i+GWf1fFCmdon{PX;FS|2-FEdhQ2XSFAu5Hv$#;1IMCqW@+eAZ
zF^kg1IIu!@ssxOmC}|7T8*39+(7RmM5(IRYD2IhtOQVBpbp+gW3ekGRDDZqI0~5wl
zUDrC#E?H$wxDUeO9Uk68p!E82s})obf*62Kg9QV+zJOim_6W`;M%!z{*LvtdBOp+L
z@b#8^c&A%^$~BrROB>&aM}wuj@*qnby$lKzq&dJ%ilCQHtD%D&%(X5Aw}=~_<)>g$
z7z2|1&>pQ)bH@sBQ@1cVmy6^f`NIHdw=#BZSQF;Z!-%La(08ak6!P~Tg#B|8XVTz_
z1{nTZWsY6R`XA2q5={)~asAd8gUdDQc`54Y>t*^tGXmM&;YNl~JSMQ!Q|8fW2g$?W
zM-DxmR_%?kMm;`myD0a=UA(dPUn2*{6H)<;9#zKk19BmmDi~rB-HYRFYS%~MY`s8Y
zHPIRtYgU><)Pgi?alVU3Gz@{r+1_oE()e^b+73ZW?}A21gKXYz4tQbjv&cq!%L)k1
zXo$56hzk@33W22pt0=%J>*K@oU7Meq<3p1`{(DT}J99lv$B-$(6Of_$NCCPB`Jf}!
zkoA1Kycm)%*D@)?9~%0(;S1Wen^0oT+8D#OltTx;?swqA9qoZ*41yyuB7lkk(^8_5
z2_XxnX)y_~=rrWy5v_oeNK(c=Vb%o2iwpsR6+xVk&KyI{JS;wp%<Q-T=E9T!_B`i~
z0MIgk?ZegzP^5{)GDON3gA7K55#bO>#C%ZZ8W}beM`v-X#TY?SNdbWYQ`=|tz)xU&
zlzySF?+?yDaR@-cPL7H5GfH1$XPBp?RMjr9f#5)WvOo+#OfGc~us}gLlU)y+37kSl
z_y|8ZW*UEw@k!u|Jj8!>hw<ui^Jh;r^aB%zkrO)d6yT@4EY>=fA?$>Sk|K44RL|gt
zH8{Yipj)n3j426mu300KZgYvi%O)#CqLy1NNP^KzMhcN)#3f+=#5MLRADJh<BlARk
z1M&Ug@;%>NQ}tC61d>a7tnNP}La7)43}A|23|de~B5o>>5X1UU;3)nQgtF1pG9Ru{
z>Q>2gP5)2_IPFDI{uWvhex@E7IXmYLj(CW55btS&4mcxo2KPJCc5OL(1HF?OB8bIw
zuqjzf9`kd)y5xw!PWhU3PsAHPaKJj!!(f>-{839>jBy4q#8+FPFh@=?nICH_xzOo)
zk2uszD+5ky&d18Kq^uNaM<XK`Tlg5fpJHd0PG|AZD1aRb3?*=Jwk0^0>!|N(KhA#L
z13Pro&Qru7WFnS6Ot7~j2w@KZELDmh23r}9AVVCJp=RbFg4`5fiZ8vACuCs=5Fq>z
zcT$lX<cYi3O)xTt!UvQ>Kv?W0bFB+LuJn^zO?m3Ia=9dkv`xOJ<h8YsKfu@vRW#J!
z=WaXXpH|>&hZHnMzd0!$O?+~EA9{z>$gx9E;>L(%G^Al7KOm=@ZkPCFo$2iaG5}x@
z#TKFQ3^#z(u%smj3iaz)26yq3cT@Ol^1ssqb&MVg)FEQW=yY31)GiDr)Bc;dnTG75
zB!OHSm-8V%nA|RZ%<MM@uq8E_&^#3+BoP>s1Kr)UlvPPp%aVpf0vifQR6YlyS?Uvx
zD2Hp*#?P-Iv(T_wK&Hfue}C+BhD_wZmUA6|_yz+(0Sv_-x{ZXx<S;3+$_@!)!BT$$
zhu0BP;ALv_!RQ^G$cZOp3>H|C_JLucXqq{OZso~*0m%&I3>W0#Tz`-K|JBbZhpry7
z5)wYP`GNQhK#%}1r;2e%5)w>mm$uRRNGv^+g(Znbok%P{sG$eAA2c)vA&-{7JR(p&
z@dMN$?d>6?j}!!8gwqJ5TD!*=E5mY}5I&MbG8QE|gg~JnF{(=9t&3ISuCZpS>RZw%
zHbX(4EW6UpqgbuXl@HavxNk~1R<hP9d3PpyX^)gVr0;F>TWz+{MHFsIL=PuA>&I5R
zhekyX{~m$Ip$XkL0ir5zD5<3gRkf2+HN>!|21*WHW}XD5v_&Bkd_d&7{UDM82PvU0
z$`%+t=*^o$BMQL=1cHGCVkDw03O^~t=EL;)J44Zl1X<5>pmvmMl5M>r7%($XXFb{@
zXhIP~<Vq*BDLG2UEDIpW2QbfDTj?wVkq|=|hXJ+aL@-i=sl-e`Jrh6*0g8wplyn2n
zuS<ULgYz;U-=O{T`k-kZ1F`G}PX5)%>UQ>xW^Is2lenWP1EvPx)P%T|DpY8?0I--k
z(drC?soTHX^-m!Mn^FrXWFTXD+{VQo<I_9qP>ZR~gLV!S5n!<y=>kq+h{Z(P49Y5V
zpT15LMFw-AX)+ZldY|T7q?+EEp>qt%dkKJJ0M>Z%DIx4L_^43kM5SU8+O`SVe8^xO
z@vmMoVx~k`QWgjGmW9BZ&`6~aQYje32=p>14g`K{<I_Suv_9aE{Ix*kbf7sXv0%9e
zNnd=VuMcDCDZ`VfkMPpb{@z<_L{C~7ckx2{%+)mY5%q=ig%T6rflpxh$Fw*c1m3B@
zI?5>`Bp{T+f(lgCxi(T#O-gHXmp06+Nwtk7Tvo=iT&cENZ6bt>6$+l%f<qxjkVrzF
z_Ryx1w_paLBmRmtPLV=I?202GB_{C2o70nK$ugS#oa2AR3WTXp-9VZoEvf=ihg&bf
zG#(xU=CVQo96aO0ej=7V${RX7p@*FdAGkV_2Ovq%tny4zinGvOKI@yQwk1hqCIqsi
zC0QOu@n93{;c6X8g_=nu1M?Y`2^V5aQt>AK^c<ZrTrao-dXC_9^_|AmPPj3b$_&@1
z#+33R21gVHv&jkF12KMdQ0|-4@=u8tzJFK7YqQT*=OjUVMg~W^j_3UDpHO++E**jA
z$A@l4{7+%&z5`ZG)}luS2DYL}Bj&{ig(tjiD?3<IAi_v89n{tKl~TUvxAAkxS;bN2
zj&Vvt3nF4+5}|Qop@^aOA<+jt6NDAmDYXjA2P_z31cAo0bA|yR<nzPph{|qTZMLh3
zUjVZ(DVU%N&c?>B<v304Q@|I}1cb~VfJuSHqcp}Ub)(|P)Eqe-`~w3Kv|!;Mj6l?i
zp|<)#bKlZF!psipC}Kqt5fDvStw1KU15kqo;iML1LSh~!8X(|q^HkAGg@nk2!WU;*
zA&lrlCro6J_8dhqN}9)2-&Yz20}#3a44a-7VCktS2YO<vppYgy%)XN;J%yYqRPC^_
zk4Ppw3fEx>aRlvE`Y{j>@(_XqAhiJNDlh9`NTA##03!r)0sZM}J%}a&^bUqmG!R4g
zUTcH91=!Rd?F#0h>R)l$r&+TXeYEHYq!REqqW$C|Xn3R~6!P_`6gr?$R0R+O0v=B<
zka3UU0sO_nF-MmQhNMAYtQg3z^FaduA2Nf0*jd^2pOB~jN+MnpYXg!XbK5cUAP93>
z4hIfur{UhA^^lMRxGFzn>jbcs<h~&kVX5j88{!<ANF-gLR0qa$gqJc#qxuLK2p<T5
zPpOc4M?!j$!DI>wUzld1ez<r%zB8bf8<u<BG68{lo`?6|Ld-l(q=sJeyo`Ml5CD-v
za|9Q?2Tgf%V)lcdxAf^}=qU7nPY~p$=I*aum8)5zRh4N>vu%|CR{^oo_Cu~`G)eP8
z=~(3}ISS}vw4J#OupmG>Fai)F?T{#NuuSC+lXQE%eVvLAUGE8l`0W$R8l>e&iUcz9
zdG8jbcdezgG(Qel>8`CvyHts+3ASjyO&D0Qwghd6i5FT|Bd6rJEvSybe(g@X)@s{k
z2+en{2dv<12?g9(%z`=D<!e#h=n5r+lrRtJrPY|?$Hi+a6kK*6c}UQD!*`q#MSQ)<
z$39HUCBLGNb~AL66MU`*5d*Yftr##6f_@mJh<+8USyL>HlGZ8<EjFnJ#9rr#TnUfw
zx=*1+NQ^v(%A^yxcM6_AH)l`=a?oOY@IX=mlkirR6e!y%1&}Kf;bAK$y^>hKL`Fs*
zBl*64Q9%%fB7ke%l7_1%Ww@^f-?Fvd?_ANVEd29rcp#)4esedlO|k_L{2#%l1lWif
zx=l;F5T;3~f`Z?D-e{l-+}|Yepd7uyf|5coFR-a_$R&;w9@YG4o<M+vhze!H4p2Rw
zE7(3TkWN0co#HW;$b^cV$TSv*$5(I;J*5j|QW0Q4DWFIRsGmqs2BzRW&=y6J0!0Eu
zLj_mFU{p|yj0qKlR7|vcvq{Hvp<VvBRv*-P7m&`e#*;QjKq!N(bIb_>fFueQAQqio
zZRe162rpqfF?o<sV8IF#c}`oNl8A_h<igIuorQ-=kusHoE(e4f6cilg&d7ZtN*fYX
zX)=s|A`BZdA^>EII;<+_2RVAYH?u%84p0Ik7%1sUK~NDm&>JU)Lm`8~#*OOkeem{2
ze34jw@_`OOW7d^3`FYPL&s8~nW|*#K!0v#+ga{A92MS_9q#KA$bD%}wPnuMKN+wLk
zVi~)e_NFxh+A7~S!^;7omXlC6MrrVB<%Ftc%Tpn<XwxyY@(gg|J`QOURS`BK5P<yO
zRP_Vz_k$m)%-dzZ^JpE60gsE!++0K?5(JS3Mnzc!{*sCWkWdIf)F!{JRO5W;r&M)z
zq4=2(d8l^7AK({IiDQ$lu!O^NV9LKMCS<7Hp~X!QV~h~Mz#bXoSeU~G6QW?FQ{W~i
z(c>~;y?{56gaN^WISezJY?>LUW882+Lhv~lLIG5WN>2oygFvnJ+2GYP0vo!h9*O*M
zX&K3RYs`3<`!XGl#w0Z<I;UcI-7(e_>0)#J!BG!21D`rFJs<>&BHA3-CT3-w3Zf<%
zm=s=ZsfLiSbQFSUGula<f*^V!AyP$0lo1R0oW=Q&f5)NO`UX8%MrcZh-QGHHDjjkp
zKoT0sk-IKyP3{gs-Y^5;5e6CxK?NBGQiV7mRD?2Q3os@48eo$KHnK9B%&Ei-hsKsL
z)-zn@&IX_)qctd|11>OWVa%pPQ?W6DqXVIkn<51fa?1oGOIc}VoS{Vo5VQ<wOLH?b
zF><s<V35TqAwdCE%Bn0YDqyA=g~Y=lnV4G98m?MQLfZgZm1wmZVUn?C8B8)T3>aj}
z1!O4LgtVy=BvU2BAwpyrP$GgzlpBSIiwcVAQnuQ*&?^wqS{;H+Gt>_h-KiZi=SJAY
z#G#@Kxk9+$su}uk4!PK-5bp>Pk+L6Hn6OA`Nl82~3Q)6*GDMg&(ZmYi+{291G%49a
zgiMy%D=61WQf8hkhN1{#Bi8W=-fDi5AR8OV1dfB*ka!pzleq`62ThDB1Z@h50y0S<
zBE^Xy$PW}utpN|NG#Vkftq1`MOfc(3MgF+Es|Pbeqc`8!u&h<U<MmQ%9309ykV^ta
zL6CY?1V=wbVWL00n8~O;v6-rp7z#VECwp}Vqugs`>~y1e5Z(z<WIkK86k6OzRS6db
z%mKDCCA5fz+aZV}0UE81v|KpJW(csJ8xn|Mh8B|}ff+;)nU_T1W6kK<0(ldIu<0PN
zYAZxKZj9Rl#*hd=kZ)?`MJ9v;c$z>8cB?KM<*{L93P?J^Kt8aF^+h?3bI&DKwNRp{
zqN%jogc=0d4<Pe75d&7h#O`(BXm_dW7&3Wf>xp}?8HJj}h7tjwBTz#mR-oBMwbv5k
zFghXGc&@_2P3J;q3^oLM89F4u*z=<bBQv}`gTcDuD*E*!sJ#2wu}KBnEvo?#_MXC8
zzqvcZ(63>inlZAPt_<((30TN)fnwt`u8Ii2I_W^c_ZzE+e0ENN-3H)-I+^<)WXPUe
zIgEt12XIdWG#NOKr(c?NMoJP%FHLN&Gi>fpCz!ZDHT-p>agji#Q2;3IhgqSz>JCWm
z7Sdyxom~;jzrPk{6hYpKCiKE2%+Sw4QFKE*1<9di;lh}V#D@Wx$deGPG$?Vgo@vY!
zJ48twr6%LtHbCA9gwfE{F^i)`)$@ff0Do*q!JUA|%pkqu*c^@c<j1w!cMK*H5f8vA
zKj-)ZxO%;l^S08@vK8>;d!9yw0su51Nb8%QVPW-U{Y(!MB^;a@vXvx*$<fqL-f7~W
zK+NyVzr6a)@dVmwW-6SYqRDm0=wx++GeMtaJIMr+N-%UZF6M;o^xezMri_@4w1;p@
zCeNe}u*yTf91nG*gi4U!3NYnFID`m75FQ363h(=XH2*a5IU@UtU%WUEpU?-7C$hSb
z2m)O?4&?)Rkj~}eoIJUi*ui1n96md~{{B8;N#I2kJt?FEnV%ec;TxCmoXz`nDNCwY
zLN2Mjt!uSvwS7w0x>QusxT@r)Q=65^Qz^2dsG=Bx2q*|4>Ee72y70l7Yy`#^+**n4
zJpz`kI3eKmFS_1v>bB8c5|4?3?o5W#JltYT*8A;@>~)Qkh*~l7`N8HchF9kh*et*y
zD4${Y6Ct?cB;?8_t;GY7P_TOdAan`}BM2}(2_k_N$^}@&Vlev>#QL_FM1j<9P{tE7
zF|;VaSut`Rj5F{78Z~7?R#a?PSS6+@HHji>dZKLUygo)xWsMWl`VS!M73>NR8%pYu
z5bRHD%NJh0OTQFA3T&nz2_f!tD!dhW%W-ZrWD`_qURM!24D`Wz($HTR24o(p*_OCs
zd9*%}yjDnSh4tbk74p}#Fe+$6?vg9p6$u-Rf<h;luyztM9@Ad5+#Jrh8ZnTPrtA2z
z=ywvTRPwA4cm`bQi%ri!W2t~*dV06&%@)8(2yHv9+HQ$9)w<c(+7Dr{gW146r&uRr
z1j=I^ML?)ws#-txG7bmooR9$zWh?b0JzyULx2P!MjYf3DNwZ`w;hRi{F}w~kS9cKO
zx0ZvEb0H}89l0rFFzaw<$nSSe?jAUOA8$K7pM8gQ8NQj}0L%;tpOpof3L!}3ODg81
zn<U<o9HkPI*A6(&CNqcN+%XDcLe@$;hMe}(XZwW?`#hF?6ze4r-xCgk&J+H9y#*-s
z?C!x~(ioI)EI7&@wg*hW@*YA3`;9r|`Yfq!f?5=|{qDOOHrqXX@G#I0!2+O8;);@T
z+(!Py9GiiEvYKiSDD4IT7XcHyWTcA214GUMs1V-5h*D2Za2ql{#O@+Q1LitNTL=C>
zhLH6E4r2}{#ShK1$j>kkkK9Lg2SDv_$eKXx$LfDbY-|{HLy2IR3PW1cjc<=2@XA>r
zdsRvnh^&a|<9b3s&5*5KDxImP@i`eB9Fi>`K7RHr0t_O{e*n+GGARImGX#WW1Y$#&
zdr>>a-e7q>Rp((v2`XApZ>Cg{NQ@aYqEe8;cq_Hpa_TP;HT3~qn)jv?n0g(13G_WH
zxjKlQHxv#{-6%V^tri5(0&V{22Mp?MllQVJf}8E7OJqC0fb%jv<W)`NUXYxVp*o#O
z43nHa-*i|btKwOU1Z^u?e7<kXfJ_QF$zK)J`;3ODA(JzMK@4}1G=M;;Mo+q^gi3`#
zl}k!Z52W*53b}Xke5l7nLE+_rglZu2v}xKB1OfyAN~$U1!&tOX2y0{xt7nmB-}+(w
zd!_>Ru+%srY@IV_nEeCX`DNg}B&Na)IvZ2r4=y1g;$evx2folY&{YZ`2*bcKdrzoj
zA(vpFW~1g)=OHAL=!mrwDLF_+p+g+X2pa`7FbovCJ?_l1B7Vy(0>-MZ59xq%I=zof
zKRva*|6G3<L4TDn{eb}Jpbi*z_sfE0D2Gl(1fIfbI=~MzQHL<<--9!kika^yDD}-6
zLJ8)>ROFL+q!+{;T)AAqv64~xOMe%GO$HqZC&QpMfcYyE2xU5hQ1`fSq8r8<3cKou
z5!^MNh3*<#ZVAV(`pK~ju7(OE3W2`nHhLRj{8u1OYd9>r?1q|_NL#qy`L3U5M@C-z
zO}J^1uy8}%L8H;x(CJsM8E~g=rpuvQcsE^3wz!5thHiwBmWNK6Z2N|McfKVxE=(v{
z+mV|1W@14+J?_j9uVo4_?Fv$87YQA*lM6RB!$h*-lHD?BjMKJ=CmhKNVM2(E949$4
z%&@@4Ocfz6zy~ceOTb|N5d*R+A7z@#p5A3jcbIbnDIYSMFgGF#L-m+_#@|c#jLfK?
zICOLG_|WzETHD<5v1%c1P9TZ!@2Q*Aavq3LH%6}3SzWWqg?5RKWJAJxa)Hw)XwuS@
zIw{zpox;LDMLILFOb*F3?47Y1!C_wlaW5FM2T?GtksO9}vjG#HXudILq%!HIc)poD
z`qesbJf1YeI9bDGg9P+Nnpw3P?IEl_eojd0bQdSs4qe;@ZR=}#1fYwMk0c^ofs-Lz
z$nNDildge6ZV&@gP|NT(K(6`*clChT85D;mWbW{A(F!-2ABaN)MzHQN7Cb@3kYW_X
zi-w>|X`#skwgzyjfpfP_31MX+G?VP?51G$_-n==Lo*w$MouNc1cVQbyEUhh=CtY&_
zRtF{&{(&OHqc|M9W!W*RQ7Y}lRg(lv?wWD>AcdVoz|%H3Z3{4=*MNZRfr<|RjcFPf
zN?q2W+E_HGYC-t~D#LYkAjSyNm`8HTAfv!cDrqT|wX-$$+SeOvajmVzQk68tt0qfo
zWmc7<l$5v>phZs8qCKEo0RYv85bcP5P~@cO1kl{x5v2x=*T;;|#UgAAoXi@Z;(APS
z1pdgPBp@fO2ABv+C`nL62*d{f|0Fvh`4CT<Z$zQ1kf-LLxIz_SNTvW<SIMB)KGX2(
z;QT_I5PvRduv+2<kQ0?}f1;?FH<}t|<tTbu%;IO_4!hsVC+#|ui9g#cIf-LUDM9Lu
z3K~6mxMB2@l(Glj2m$%W;l2J`so!esZ7~^{YH2oMF-a`RQZ1JFu4RJKWg^I_Q3hsW
zHI`|lwA89nlGAEwEn;6<p@0ZDOJWHI69RdGZb_%Zp*S}@LrU@{S5S=rM3PU;P#|hZ
zT03%DO|-(ZBG#I1qe(DWG9&^E1dIf_0-`1D&z?c-bH=NI6l~JP3ZOWXC-a##4>0`4
z1R(to+}!inz!_J@AjE(NZDFV|p!!qKA}-yq2VbIi82dPhq%%-Er&!ovdq{>@IgTjr
zD29|YM(`2}akOnj-;1__BqJyB9e`JGnNE+yH|&@of#W#4jk@9``!R9?bXX8NN&|8X
z_mK=(Z$14<iwN(OEhj_Mor%C})`M1n9)9w!iup!F6qM4(u5Qg`dInR0eDr;TAaU8E
z2n4Yl0L21@2LS<=!G#6}Ng>lB3^-E2VuNS}Kwxv3@#SUKt}sm7GifVhRFXtwki-Ir
zND3NRX#q(FG7@bnh{6;Svltdd3M$%E3MS0Lmmp+FqZpzv7DQmlY>+t1jgYYua~ooS
zjGThap*WHmISaDkw8;e^i#p@)(gld%i;##>lx~+omct4}B0&0ceuw$4=&5C=W~j@j
z%tfbV0s^I^Hwh|`i>(XjQP|k-Ks6qlD1bd!u!+7=5Yx0Y7vR596S}krc>SKT^pD}7
z(I9z~33!$f(*t)fM-Tp`e$9j(_#7X>WgC~nM=B`@=!hmDfPy{3c;k4Hu<nK%A$&Fk
zX#k=gYz+3^(=$8oYsAson~ygJ*1FS6Gf|3~M#xuEfVOB%r8{Xsjt_yvpflR#JbhcS
zXG&6cyOSBSP}7?zrE}lWb&_ZZPeGW@fHp`^heoC#e8a&98oK79Rq)v%3V6YubUhx2
z3t_69DF~r->ad)tLqNkxN)f>f6J#AzOE)0uXvzZ@W<wZ<v{IN6`~d$k6Lx@<QV?L3
z;M1vfgRCl2+7?BSF(Cqlu)xCLh6D=?B?8dFkl5fr$N*9dP)0zEq}y#xn|L*FYb?~M
zO|DcQqQNKv1PZ`4)q*Dx{+{#^1HIkVP!$191km(h5-(elBiKrm!IUK|h*n8Kg-A-l
zgCQl7(|?Pf$jE7`Z{dN5r;=<6o`@l<WD>|dd;q_kf$0~SE45DMNV~O=ivx6cEeP-W
z)Ibg?q+otU2RqL6fwlWEp<;G~sxBjzp9=K1v-1+)f99^=G`nGzyFX^<)$C3kB69w1
zjeB5_f=PmkV+cheIiXU@5u%lV<J6dhgz*-SB}?h2msZukeY|P4a+_{#dJ3wNh}HGy
z6kJ<!%D1GerPR{1Vl)qbuGt6>cu6x<?Ky|M!C>xz$|VqTLtu`jro=1kfQJHOP6J1>
zC#3e(1{u2=d(g&4kTV;|V7V1<VLHMiln#+7VgPrFHb6qq>~_PO)Oa)y11B1wz7tjp
z+d&oH0PzAqOox&RuW-x;XN*a*9su5d$X4O8=>@p<r}6SbfW`_zlfeji2#os1^2#^^
zjw|>qDsG3W?%Wubj{apByoiz-J?w5-^5eTXtnc?Pgjet)+*YEvi*`&))cyWWx#>MU
z$Mn_Q=i9?O?KJ;i^%$ZkNAt?#M*)SJ$)Q;I<XLin$*BO#12E=xh$q=Ukb`JF{q1<f
zOD=YhK8{Uuau^o@9BQNyu@eIjGNuY#EVQ77KiLy9P^C1MLpWLJ;~~h)8^_`*VUsay
z8R<STZ6*Rnlz7FAAf6>QV9O8oxeuDn!@>|Ertj6p&%sE)YgvrsUDjcYrGrKO;%vD+
z!N5Aif7?_FXb~WOjnb2gl~3I_9P~J-{FH$OLPxR+ltv_e<^Yz)Fs2A{e4gpN2YjLP
zfj@;E54=KxB1ebr8yK?K7>lqRgHnDDmumg-b7N39s#l=FZ1l%E0uGNJCZPKcqpWlT
zga`rUWoZ+S#1H!=x0-wpSV%M9UcSAwNLGp`Z&>4sN&~O!kom5O{NG`(O{qz=WZ0h}
z1a_7IiIDrQIWO!B{ePq965U8>uiQbAkPD!)`zIe3L;^r?c6!QmAQFA*aA$n>zAPn?
zqM8c!wNIj1QM5&CSyN=DB@h;TP&OMSZ@4+3JzLby1P{hOgY-YGAIr-wZMoE7BNo^S
zH!;1WrbUTQuuS(off98^nt-|Zk)(t9Y;|YKi#psjm44XIT`yx(7|yxLP7uR_Fs$kK
zpZxq9Y4jaZcA6%-YIz=Qhpn29qm9b(O-OgDD#Ns^d%>#7a~DS2(Vfm(?r~fZNJFu%
zn{)6qmstsxJ~6~P?A?;7)411KN?49O+3qESD3lUwxZ>EpA%Y}ACF<{hrK1|hv&-Y1
z5)+ZZvqs9+<qk8*tCVkXRz2cue(Ad)L#9gXNaPO8tl_*N?}GtoT9jylsOBXffYCrb
zYe*4fU4a9rN;rMm$YDU~>(|fMlG?c_lB~NVqV8Ez%eZ+anCagt?yj!x?p||H#sIZP
z?$8DwPdIfCh4mF6^mD6;*CGszQ78|Rym>&p@d~;3=J*GG-xTuYl?O<D0uChvRsBJL
z*eoJw+$2CO1gNdraG>6+lEuydF`PWT+5w)IrkakERu+&l(vHEWkcEJ2pkSzQlu&GA
z#p5>AQO(uRNQTO64hsOr=Xg>Z<+uT`LGlHd+hEtdh;D|N1lhq-NhPFVVWG_|N={DV
zR-GN5>#2#Wi?OkYm!{?jLL?yxgtt{RaF`P@auHFjT!U!D2&c`X<OqAuW;GT`1JG`O
zv(gm51M5YnVG1lDC|ahA@wp=jBM3o_fK-WVDLhd9F#d9#a>_ah(qv;MB}JMtnIuF#
zIK4t)Jc4MyQ}>$k{`x24cLn!DaN|d-;fyaRU@R(8%E}>|X^b=i+wB%@3hssQQ}P%P
z_yPtIA^b^F6VO6f|7u>qO9aLSm{}NkI)#=(5IX`2K#2<rUGx|%k)Y3@U_HH0kMJWR
z0m6NOp#HN`E4&J?hk`#qL*`;LK)>!m&w_96QP*wqNs_RB>OeyQ`bHWNg)ku=!e|O(
zkG7|+H41v9Q8}0Jd;`!QTxZO?E5r{_(DVoqSo<^*Czl`!3SmizJcGY%>4o-ZJDnwb
zht%{Th$F~DaGtZ(1dzdFxpb6tHcTCgOk$o)?L#}2Lckn^IRpT-XrY+`5+ZYNDUbSb
zmV;rlBg3zDr|w*TH?f#X6&()D%<cDcaJW@G0WCNOi$!$j^U=0sG|;oGi=3@Vn%}5n
z!wH0_>%y&KVr(29;;OP75Xq*PLbi4{I(E^C<}+}G8|0kA1Yp#Xz_j;y1UpJLig)%O
zhD3}KB0&?@loALY#KWt@;F~L8XpoBno_m7MsnN-hu&ukFSBz{A+@FJA7BP^1*-(E4
zvfo}0{D*+2Smh&0CgQ@RC%P7WShax_=?Y@`eIQ-*TK8SEa1#*I-Xq{XaEAI3D2Tir
zLsN)zpog<Z+Cdq*tg@w21MoqkMAYBo=gizQxw9Zg^hL+fB6EB>zca0c5G*c<C6iy2
zoMbTvCYjPs>ZvelV0C*J-Ml8O6XFN0KEMcyaL^v)L_FwpY&3^_pdQnZpvaq;Ef5$Y
zJNCX?%G%oSYk6BL&Fn%DNDP89J%_1Sy<B-C(8musoUGZ;pU2N(tcLPt@i6AYfMo-m
ze4KY?I+@OCI2_*@){H6_iNNKs?IqW*yAFy^fvHR~!4S77m_)p#)TOiRKHL~EQ5_4^
zHEpvdTP84XyhlET-}vuLhI`{WZ1NsgVbjhxCSr?nBfR$hg;l0xN#ah~z)tXU_+VNx
zyE`{9afft?9Peiq(8MlKD&f)~I0!>R;t2)}%j;~xix`bUO+Kej4@eZ`(p|*xk9&sp
zU7BbU7`D=b$u3h#EuphOFf(}}*mXE<VXk!-BZ@IW1cd9$nVgw1y?Z@k4~r0d1A+;?
zE~lT41kIGWEJ#6tF@oC^WNAa{pLem9=S`mT!Q-DLrMA|ccW7#(+(;oo!9h_IY|Acy
zrG8{JgFVbtW(s2;nUrG$`;5%>KFr1_20aC5K*$Irz|;91cre$dZ%W(2F`cp%GBPY_
zV+usr1P+GGVN#qkS92A=MnaRC)30`%<tm+&j5CzdA|Re9RDvv0a|#TBs>TU6nKFU`
zf)V(XsIW+k76_r2PPZFEi`C{>!i=!X90KJ}1{Mg&F<^^~(*wLN3ArVu3Xnwwf<y~w
zf(o?j4l64*I+BT{3PlDcHX?$8F!vVCu|m5u5PhPQMA|*02<ugPV$$(UYcU-RLiZ^t
zy+(65a`3WV6y*%T_GKZ)bSFciv##Ewy0Ei3yK^u%Ghz<WltgI|PKz-yLuDN2(aFRS
zCp4jOI6kb?3QEpK2e?BCI#x|`^=Vt4*cWNK%XBPbS6+0jFj41_-;Md+=Uf$xHB8BJ
zt-M<$(3w*)FIPDC&WtJ0^%pwxPQMBRsQN$<<m4_ShQ$=5P50h8aijz`Fc^*YjG+ob
zv9$`gO0o{v6tY4L7$#=BG-Mqp);}@@Pw3sGml+U`3Ky}0oj4<~08#t}57KCQet0S!
zM(INI4#O1jTlD7K+u8tY!ltXwUzYFfn(^Xpk*@gAP&YO`t%<@F)YIdKg2^jbs6r38
zKBUNXE;K{M#eCI4=3W~tz2M#!X}me*jOM8IKS1ErlxOPv_n)m*Y}aHrn$nsSlLop}
z>Ug2d`p=p}r8U?@XlyJN?12IRz#u+8)+8{F3<2Jog3Y^*b0@oG=0mAJt}T{@LlNpI
zrJyEA2l1ja79s9^&|qATDYF8}bxCcG*kmvYnTPutZp|?(%f}I3P87&+&57Ac=o*Eu
z2|N(>N%@jA1p!6BB%y7eL>LM3Ly*woqh}A0Vl+Q_2i#yydw_aJMw1jh;YsTW`i!hH
z`y5ww0a~<`0_vW{A+35&#hvGIoE`s{_8W)c)~CiZ*G-MWq67tjDw<G(5sHxrAq0sq
z^BLU$>xYB{>?`4FKR{rm!6_p5!>$LcIvF6{FOBo{<2sMJ_rf%x3D!|3&3#}V!ck~M
zc#x7^G@=qDNJwWL`?t0Vo7FFjC_G9vxKeQCNzmUbL@tV1IibEMEF6jI74k?(yB5Gx
z`vZFq2r@7Z&?3->ceCP`*{uX15+4b_ck{)4#8>~gDf?p}|Ga`E7)h)HwiSdmn1L{0
z9VE%_#R_vUJvaeD)P}ZI_s=kafZG8<0P#aujE}*xN=D#5z4eB{<i{bbCmw#)3lR42
zx~&Tg1N)l~Ac2CG?~3mqG(rZjH^JKsoT;Ly<SqS!r~puzdM?K!AM_up5lBT-FyJP@
zhshm|IvNOYh>=*5K@nDdN<y*Rke<DUB@0B|)~)Hr8#17lcEKvz4srqk12avErmd99
zDwLybEd+u>3Zzkp5RoD2_<CooG;~CFDJbY5#myk`_MzPu#3C+*Q2jfo8BiX+`raLc
z_7YP}5=!^$;x2gtbwJ1OLH1QVvWH>_^i3G<9$#Q_X{8xwQIo93$Og(BLy&juo(@F=
zp#;!R6a|t^`cwuoJS>4@NoAuT#CQXc5=6|DN<;m&0V_Q=hB6qK!ZFk-MuPiMnKgt8
z0I9N#^EF(MBm_WOJO>pR3@FlpMii&i%D`AA;$%R=tm!ahFyL88n#90aNF<jiw1qG;
z>ZIw)%}z*f(AfzNM0m79r+3x6j37L=ACt?xpOu{qRmn3kjM!cZaOrfP<|xa}cYXt&
zbqt3HA-z7edyxP`vs20CfT2A-W{chuKnVb#27^0l5Cmp~hd&VKAm$NdWTW;mZ+t%U
zB=y7K%tcLQpqKZx#sDc0AfXmPLLl&_0<(6)GeVK~&%ltlMjf$nD<(TS=E)S{0#u6-
zDQ`NA*S^t|WdB3SDLpbMUm=1*FH+#tF#B(jW-J)v2QGrNyV^3%WnRqrzMVC(15J@)
z0Z_8uc)<p2C0hxj7sDa_D^o|JO2zMtmvfP9O<|JAdqK8O2;}iD@)b)+$8mBKY}yro
zOjHpeF#|F#M}m;hou2V`&vf)~kQ31EoD9q~fM%Ldc}`H#F@uBf^X#4k>!``!hite7
z&CCPElOPVg!@jAT2!3kjM#BgSZZ<4X05mopJ=b0dr;2=yryjUd)-#iL0rh1HJo}@o
zd82)^hHx!$D?5al=^yu&D-;B#`xXfX1a*`=B<T{`(L%!l;dFW;eNL3n$pffFR<W#N
zay}&kL`Meyt4_{FE6C}C=xl3uyl_K@S`c(6DvySK5DUF{F}~h=>Q$%ytr7!f4{^Pz
zFiWHYI>#3$A|p|?e3^iqTRM(VhGZyo2*MZu8X!3M49qFn&JW&@ct-aFpBjhvsNj~<
z3#0JK&|CI7(+D^_(*!_=>IO`rphS3y5g!<ngQTYscPA?-Bd9#^7-MSCA)AntNHbw(
zySBSmC>iH1(w=~>Ih43yWPe^Y8U=%7!=ehB=@|*&X$~;q*lbSHsG|ohD=3gUq2ocF
z5OyFvz5QrIv_lln5fKp-HCk_a`<Nke>WY_iT)oOWTcmat2hsb!*|WBZIlJO>fC>)7
zetNcVNXIzY)4=H+AjRuCCZ!ZHT~Mhc+G6PT#mBFg1k<zkiMtBJxd*16BwNHV;3Av2
zK>$YByGaC|Z3fEj88ma-RXOm)p-E;KF!>b3t4F$5xFo@lm^(}=j0fuw+?klBnZ_@u
zUl1UP_l5!0vI?rNt%RT~MiEoAM5t;)k|SehuCQo<P&G0MfZ%&dfkH5Y1~L8T^`md-
z9^(|z2&VmCp+-b4E&39|h(<y{LIOe`T++kZbX4{_s9{9_;1A1}Y3uGcz<3HEA<`kI
z)JZOi1fRFkAs`Nd!T`aJkN~0lcdID<<r-qMX9&h&Dh7-UU}FM>tD*-?6bxp95>qSz
zinO7zf#D4LBr}dd?ePwAdBKqOvG6C3Mo9r~pWwpM5RK|tesRnTngqcMR(x<e8r3l0
zeYL{e2MO5b!={yQ!Pk}y8)zI9%1Q{6r5H1Tz*T<|K7b!SPl#@k{;=tR!oXPglP|%O
zLZtjA0f37-z%&v^C=?INfH{m1>Od333TZqQISXoY3`Fo@w5#t$rvd4;F2}661fFlD
z(#SwVqPm1w-o8p@#3}S8Ad5=8TsNWu5Zr_S+R2XnQqK})-+Q?M1Qbl1pE2(rkC{;u
z8l@@<0mNi1_sx8YA7uM-X|3L#VWa8GV|sS#O(|lP3731~WzUH56gtlj_rnYG#jcR_
zqvg0zTb!PK!e_LEJ4WFl;B1uu0sYVf^nmI>3UCU-x88QR+{g~e6JlO=kOq@T<(bUO
zV7r~cD_#(huG71HkI3@jVLP=8M6y{LCF%H!IYR^LN~Xi-fx~prL?UIINA4jbQRfrF
zbb{g%DF_*f`thf6=0-Mhgoh)ublzYd;Fio0L>M5Rych?fWww@Fy}0qBHk2$G));3&
zhfLT-HG&f=4>{-OXY3+_t;!0)A&fi*fHX<su!~rQ-Ch0IEdiRt3_yn3z&9<?UZMO3
z5a^R<N9QTIA*wwniY%i=rQpn9mKa)Kav`Lr-N;$sPh9u+UIpYpW@ko}^I@Yn?~Td8
zz_d~zhJ*?~dqkow$UrIWID!!`UAgP5AqfcrI@A?47?2A-_;WoKF@WOtrUde(S{G^#
zkX)PNtx;3H+Xh%e2w6b{|IX5nq=bZkLtxq<j8qFncwKyKWAcGXY!d)dbql1hln3G1
zaR@AV=s%y#m2n!3-;EkE&(yRKB#<u|40ML+0NtbH_QCdo`v-^?S;Ypd9u`1k8ue`K
ztKcE)(b+b~g9u|7yYj?`rg;$RdJsQR_sJpkt%g9#g-D`|P#b886cL!pQIN+73?rE3
z5Nfw_AtFVQkRu5Q(@J>SlyRtVOGEa-S0kgIw@WjU0QoCtW!4B)R`~alh!qJF7>(QM
z5B)GX@7XPYYing2ZUNcWUQ&lyv#Y&KPP$S;bak&;ury?cCUaX6ys2<-z#-BG?Iw9S
zfLZ3A1{%!)ou%huLk8KUhe4BL1QH!<Nk(4ffkOmjpt2JTu@=}HM4|~6!!{OW%v!WR
zvF$bHzU7{Pf)O}=O(qHQL9$J?VSvRBpzWl$iz*dKoIQ1!H9hkh2AQCQ^J$Io0aJ42
z$+<bB1a4B?T;mvw8CI35m8C5dQj(+)D-ojGOKfRCv=u4RScVoXDHLs028Fd$h@(KF
zRV^GO$+RCB8kh>SDLthHNK;2*fL~x)-`1Un-!h<f8&gaRi+uyymt;5biLf4YZ(yZ7
z=Q5uN-U@KqcQC(9?q#Xn3E<9Z;<pF&?to}y5ZQ4wVdYVT28j`kg&GS<A!QYmkZEWv
z1><$q%>VM^u`8NQf&E8aT*hCbE{?6a&;aGCI#}D3wz;jt{LCgt56}3n8uY5FsfJS9
zRaK;^Ss<hk1fwB;v(knWK@ucL45<q!C4+j&3;@J~OVcTpC*Dm|&4giVS*^f@w2=PH
zt`-zT<4^rrKi~fDvT`DUM#7#Z6S;w=NklTkFqBUjRsFWlUKmJ>$w}(i;H)g419?X{
z2MS6Blo1+GNGwt%f&DF*3=1U-5&{A-kCjZwENYZ8;)0ArBrT#aa@Zy{JG+PpLD2Mo
zbPE&b$e?qW4-m@y#slXMaLECHN3<rvR0;#dz3`AG)?sLajy4Ygx9EMr_yxQg)|ErE
zQaq&om=A3A0r>lxB??paqLedOpt2}NGJN`Vz#Qoxu#G2{ZpY17e7Ru1v~>`kA6DoT
zK=|M|n&r>Hj`SHXhwgV~Mpd>19wdHJ5Go`9fb^t#$z;Or-8BzX4qY-h(u0r!l06RE
z(Wa9;%o&^3VrXfwp%-|t8O4O5vT(%08WHsB6@Z8-gsI1fLxTetBypERlad3bIs!^>
zy=;fnKx7fbjlJb8Z#NW!Zh%`T7HLG}hGSbNPpyFZKN@W+&y8lc=3by&3+eQxL<b%)
zp*nQQN+Y*)BwJj8Be7y02HmPVB1c|Gd6=76gEg_f;pr+f0i4EhVrn#*K^c;aS>|s!
z8BAY%@-GGCoN)|6g_`;QUMbh7GZuoF%EA#yu!2TFMabzu_j5u*sO-a!jNm!<VF|HA
zDl<etjZ5hQW&t<}u<6%5Z>GkhswCH*)@8|C*<$Qa?UBP_DH%+?3~!Eg7KTG2fZ2(f
zLI6=OT-k>;K!$o^qFyy!3q!6+D4Gy5!5*AsB8C~RCM9S)6Kg%Gkg2nv&eW2v!He3`
zIprD}BS4UX=8f`ohhvP{Icvn-Od-Bd2D!4y&W4Bv{j9N&Vw_F(2zYJ8u;qG`kStgg
zMlXx1CYB`$1Vo0Wj#6?f7#hWZ#+HQH6gE<VXKRVev`462^3OZ61@hNSbAas<jt&u9
zfSDpxLK|upZ;Dt!A~3}T4*BCbdF~agc7;3iyW)W4K(NPCZL^eSl7-fac}idj$`YVN
zKm<WaAcSXUyOYm6Wd&-rs;SB<y5e}1prfOdHoCqytelLZx5l$DxpCmC3>bEu3uxYH
zI^76k8;=I736Q0wjNu$6@~Aw`DnzL!ybHy&iv`?1h@JYH(U=|#eQQH2P{YAXW5Od*
zL6Zb{vt>x$_vXQGVDmtOX<cZ8rXctd8-6ef3E_C45i<eIiVome*$Lt~AcoEo6mSMi
zC0T-YbA&c0Acshr>%H6C7HXYrmQ%)$JS=$~bPoBT*HEIs;q9%PA0oAvD^|u}U(Z}-
z1@%ukry<3ijp=v@uXx(o8{e-3wTC~-UI(DJ=L-?fT{fnPLq(9id%ck+2E96B&dwjX
z74{=N3Znu1<pDbfXru@(fGbSLP6y8SISj7gm=vQ>fd^IbP6^~9*v`(N5EI!M>5P^G
zwg6{9x)Bt)BIJ{zY|mO&N!kI^rb?5QhtfF8Fe$lQs3DWK4nd@%AwEP3Wfq%YO4`^0
z0XjWl%0i1U?wMd8IqvFm1ojU3wJG9<Swv<RX`$`iI^I_LE$6M|JD&1_;B5m@h*{P`
zNJAwC^AtJZWx(7(+V)J1lt<4d5@rT+8aHF=IwYAF0$Fo`F`9@0%tTC1ygHySN!-25
zKDI;3s+JH_yt|n$%R*gDM3>N+Q!y?kYeVh!9gnw<Ty)Ovncdyp-q`4qXH}*KlK$pv
zZEB(k)I>L&9xoaW(;#;kAV;>2SzfXVc5<AQ=AN*(7w5dfcX#PKYD#;wG!*rSaZ7rE
z;~so4qzZCt)ULGmw|-eD)EMjQ?(f*hyWIlAzqc<=I-hup_OvtJ@~TOR0ekO2Z+A0t
zX=(^iY;iQ~tmOXC)EyGqqqkzsi}SLK;8{(=_9~;WuzUxg%+$ag3KK>)2LcPBZVOEk
zAWe)MCW*j?gP{QoB%@M@VuJCFz|k~EY$lrrVoAA(#%k$Cjx9TfAaRPwUT*`qb}nt>
zIcNs1Xw2AVfCO<?uqm=278JbA%}%LCY%@WsLu1q&2R9CnO-LD;NoBmKUw8~d*(pr%
z>>V4?P6~Ars~U!f7?H+9hFQRiQ1?MVkR&8z1u7s32!ez>joYnVN+{dNF@>(-tsgmz
z+$A<JFv=1^n4$LS<m5b3A+e#bB^`OfR*rzYG87gg4AKPd6YtNc-%&IxC`73Oq9Tkw
zsnUoh^iKK|>l69PQO96vZ}Lw{ZcaEv++g99D{_Ew<Z~Fj;~+8{^bWAwwVTBGld=2>
zVZ$UQG6n56nV1HSd8RT7g$N<syh4ptM4(aDsnYMEhw;%G6E0yPAt=+b^_|LCo&n$|
z?I4<y2Mol*BPNp^Ff{yDMGFv_I9O^+r3D5GAW@uv=m=^km>*ez*HE&Ir&*QbCa6rL
zSwoW025?$lsZ=;{^bYvulQE-BO-t_z+0d*8!BkdS#@BXq?>w*+87nTQfokvSLEe!;
z=ij)@(N8-$<9_@C-I4TZ4p`eJ9Gv#a4uhi#Go?9RNNfmcoGh~d2Q(-`0LBDL#KQpL
zc?yNZMYs$=&T4~5Lfb=JL%ATyHavsh_<M^tH%Gt&+4j)T#AJMx9bSRz8oKK_R`cxX
zU$?Rx3+^IR7D6x0iD1Hj&=B(&034vG2W*;}*$OC?J+Ng=AIgIx>43CS%%s<?M!Dqe
z0vdL<!doQnl2hA0<ET1K;z&pV1MCX)6jBfcA-N9@2Eg(ez6Mi-A+94qAbkWqt)Nqz
zdVOiv#lCC58!T#p6<2vZI_Fd7mvGbLWw3#v!v8WIm(Rb8Jm;KtB+g9WrODDE-bGE&
zG`bMLV0Mj=o#h%@brZdy#2KS)odOt%%S5)pQOi3m*G}5flCK+`QejJard%)xR8^SF
z#-mexPY2dR*7gTX5Mq)tLtwQvJB9=kw?Gqvnj?T6P`!=BhtUeTQMwWyFQ=!KHWy(C
zZPn}9z)z3x0{IGAK4b}_1N{u3fW;6i3yqS|u9||zu1il|@78)(H?SNb!Ns=V!4AOh
z%-Y3+BUIE$2?|OIa8i^?^x<COVLVhf&_?UJrjM{%bqA9D2(o!<dPouiU2}nHd|6^l
z6@d(t`J11%bDpP&6G%g_+Si%|kNPNUSy8^d=cKP1Exf{_pK4Xs%XyW!VB-qR$hbLd
z^9ke$9~6)wLI^;K1z^AkuR$V!9o=VcK<`94zgM3Dj^t059%sf8V1$s2VjSY!MYyxf
z_x(CM*a*OnXEg0TV>ZBmb&^KAny!&BnsmR?U_0H9p)VsemDIk}Aheb<tg1cqx*izG
zKRc`)0^A+J4`o!9DzJ>Js-jh}yOOb>;35^;_IQ{V9u<`XGYX&@FaQKAz&X*zflyKq
zK<yDAqJ|(j56Ssncr)?O%J_4m490bhp4i!iH}U<xdYv3z;f`mGeT29jUK^%8DMBnn
z5Y+@oeV&=SH5*@N3VLVO#>7qWV8R56AV`Eg=xAk3bWW)QssY@4Qv~ZIg22Z(1*-Oh
z36(Md?f{EVq+bt6Yw<W28STKB@$f#K$#qmn_$M|qQ~(aBuzg_&``(`bZ4XDFpiu4D
zp51gjGCkyvIFg_gF8(Eshpn{9XY2VEdr!36ufzC_%qvy9Vgx9Ruc^G9_-{gnkRG;I
zzubB*1Wi)r`gwFr=RW1tt|Dln{3_%r8xtk4V$c}jfPrBn3aX9X;OtDBFQj^~hNt`r
zoC@G)AvB9_3K@^n?J<LJ1PC}c>TANuySY10Gtzhe6JYN$DySLcfCzmg{8V>`ht65i
zItV)Iz)(<SwS`0GLkzGdu!Ns7Lw%V+MFkOyCW1VHDF|_ZN*{zPGED-+uwa5e^g>W|
z6c17=kb=a54CYiKw+REtH2a_Tf4?inU#God3=hvfBq0Fguac*x;qWvMO8zm(FQ`Qi
z&_Ae8z_2hMH{%vC1O4Y`f-nf+rlk}>uNg`}J<JF|_j@p%hx(yAT6@*>9%5}=+Mt!&
z{RCJ*Ve3=wT&Ha6O;VTiRUf0EcUkw55s*iLUr6ezd~C18YyN<<5jqCJsfHT|-ynap
z>B<=(k`Mrqbh6LydUP2OMB5fhzv|{l56)7+89$=%z^qvlSQOhd#>!1>6hru|s6ev`
zOX~qS6cqeDy_l$nY#FI2ouAeNGL!P*-xIkusy#q|VCPe<+&T$`iuE;22@dfxfs|;s
z2}pV=NzfC)0T0ZfNuRfHKcYOG7-N5cVKprUT~+~t#Qm&9_j%Cs(09SxNkn~Ay~NV#
za%uAnFVTq^7!pD!iK|C03OP?d3zCXdwUwH_kJWPP)%NdazDcpRf2!!=DF6Hq*dN9r
zRDb26@$wx*F!^Yd3uOlXYnX|Mu)o7fFoq0~LLj7ogp7hLK8jD*3MC+el&4SdkYT$4
zBhJN5dI8M;w?I!^R8>9c{VDn1E$IjJjQt40qahW53|J!|3FX`ho$v%|(-D4k!&r+?
zPkq?L_>c^f^N{XF1U<dRpHa;cN?MSh@?w2Poyf^?f1bK^P`faBgX%cW(&0D+s1V{w
z_ycah+R}=vG^XyIP^QAo1PVk81f!Oqpope2O9R|^B-3Fo$e(f$4-z4=rozso5J_6@
z?vUiR3@tOcrw<+{L9F;-79IFE(s5qGl`Q44u~b&{8|a!QxZP7SFeDI;)Re4@eY$G!
zfD)ZCrVKu=Y#bVPV2cOdhW4O^7}{&qvYOItvdyk;aw@SiBnlG&Trxx`V-bj=sL5-y
zZYy!KMxxMZyxUziHt9hD5Cz4hD~-mr(y(46hPaAWR5Y@h7%~#PDd>mx%Y~`jDu|Jj
z-w!rJ@Ty6N#96siE|&!6y@#qH@2_{Z<;k$LlNc~yG9&OQ`AqQ=iHzXNkJE4U(ZX_a
z*_c8|Bt7z!$*YiTFiC@ezntDlCpcd_EV2ZGdaxlaY>X$Ys*RD9Q3{BBka!=by*tIo
znt{ujTO$vEp1h`hm!6;r*6u=sjghApss^Yy3VB8q&Lvwx6BMU135Y=dJS0@4gZ6|1
znF_hk?C*&|xXNG-$AIKckXIoCQjmS_jAF(K0u&EtFi<_0K<pj|k=VO5HDh2{WYG5-
z3YhF%ET~zv1(i0G@Y~uL5|zS7W+ed<3?#lBMdo3GbkcA&8xOR2P?pZqCbu=iE$u3T
z^SAGUVs6mHub0o9AMQ`x8Vbzb9VCehu9>Hq#dR}-kRT!cug?1y*|4C25k%^$q4$9l
z?ca?FbBwFh=vh4b8ihiL?O3+#VV6)CY;&Ly3jp<mN)OKlkjdSxL)Vj_9<Ipx7OA-a
zLj|6GgbrbY*eBiTM+v#*7JVfkR8^1)sX_?x1}})dz%?IK_-^UD+whskjw?zuFhZ$v
zq~zvrkkLEs28$qMm<2jo0}-Vtia*0SvHA}EO&7Dxo(%9OTTfogFzX68QgC-608_AL
zVV9|6dZfY~3ga*=hHk)u7X)DpEan7Dwcad(5c$93jB!aS4)n?a3bA%5P@s-JCki!!
z8aA1-iXb&*31zuCh2fh+hM4pklX~Q*Gtf7u&>j>$JDUO;Au$Q=Gco~XLjA%Sg%wlQ
zb{->xSu#~<N|VCJR`a-E<OT{@K;p~jsc@CK7R}0W;^SB7WISSFNe}u^chKZQK#=DT
zGn!qUA;7qv8VQkIIU1Qp9SAy-3e^7k>>uzVq=#(y>>j{?^gNDR6dw^gjR+7@8=Mh-
zcqDe9_*8@=6X6E1!t>T}-3L060RK2Z01t5>O%_7X#iZL!V$rs%=VM8TDwbm<qUmC_
z`saE-)+~}RBtk?&0siBe{9nmf`-{!!pC~E28#Fvn8|ej*Qj#b~{jn%g;sIG0#h>5@
zTp&%55RJ5o1^$8-Oo0!YM3EtcC}=3D5ZhF01|kmlZuN<BHy1Ec>O{Lg*b#g`|BJaI
LoG3^usiO*jkgQhv

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/003_kbuild_fixes.diff.bz2 b/openwrt/package/linux/kernel-patches/003_kbuild_fixes.diff.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..cc68c5e7f4f583a4cd3d88522fcf28a98936123e
GIT binary patch
literal 1091
zcmV-J1ibq~T4*^jL0KkKS%uS1+W-NL-++2>b^rhWfA8NU|L@=KPy~4PO`{gs002ou
z(uQgtng*tt29HpBngD19fB@07)b$!1WXYpIXwwmqp@?8j8e$Aag9rdHNRU%Ww21W7
z^*te=X{Ksu42?8-Lu5vWsAOmd88T?l8Z^XYXkr)>Mwo*UpuzwQ5=aO%nl#CvjZ<oR
zo}<b(qtwtcX`p0e117{&1!BY}03gG!ArJ%v0*NRXF`>3U8Kak^aWP_G+hJp}$S?|~
zLMBL&c-rnB8S@dRFUn@jGP&<tCW&o@Ykh7~HFZe@xuWg<i8?LcsUYS^228?RGk*VG
zEy`{=&adc@rWdfBa8FxI16W;$Qr7*JHDOrQlANNrm7-*~iU`Mw=9w80W1T)!2!%ve
z)RHx$Oouoe>({3vC(xVJ(GHduPpD02R-|!;)1Z-eQtlXdLxu;rbdr%Mj$w<Y4;>W)
zk9a`7m4o`!!d<Du6{)8V`HemDFVop~i&TtAF^2f^9)K#23zZr(Vo;Dtp1*W0hBFTc
z<j0Wvjow6cm+O>>2o=d?a`-*`9xA0En5m@7x#JhNuKeDepFJtvoHuk8yMnbfB^{BR
zVAwD<1nvtmfmN3f(9yTvgh?QAjW(YEuB~OF<2*zhBQb8SJT*i^a9-c~Yl@o?oI=Oy
zfsiN^#l$#X5o#9%Nc0LK%uJ4tMEc?{g{CREQ(FP1J$MBdPC}xPrayQvOiVm&4-}Ka
zs-*Ni`dQN+_reTJS_N<pL!ersa3m2IG@o;t%P<z8xeLMZBzNs5q|E|NEu^z)M?r1;
zhH}G6ynV2i%xe(otP~iGqXAHWc~T+ntUl#Iww7pCCllp6%%~QTF-(8v<Fy}oxS8cF
zAYw#$++I2c1|pJK58{KY!Oa@S%=S<Z@GRlPJS+5rkP3zY?=|@4v6oJErW9Q#fgQ9-
zU^&WXZH+vo46Y9QQ86CEOU{%EX!SZ_`_vxO+OWB;g^mW$D@p@Y=OO`+u?puTPD6l5
zfdrt+w}lt1$%m@siwT#L3d<~33UJ`%D^WuQT1BkTT3$6~2FnH>5C|v|fezTB@|7bb
zRPBMuVjO!6JG@RLjlqu4y21q$O_w;ugU(V=G@;W=fnc5*loGU}<_dHX#L&2>2B8cT
z8!MSj3=EA+LLwc8si~X_&Ev)fD>a=53Xzon>`zo-kzI?4bEXbrAU#B3#R#GTm`UT&
zA%+i)hXT!13|ekRLfkmEdrZ@ZsAffbgNd1#i@<TM!Q@7uqEAp#E+9VQIO4g|nojbO
zP&ANXt|q$1wM^IYYb#56qk!Vjvovj80V{&zGZN%htUtl#19%7(zDfjdDqSKbBQl`a
zm1>}R+H6*s6v=F;>Z}U*p}|1fQY=uYwMk%}A(P6(S+enbs*7PT>*ij5mHK<d+>uTc
JBq4Ouw!l^&?^yr<

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/004_386_emu.diff.bz2 b/openwrt/package/linux/kernel-patches/004_386_emu.diff.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..bab1ac54ac2db68f62f361ee907ffdd74d568ed7
GIT binary patch
literal 5292
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

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/005_modularize_vesafb.diff.bz2 b/openwrt/package/linux/kernel-patches/005_modularize_vesafb.diff.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..f8efc501b8b85e106417a400196675612a730df1
GIT binary patch
literal 710
zcmV;%0y+IcT4*^jL0KkKS*#1MSO5W%Uw~RLUH||3f9Kyyzwh7rKmw&Wg+Rhd6CtTj
zCMo)9Ps*E6(=>)?gUUT1Xl+kZPbhkxrh`>KN_vcF)W`rD0009(0000S0|>%th+q&5
zfEY%ZGGQ19XcbdLll3x9HjOFiF&b!SJtIRv8UQpj07MFd;%hLIHy%Fhx|_)dcx-(X
z<z3RD<>Rw7`5}D4KTA#ioC^~GF~z{-ylDC6)Vo-rc!JMAJ+`c6-h#V1pU8v=4uf6V
z_>{765)QvFAVMde2rn85HzPq3qpF5kzgLzvs<Lrn>(1;2Z+bapTEFJQ7!~eymvKsK
zu6IQ%3NMT>!;)k}4wm;BVZsbf<4F+8MvxkUbv$^$c^DUY?iP=^z;N4vvvLrLo1=`C
zgdBy%Z&+)kl!@^w!pf8(&@u4#t;Jg0pz@fUw8|$bt*uryO|U6Ggy)N6Rqc|<Gi06h
zl`OOC5n^eoSEX_7COHMO2c%50Eazy<FmwHpsv_&nlqS}CB+c2c@A%jm=exBXNo2$M
zq0GIP(w>T8Qd=(bZLO)MOm!8d5~C7Mhb^y0DMikXF~g9`4kC@OlY!*ktrNC_^EsPz
z3NFx;M=(T>@+kTNzFVjLK7&YYxHxYpTV&Zk6D9BNIEI#U+szWy{*GZwVMyqjjsgHP
z?A-*62YaV@94H}i$x6_wlGkGv_H@X9U)=>`dREV1v0;0hws;$i(vvoPx@N|2k(+`X
zoc~LS|C(YVgQbAIq(S%FQYhV~ySG`sE4P)5v2`awLS{+C6SpoEl$}Q6tVS*jd}U~D
zv1s3}F-;O#wUL!HV`?ZVh5KzA=J2g#F3wFKn<^}nwxyF+$=etm7_l1|=Or}BVG~cb
s*BLQwv#-yFEu{t*=kDG$nfX%@ID%BnfLTzaGnesqBvXY63c$McfT8zG$N&HU

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/006_init_unshare.diff.bz2 b/openwrt/package/linux/kernel-patches/006_init_unshare.diff.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..374282dfe6520cbb2b6c6235ca4e4d6524d6da5d
GIT binary patch
literal 299
zcmV+`0o49NT4*^jL0KkKS^UD+EdT&9Uw{HILI3}oKmY^)zwh4cFaZWE8ciCfsfL=G
zX{V^#fB+gaWEzOb(@h$hG}8bkA)_V$N=BfYQ%y9`149HF44Mi932GZb%;RKlv*J8U
zQX7FJm&M|LTM8lEl-OI+<paRm2f@j78z@Y>b&}9Wz(I_n?Jo*62Jou`262JPj;wyW
z&76IgPmm=Tb{KUWOen%od}z^*Ads}Q#1A-lhfCxIq;V4!L0U+T3kL0E>F}&-=cHB8
zQ-UdY!_qNciSgnS56p~$6jh+Agj{9G%x!{euP-%;JD2I+!8oKis`g1*Ef$C{EJ;ZV
xQUSCBB*su+u-8KoN(o^_WCHG407wfV&_%v;@Y^8}hqX5%?ntK!5+9ga<)Gf-e)<3a

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/007-scsi_add_remove_single.bz2 b/openwrt/package/linux/kernel-patches/007-scsi_add_remove_single.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..aca7fbd25897daa1968c653c4c236b90b24c2cce
GIT binary patch
literal 3988
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

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/008-ieee1394-fix.bz2 b/openwrt/package/linux/kernel-patches/008-ieee1394-fix.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..7047e3d29deb421a5df8354f1b583dcddd6e6dd8
GIT binary patch
literal 390
zcmV;10eSvHT4*^jL0KkKSsoU#I{*MaUw}d|LI3^xcqEDdzvtiVFab+3FqEcgN$Pnp
zQK#ww4@fd;nF<1WX$Gn2n<?o=Kn8|@&;g(T0#J#iKSdv-Q%HK5q65?bG|*^0Pua`J
zeiBUxxo+o+-^h*r44g@3dkF|`&DQ}XCW4Z;z$g&~oAZ1d+*1bNybw~Vr#?v=O?^DA
zv&qOYh7ypRZ~AjQHQXy#0nWH)I|YfAC}Y}UcQKse==go*Cs>@Kn3N277ZVALI9?a0
zA^P#q8ZnU13WtoCJ{&+eR=oBU*x^zVfx5m)M3o97GgrpNH(AEUY{(k4A401&+s^uK
zCeA|>QlH}3Bi<oVYiOP&?xpeouI7=7m!%z3dzJFj;#|{iA#vmnFxHMprYLz({H3BU
zXPRGP#H`ZR(Y6v7S}Ryoo5eb_D2D<T#_=Q>+XS5jW`L!a0|~(>B$-ZYX#s_(MZYpQ
kvZ$&EAp}VPVTe&o3!pi{A3#XS6#t94BAh5l4+~hGfb0#b?EnA(

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/009-always-inline.bz2 b/openwrt/package/linux/kernel-patches/009-always-inline.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..e81c1a0e2ea7b17727a167cb0e301ebc60c70269
GIT binary patch
literal 468
zcmV;_0W1DOT4*^jL0KkKS@yEVW&i*~Uw}d|NPquxPUqS{zwh7SKmn%?&A^mI)MY<L
zsqIZQJx@&#(?9?;&@h`&HBU+CjWGxs00000007lJPby?$Jt3xsjQ|)%BR~KGQ&jYg
zH5!1?rqpOL8&hcjZA}J%NI>)7r^T|fN2t8f_K9kgQMFh_K}!_PQ1-OZJ-qRQ>b5Lb
z0~2rMdgQ-m>oHw{50y$B_fG8Zrx=S!XAGeb%Un>&Mj498VhP(l4^rwdlx8tgNswy<
zWh7{GY`h@dP~qO|qd1CGCJ$-mB3>zS)K!3$8gJMxD?7PObNGqc;m;w<h`C9q)Jo>Q
zNtpE(u^i-(5g5i0V%4A%7j#+~ES8jZd`Le+3NwVvmx}1BW<fYbnIk4X1MIL<23(g8
zkOZoR9Z!CjKnie*BZE%zR;!K57vAZiF)h*)%sY<ijCLrOH~Z5nQWgrO2vG=>)>~-&
zgN<S;Ath*HV-RVBgC-ibV4ZD1y%rjy9vR|D9IjGNiP0JmkgA>8fzt<xi7;W&!}*~n
zGz;)1dc#~&K=kL(!i_QjOkJ=k!zxN9qyt1iN~ACY0K<%cP;r20D3%`vqFf+V{x0N-
KaG@dXWsJ;m>dPAd

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/010-optimize-for-size.bz2 b/openwrt/package/linux/kernel-patches/010-optimize-for-size.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..9523e475d516731bef85e96f206d6b912a90d9ff
GIT binary patch
literal 1201
zcmV;i1Wx-xT4*^jL0KkKSuL2!TL1v@Uw}d|eDDAAfA8P4zyJU6Pz0(?y`jA0BTkJ0
zC`e7I>Y8m$s5JE&WYa(gq-mfAO$HzVs%D7vlQB&vq|+lKMwmko#2PUJLrhE(gaCj|
z8fi4AsMFLmG{^wR4^SEd)DkEtnW?5tsL`RLKmZy5007Vcs;8owdPO{^l=VGK(<ITO
zO`>fhC#ZUwG7L<O3{S^c0aNz+S05H{BPz2qgSw52)M~>T;g2@Q1ka9!bKe{Pmc!Q;
zzpFFQ!z)Dsk(EH<RXE{#DTFyxO)3jul>)dBpbIwZlRRZvJ?a6Hk}YqKs%fO#+(~!9
zw1f%;qN7katSywcrzK)OK42?__R^7cE_hvXZ>`2wgjzIWVi@?%*aDb>T+`a*7mX5e
zEy+EWNZGN8l`UeXiU|TsR8H;EVi&v2@2&wY&<d)BFG)XED8Nve?lwkKw4QUJx?>`e
zBeiF%F--en|6Q7olJjP)<IVR7d#0z><nVzfCBprP7S0@+`j3eB)kN9>LZ}#6LwfH7
zCMH`xG^+B?fmv_X!LVaNGf=cBBb2t*O(<JMO#f*mwIX|P_?gI&V_2#vJvBSvNGdt|
zH28stc>~QOxa?6aG3`oGp@wtq$QQ&6!UxQFMqx1n;`0d#3&VDExUVjGN~uaKGl(@T
zO8FJ|@J05}$!<Rb#3^d*#nRBA!o-Lt5m=ISK@mDqPeTaIF_?`viz<ay=W<*O2WW%P
z-9p1<L`+PSXXnA6#Mvb?520rjo0uZngCMb2ZGuzu396(ImD%oKzl{2@&Z?%W3t)R%
z2o|MeAbeCwTo;>8#PVsog#^`o+Et}kl|+**{Wn~3Nb?6Vwa5^Pyrv<ps1wfwidXT%
zf!6}TI|RW;U{%G=zl@Wr2@y?SRI@u_*CgnRsakP~bmx$&3iaWrj7-2>P~}u%%8i;g
z8g6=ht72RCmT+4c1LSwN3)LRsds$=Ndn9rfLkQBZ)`eN3KbVM;WQ3#xDd%1h<B{%U
zJe$!;2voIFb*wMiB&lc2o+6<aX2&YL9GeB_hTO4qmFu$vm&MWWoh6fO`5Z}`G5T_>
zR{HA*r-&|^AsHHUg<de_!3?=)5`wqT(Y*)hi3;)Fa;|0(kZ5^L!ULX=20@+=Ol*;r
zM8!MA0xT$`Y+@fNe>zJN%uR(VOR3-6>})c2Y#ndOUO*@cFqJPMa%40ek7lsdED=D(
z>Z@~fE;m*zi@ky<Ev%DKLJ-*w*RxBx1!OHDWhiA%<#)<hy>OH(FD^4hcUDxXD6tC=
z987Yevnsi$y`ZTRgn~C9wumx9tJH)DPGHEdVBnY`Uh}4I=9X-*H%~I>dR0N-rz=vp
zo<;c<;X+wQ<0fc&&aSxK6M+GZ4u$BcL|z7ExZEP5+ZfE-X_n_$opUk_c<Qh<Ac`BL
zR91W1?HFo1XQ-<c!Y|^|6I(rX*7V@)GRa_~xKO!KOdT%5!0G()r0Vsv@RWu;u&G##
zj){1L8CL|Onu;*Q5@eGB%=o|*ragGnkq;hat;~~>>MX;Civ$WY2Ml*<RFdc6y+t^Q
P|BJaIoG3^Z%w(;A1y?Z7

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/012-x86-check_gcc.bz2 b/openwrt/package/linux/kernel-patches/012-x86-check_gcc.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..1f76f96b04af2897535e3f1f47d630f4ea0ca411
GIT binary patch
literal 329
zcmV-P0k-}^T4*^jL0KkKSr+p)(f|NB-+%%zL~sAnYp>2gum9FSFabEw7zzLY3IG5A
z00Aner1dn(jZHLYFpV_PpwMZi6F`bo@gpWiq<ci3rkOM}Y3etjPgB&>)b%Yf^u;#k
zVzjGRZt>YU+?~zF-JWA<Mr`yaCoq_7y}`MeNr?|z`?s)nmK8`UGLmRy_rVFzNjr0%
z2H6xpM`+|A@G3hA7ncxJP_&_OL%giSp>UL_LdJf};~7)K!%0p?hGxOl0NMnJK(<v8
zW~Ly@WP*@bI*|AV2D9)qZ)TXDiMV$Ukp5CNZz4m(i4m#^;&Dy}beY6%EhQx8<UY?b
z!{~&bPbZ?9-zOCHP2~@Z>Y7Z+(eq0Z5(w>d3wg+EOv#@?asGTt-h|ss#GbH0P?%`~
bqlSitRXYy2Ian*O|BJaIoG3^Od7Ehf&p(#N

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/015_cramfs_initrd.diff.bz2 b/openwrt/package/linux/kernel-patches/015_cramfs_initrd.diff.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..6731cfaca4dedad833fb2697e4c8ab2758b86b14
GIT binary patch
literal 406
zcmV;H0crk1T4*^jL0KkKS)?>R?*IV7Uw{IzK>z=HYUA1vzwe*0FadLBv<XB_H5k(=
z>PDJ+Mt}gw(<9UY>IyX@Q)xV)XaS%A3IH@{0F;wWLne$y)B`{O02%-kLehC860sm5
z9d0r{lw{-GjtE2|B{*BI?pM>)7btT{k4#LcV_YTgDqWsEsNnFX@4a`@!<7koEB2n_
z23!cxT94PtE+Luo4}yWlEDs>#+Aux^04IWsbAm>Sz~l~96L{$<8c8a35JF=2yr3Qe
zg@dtx=Tj1Z7*$3+HR2g#6P<PD@M&n30oF4<y}Pg3P5XL2`#Vbh=~=OiYs;)Wpu`CG
zm7yeT@@7^r3c#0O9v^-(z00u#(PPtB;$i!OomoLaCXawa4_m>wKHs_+RtSWWh{SK_
zpb3_Uqr<VO7?4tSH<Do)2rzJM*jgB*gBv|7G~p5tYgR#_gOo&Lu|ZHubL5_pWEWKz
zh@mJ87b7hRwb)74S|N6zpl<vK%Dk~gWYIPbx$u~9ENe{BWIx5+kxmpODGCp}z(IAd
AhX4Qo

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/017-printk.bz2 b/openwrt/package/linux/kernel-patches/017-printk.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..7ffbd12a7a586943f950615f9dd7250bbef2e169
GIT binary patch
literal 336
zcmV-W0k8f-T4*^jL0KkKSv0~FzyJU;-+)3eNPqu*Kp+qRzwh2~FabJ}VX2`{CWvJ6
zWi)6RG&E=mq$xBC05kvq02vGtrX(7k6+cw+gHIv=GCf1oG<^wWO*b>_o_ay)G(D6&
zHGkSv?xlL*o5Y{L6Tcy7r|@-dht+~6o<&le{<gfw;CESA<daY!b5QFe0HE+w3giaV
zucb>fFR<#{ovMF3WeJ5u5JE&uMjk?=3UC-!6U`rBnvh}~H%2^1kCADdj1LiZq0#rB
z7Rat63X-;=YqZw@&T#_~9@$!ve|=N_gkVIrQ-U1oL!N?*t^+0-U`Z285wK=N<|PV@
z*UpGYS`5nN6}{F3ZgNG`PIeG6M+k$YP0@jE*Wi`6WL%iBNx^KIRC=aOZ^vXWAn6K&
iO&68X(f2w#8HGY{UVu`Cg1}c)XcuxtI8cx@!W6(l1dUDr

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/018-slab-loop-init.bz2 b/openwrt/package/linux/kernel-patches/018-slab-loop-init.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..308e576fb1dcd5c9c58b6d18699a0b47375b3403
GIT binary patch
literal 268
zcmV+n0rUPsT4*^jL0KkKS)USqB>(^~-+%%zK!5-LYUKa`yYHUTFaXwIN=c%6j7_PK
z&;SYm^#DB})CitUA%w|^kYvPqni!b?N~!*)rjtjg8fXEa0000w5KBS=mShrnR!|f8
z=2#;c2J;Du@LIS|G#|KPOsHl;qeFDXbd-{+ev*M^G6R{KI)mb<I&q1`417lVcOD9z
z!V#E|fWyZE)yg9v!-vbIh>;<*s98Bx0<y-UDUjZ+BB|ozmsdkeB6F$9o6p2jY!;6<
zCW(8|sNWrDr>R3$NA6B<D`|0s%}Rj$(qM-42_&OOKj9Fui84<ep@a~Wk`L~fs~KvG
S<jBxp@pmLsg$W7qC*n|;8h2p;

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/041-changeloop.patch.bz2 b/openwrt/package/linux/kernel-patches/041-changeloop.patch.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..d822e8a092ac76893a400e959219b3985a4a7828
GIT binary patch
literal 2783
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

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/042-loopfixes.patch.bz2 b/openwrt/package/linux/kernel-patches/042-loopfixes.patch.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..456ee6145af3b5161ac8329f174f4422017360ec
GIT binary patch
literal 640
zcmV-`0)PENT4*^jL0KkKSu}j=A^-tH|9}KMi~wQ(@9S<SkIKLA-}*oTc^xeP!ch=q
zPt;^XPa-rLG-v^!Xc#n_G6xwlX{Hk+AYeu&j1hzyG{69YMIuiLKUB~(0B8UiG{j^y
z!~npQ5;QbSr1lj&1c1Z<Jwc{`0pgR*c!8&@1;9$yX5PfGZurrfTDw>(NY>3tWuT>r
z6_CUxnn-O3afrwzL?ms5Pcg;vah&TnEW8YEfyP_!AWL|7#%U;8be~nC%)oMuxSEa6
zx+088Nokq|ca$Zewk_N+7R+lr+L$p`LFt*xi?8vEVbU)l(rhY|h*B#OXG;$3J{V$p
z7e&?(PuOu*-U!ofiU@|p@}1zO(CG@gQ+TX5MmTj0WTM6L1)MavvN4UkS<5?TQB>E|
z%Tx@LWe*~_7zE!)lA}&F&k>Qunx!T(D(FWhC^e~^!&On}RZ9+yqpM#YGR_Dsw5OkH
zCbe>z{7D`Y&`dDL_&pt~gMu5>S}Ih8!M<aUv@iP=n@!B8G=nHerwO{Ay>!S(zp0p^
z>kd5;`*6;3KGor)D~L4b7u+gRrn+e_QmB#UC79F}6cQpAnAwgA3&u4oD;@*;0z&n|
z8N?+qROU!ISg^U#aiq48PQG<Z`J|KutXrHiM7Rm{h8?vNZ6K*%BD?}2up$JB6(HKn
zjm5>M>FyQEsX_=U6i_l65<qzrFX6QL^c9gJ31EqFsB@gzjRXhkpmb1*j3_djZ*a~)
zFu;n{ra>{7m`o6m;N>S0@}jaT$+8K^(W=cT$y=laWj6$dsAO9R1rv{$9I^d(7$D-z
a5f-pw30OWMA$$3s;_gVN3K9m7okT#Z7aD8;

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/044-streaming_io.bz2 b/openwrt/package/linux/kernel-patches/044-streaming_io.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..fc75024c9f8f81dc951599d2ef56a4d8074b443b
GIT binary patch
literal 1743
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

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/062-silence-blk-queue.bz2 b/openwrt/package/linux/kernel-patches/062-silence-blk-queue.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..85a21e5f6fafcda2eb801fcbaab58d7d4c7d93b9
GIT binary patch
literal 374
zcmV-+0g3)XT4*^jL0KkKSwI%?y8r+^Uw{fQT7UohW9G~RzpwwwFacDoXi9}N(@c#6
zK+tKR3INHbAOI4kjZCTFr|C=y>KXxnk3_^8VgM4RgeIrxX%qEFpnw_xz+`}Wo}<)S
zgcX_uYYsl9;QfPjq?I@MBx*pVfP~*#(CI2CD14VUS}F2n7Lsj9&uSOf7ahlaR}kCm
zADyuBopPF2SfI$1sI!aI4{23_h6`g#)+UVtd=<!jmGG=o8A=R>)f)y!NGZq)$2r)G
z1wspb2Z-5REuvEZr{hOBK?z1XFHG7q2^-Q1FA~P=Q$Hk5M%P(fm#}_3Amf*D=xJ~`
z5w@&hJp%JE>n`UH(QYQBB9I;qAz&d9ZDr$BOkSwLYJ=S@y9bL%3mGFx#8wBvH>(JO
z{gCCL7{TY!dO#|$oESz>Rs68vpea>xBWDqj2gZujc=GXC%%stHoUD=bM~Rj&q$VFJ
U2O4jKWKZ#TBvXY61OaawuxY%Z@c;k-

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/063-silence.kbd.patch.bz2 b/openwrt/package/linux/kernel-patches/063-silence.kbd.patch.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..472eb28dc5238af5047c1c39d3028740f4b5a12b
GIT binary patch
literal 506
zcmV<W0R{d-T4*^jL0KkKS-?d*j{pE;Uw}q1dVl};|Eu1Fzwh5_KmpotoB~oKRNk7C
z@}^A&X#fYP(AoshXc})yY3c-|6+cZiPilG;^*v8hPf!2=10kRQG72f`WQIYY8VVW!
z(V)-<jQ|5cs-_}F$p8Z*K+&MnK=m2`XaFinoB@yq%77UtLtq9KWW$@>D5#^ylqE7o
zny86siwd}iD0(QzmkI^Hqp!2~UjT2FS_l{>zQONNJ?c-NP9bb2Ek&ZJo`@y1Xre^W
zF0&*5r7yv_O*1DfE&_`z6K6-Fv?xnG6cAyNISN-u*t%A&huRRYUGYacG5J|-vV`WT
z5^@G2a}>!LhHcI{Ot(2oOq2_SE9EmSphWs)lsJ|ZS+-xacC8t6sz$<F%CsYBpxV7m
zSFjZ~SDy06jT7HaW+hsPnIw^?GC3L%Y;_9GG1AH!9kVMl*kr|qZzKr0crlgFXI&@R
zh*4S5m((hxF%K-aXmKF6W)}}1Oun?hn*Q;%jkaOG*&tocNY5ZaO$v(CibjNs3TzoA
z0*zb@O3UKGsccFK`C3eqjW{aq2`sichE#(I*5o|Kw54O%VVJ{NNu3j4LQhcPN(jw$
w&v3+Hnd2lZB(ZszvbQ}|MczzH-($v-NF~9gK}6u|6tD4jBvXY63<OiS@T;xaZvX%Q

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/064-shutup-md.bz2 b/openwrt/package/linux/kernel-patches/064-shutup-md.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..89ab47a2b5990c27301cc20892420b2faa6e1784
GIT binary patch
literal 501
zcmV<R0Sf*?T4*^jL0KkKSxNpX8UO%mUw|SoP=Ej1XK&r4zwh7fKmpw%LqbXwKU8`&
z$pZjGY6?9OqfIb0Ov(d6sY5oY={-!EXfYaSXaEL4G&BLB%n6C0!eq&lBME|OrbZ?J
zh5;f%Q^e3y@~7z&$b&)Z2AMR-00*h!k(g?Qt{HQYF0sjtxsXASeePY_;E+l1bZQp4
zj&mCr1ftQvpX*iiSdBUCWvL2U)C;{#Kr4HQpKi!>P}6{XoQ2iK;aN(7NYkB@6Idx}
z%lm*>sTr1$!lu5K*#y>+(DocTi7J?M2E(hXbjHsS(7boZq3u=y)^m_pT0wYNWt$~&
zR22^v+m&Ww(({Od17M^`$YX%?ocIdTvtG(U%+cZVEJLTnO;?tUro%}?SAnow-Z;UQ
zQ9zW2Axz?`r?gRun4h{P{2*eTZ-9h(RGmsD9KzxvbSmxZ`THZW!Z9kSpGwMYITc~Q
zY#WFMg=<DtYA!iBY3?Yu=-&V`^WZP(GNiA#`jG|MaV`r<*`WOpFUCUXkyxy}nRVC@
zULRpZ^Kpct)ui4m5+$FyxDr+U)Wb%jQm+YdlrPTPcxnrUN`+zEDl<T<1XPuyOEBR?
rgUzQzATnf-4g*FKM*xlxR16Xb2q<C15N#g^pZ+f7ig2MIll)XPV8rLH

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/067-squashfs2.patch.bz2 b/openwrt/package/linux/kernel-patches/067-squashfs2.patch.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..2772d734ca0e02df5f2a984020953817859f7072
GIT binary patch
literal 12850
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
QdH?vkk}1N3f-Ve>;Cy3BGynhq

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/076-nmap-freak.bz2 b/openwrt/package/linux/kernel-patches/076-nmap-freak.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..4bd53a8a5b4a5378b2f6a249d0c5ef2752606db4
GIT binary patch
literal 1577
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
bF2!Im3+LR4?Ku=$5C0c(ML1B9WY*wIECt_m

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/077-orinoco-0.13e.bz2 b/openwrt/package/linux/kernel-patches/077-orinoco-0.13e.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..61fe9bb9644134c2d15f1694ebd41d8667b967fc
GIT binary patch
literal 7387
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
NF64@Ep&?TgBUo!Y#|;1g

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/078-hostap.bz2 b/openwrt/package/linux/kernel-patches/078-hostap.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..3a6f819081d310d55b05adf7de801b91f42a0ece
GIT binary patch
literal 113612
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

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/079-jiffies64.bz2 b/openwrt/package/linux/kernel-patches/079-jiffies64.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..498f1fb3e4ca660c14de5a51566766ea8b09be48
GIT binary patch
literal 4774
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
A9smFU

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/089-no-touch-makedep.bz2 b/openwrt/package/linux/kernel-patches/089-no-touch-makedep.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..df7f4a54d9aeecfe580f340d9c36b3985261a239
GIT binary patch
literal 858
zcmV-g1Eu^zT4*^jL0KkKS+Oy#D*yo_Uw}d|e*gdbL5PSBzwh7vPy<-nT5aw^+d(KP
zkWELXnmsA0=^A+^o6}VC8bcxK29HoNQ)!`1PgB(O0gwQCfY1l13IGObA}OJhMuDKn
z00000XdJ>|696U?38nx56DFDl5+zR|CzC38)W)WoOlb^(rV}BEF{wv^XTrXs84eYU
z6vRx#s3Im@r6j~CltO)d6qJxOBp^))1RyePo6z9^;Qoo3h^Pu(6v;YzwXI`P%T;iq
zgS`p?RCN`uo-AU<;s^*D&z(>mxA-j2j!Z@v1cC+`h--(#YT~ywezHiG)wz3cZ2uy~
z%ziCwWdc1`+;3BM?S`X6U)+Wf7KB?wZ!{E4W&N=TQaKv_I)rg5ij(OOf~_`I=_4W+
zb<tWV&K}B#k_m=9J~%^zd953=rUq>%4qD!2f)VSRQ<~yz#y)zoy46a(@9a^QPm$7Q
zW3#6CG;_s>W;E8~Flg1gg=<T<rtPZp0*YmK@M-P40igwg?Z|<#RdaVynD};Fk5Y-!
zB~=$!WV4Iz!IG^fLCCy1c#$*Aa|(P%Ep}E(pBH%gb#J^_6U8S2f$b2Qg@U)DqiM!-
zjCRAz*gTTOWal96lesMBlQt-Hn$u$f*~S~#*51tJ(`caaa6?jL72B60RuiR-jf*P`
z;_MQHwx!DlmsNi0TynL~GDk3F(XDPy4|(^-lP8K9Q-T&1kh^s_#<Fxl91;kVbZKy=
znh`!|O1U?0=8Zqx=yUVN+@ZcaSHW~j4z5cBn5gs^AG%^|%zSw33dYlhMoXZ^y%nLZ
z%iWu&iJ}@CMGhFKmdWW3^17;+g)Ss|LIvWD?H<zSW*{vU2-J#g3&zd#+ymeuqWu#k
zUV<XtD^i52^Qx0{_Ktut<ybKTbjXmjlmr|Iz{(Rw6ZPy(Wt0Fw&`Thf%@IgR5K8!$
z2-`>^Sj_PZ7%&ik20KuYk#^BUYmG~5e-k=Q@mj^JX3mUZW=1s8DwcPfR7?X%NK};&
zR_Kt*s5MP)V4ehANy*};B83=zN;<g3<srjPP2vm@uKTm*D!CM|VHh(ZAvC_WNHZ3g
kv+Fk_W-SaTD>mQpzQT+VdPn)q3Wxk%$rRy2Ld3?jtOUx2*Z=?k

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/kernel-patches/100_VERSION.bz2 b/openwrt/package/linux/kernel-patches/100_VERSION.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..cd4ee5d700c68d95dbbecbdb91b9d9f30dded919
GIT binary patch
literal 235
zcmV<H02Kd1T4*^jL0KkKS-uwNo&W$I-+%%zL~r-fdT-xABdyXvFaXR0Q3>HEpo}#=
zO&Ky^0%*`M(9=K)00w{nWHbpx)M#okBWgCIX&D(kPiZDK9+5*lwRIf1u?jf0)E1z2
z0|JxDDh4<aNc^D@fRvP{6V$el9LAw(8JN;I*WB?FXr`jU#)K)mK%)+{QV$lpl$t|m
z#1v!Bv1mhmqqVoudPIpITtZv0WF!if{N7N7bs>M+tFJLaxS=#W5~;+D$UW?HN=Jhd
ltgM{Q#%JMY6DbUbjgY31OeZrlhG%p9UC9*TLPGdkqIehaWLE$H

literal 0
HcmV?d00001

diff --git a/openwrt/package/linux/linux.config b/openwrt/package/linux/linux.config
new file mode 100644
index 0000000000..60424cef4a
--- /dev/null
+++ b/openwrt/package/linux/linux.config
@@ -0,0 +1,853 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_MIPS=y
+CONFIG_MIPS32=y
+# CONFIG_MIPS64 is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
+# Machine selection
+#
+# CONFIG_ACER_PICA_61 is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_BAGET_MIPS is not set
+# CONFIG_CASIO_E55 is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_DECSTATION is not set
+# CONFIG_MIPS_EV64120 is not set
+# CONFIG_MIPS_EV96100 is not set
+# CONFIG_MIPS_IVR is not set
+# CONFIG_HP_LASERJET is not set
+# CONFIG_IBM_WORKPAD is not set
+# CONFIG_LASAT is not set
+# CONFIG_MIPS_ITE8172 is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MAGNUM_4000 is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_MOMENCO_OCELOT is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_DDB5074 is not set
+# CONFIG_DDB5476 is not set
+# CONFIG_DDB5477 is not set
+# CONFIG_NEC_OSPREY is not set
+# CONFIG_NEC_EAGLE is not set
+# CONFIG_OLIVETTI_M700 is not set
+# CONFIG_NINO is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SGI_IP32 is not set
+# CONFIG_SIBYTE_SB1xxx_SOC is not set
+CONFIG_MIPS_BRCM=y
+CONFIG_BCM947XX=y
+CONFIG_BCM4710=y
+CONFIG_BCM4310=y
+CONFIG_BCM4704=y
+# CONFIG_BCM5365 is not set
+# CONFIG_SNI_RM200_PCI is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_VICTOR_MPC30X is not set
+# CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs init=/etc/preinit noinitrd console=ttyS0,115200"
+CONFIG_PCI=y
+CONFIG_NONCOHERENT_IO=y
+CONFIG_NEW_TIME_C=y
+CONFIG_NEW_IRQ=y
+CONFIG_HND=y
+# CONFIG_MIPS_AU1000 is not set
+
+#
+# CPU selection
+#
+CONFIG_CPU_MIPS32=y
+# CONFIG_CPU_MIPS64 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_CPU_HAS_PREFETCH=y
+# CONFIG_VTAG_ICACHE is not set
+# CONFIG_64BIT_PHYS_ADDR is not set
+# CONFIG_CPU_ADVANCED is not set
+CONFIG_CPU_HAS_LLSC=y
+# CONFIG_CPU_HAS_LLDSCD is not set
+# CONFIG_CPU_HAS_WB is not set
+CONFIG_CPU_HAS_SYNC=y
+
+#
+# General setup
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_NET=y
+# CONFIG_PCI_NAMES is not set
+# CONFIG_ISA is not set
+# CONFIG_EISA is not set
+# CONFIG_TC is not set
+# CONFIG_MCA is not set
+# CONFIG_SBUS is not set
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+# CONFIG_PCMCIA is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+# CONFIG_HOTPLUG_PCI_COMPAQ is not set
+# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
+# CONFIG_HOTPLUG_PCI_ACPI is not set
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_PRINT_SYSCALLS is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_MIPS32_COMPAT is not set
+# CONFIG_MIPS32_O32 is not set
+# CONFIG_MIPS32_N32 is not set
+# CONFIG_BINFMT_ELF32 is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLOCK is not set
+CONFIG_MTD_BLOCK_RO=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_CFI_B1 is not set
+CONFIG_MTD_CFI_B2=y
+# CONFIG_MTD_CFI_B4 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_SSTSTD=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_BCM947XX=y
+# CONFIG_MTD_PB1000 is not set
+# CONFIG_MTD_PB1500 is not set
+# CONFIG_MTD_PB1100 is not set
+# CONFIG_MTD_CSTM_MIPS_IXX is not set
+# CONFIG_MTD_OCELOT is not set
+# CONFIG_MTD_LASAT is not set
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_SFLASH=y
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_MSYS is not set
+# CONFIG_NOROOT is not set
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_FILTER is not set
+CONFIG_UNIX=y
+CONFIG_NETSWAP=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_NAT=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_TOS=y
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_IP_ROUTE_LARGE_TABLES is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+#   IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+CONFIG_IP_NF_FTP=y
+CONFIG_IP_NF_H323=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_TFTP=y
+CONFIG_IP_NF_IRC=y
+CONFIG_IP_NF_CT_PROTO_GRE=y
+CONFIG_IP_NF_PPTP=y
+CONFIG_IP_NF_MMS=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_SET=m
+CONFIG_IP_NF_SET_MAX=256
+CONFIG_IP_NF_SET_IPMAP=m
+CONFIG_IP_NF_SET_PORTMAP=m
+CONFIG_IP_NF_SET_MACIPMAP=m
+CONFIG_IP_NF_SET_IPHASH=m
+CONFIG_IP_NF_MATCH_QUOTA=m
+CONFIG_IP_NF_POOL=m
+CONFIG_IP_POOL_STATISTICS=y
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_DSTLIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=y
+CONFIG_IP_NF_MATCH_MULTIPORT=y
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_CONDITION=m
+# CONFIG_IP_NF_MATCH_RANDOM is not set
+CONFIG_IP_NF_MATCH_PSD=m
+# CONFIG_IP_NF_MATCH_OSF is not set
+# CONFIG_IP_NF_MATCH_NTH is not set
+CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
+# CONFIG_IP_NF_MATCH_FUZZY is not set
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+# CONFIG_IP_NF_MATCH_U32 is not set
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=y
+# CONFIG_IP_NF_MATCH_REALM is not set
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=y
+CONFIG_IP_NF_MATCH_CONNMARK=m
+CONFIG_IP_NF_MATCH_CONNLIMIT=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+CONFIG_IP_NF_MATCH_STRING=m
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_MATCH_PHYSDEV=m
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_NETLINK=m
+CONFIG_IP_NF_TARGET_IPV4OPTSSTRIP=m
+CONFIG_IP_NF_TARGET_MIRROR=m
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_NAT_H323=y
+# CONFIG_IP_NF_TARGET_SAME is not set
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+CONFIG_IP_NF_NAT_PPTP=y
+CONFIG_IP_NF_NAT_PROTO_GRE=y
+# CONFIG_IP_NF_NAT_LOCAL is not set
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=y
+CONFIG_IP_NF_NAT_MMS=y
+CONFIG_IP_NF_NAT_FTP=y
+CONFIG_IP_NF_NAT_TFTP=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=y
+CONFIG_IP_NF_TARGET_IPMARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+CONFIG_IP_NF_TARGET_LOG=y
+CONFIG_IP_NF_TARGET_CONNMARK=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=y
+# CONFIG_IP_NF_RAW is not set
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IPV6=m
+
+#
+#   IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+# CONFIG_IP6_NF_MATCH_RANDOM is not set
+# CONFIG_IP6_NF_MATCH_NTH is not set
+# CONFIG_IP6_NF_MATCH_FUZZY is not set
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AHESP is not set
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+# CONFIG_IP6_NF_TARGET_HL is not set
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+CONFIG_VLAN_8021Q=y
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+
+#
+# Appletalk devices
+#
+# CONFIG_DEV_APPLETALK is not set
+# CONFIG_DECNET is not set
+CONFIG_BRIDGE=y
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_IPF=m
+CONFIG_BRIDGE_EBT_ARPF=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_VLANF=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_MARKF=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+CONFIG_WAN_ROUTER=m
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_CSZ=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_POLICE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+# CONFIG_PHONE_IXJ is not set
+# CONFIG_PHONE_IXJ_PCMCIA is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# Broadcom HND network devices
+#
+CONFIG_HND=y
+# CONFIG_IL is not set
+CONFIG_ET=m
+# CONFIG_ET_4413 is not set
+CONFIG_ET_47XX=y
+CONFIG_WL=m
+CONFIG_WL_AP=y
+CONFIG_WL_STA=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_SUNLANCE is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_PLX_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+CONFIG_SHAPER=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=128
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_I810_TCO is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_60XX_WDT is not set
+# CONFIG_SC1200_WDT is not set
+CONFIG_SOFT_WATCHDOG=y
+# CONFIG_W83877F_WDT is not set
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_MACHZ_WDT is not set
+# CONFIG_INDYDOG is not set
+# CONFIG_AMD7XX_TCO is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# File systems
+#
+CONFIG_BLKDEV_SWAP=m
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+# CONFIG_JFFS2_BBC_ARMLIB is not set
+CONFIG_JFFS2_BBC_LZO=y
+CONFIG_JFFS2_BBC_LZARI=y
+CONFIG_JFFS2_BBC_LZHD=y
+CONFIG_JFFS2_BBC_LZSS=y
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
+# CONFIG_TMPFS is not set
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+CONFIG_DEVFS_FS=y
+CONFIG_DEVFS_MOUNT=y
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_EXT2_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_SWAP_VIA_NFS=m
+CONFIG_NETSWAP=y
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_SUNRPC=m
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+# CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SMB_NLS is not set
+# CONFIG_NLS is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# Support for USB gadgets
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BLUEZ is not set
+
+#
+# Kernel hacking
+#
+CONFIG_CROSSCOMPILE=y
+# CONFIG_KERNPROF is not set
+# CONFIG_MCOUNT is not set
+# CONFIG_DEBUG is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_MIPS_UNCACHED is not set
+# CONFIG_KTRACE is not set
+# CONFIG_HWSIM is not set
+
+#
+# Library routines
+#
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/openwrt/package/linux/linux.mk b/openwrt/package/linux/linux.mk
new file mode 100644
index 0000000000..69245b083c
--- /dev/null
+++ b/openwrt/package/linux/linux.mk
@@ -0,0 +1,115 @@
+#############################################################
+#
+# Linux kernel targets
+#
+# Note:  If you have any patches to apply, create the directory
+# sources/kernel-patches and put your patches in there and number
+# them in the order you wish to apply them...  i.e.
+#
+#   sources/kernel-patches/001-my-special-stuff.bz2
+#   sources/kernel-patches/003-gcc-Os.bz2
+#   sources/kernel-patches/004_no-warnings.bz2
+#   sources/kernel-patches/030-lowlatency-mini.bz2
+#   sources/kernel-patches/031-lowlatency-fixes-5.bz2
+#   sources/kernel-patches/099-shutup.bz2
+#   etc...
+#
+# these patches will all be applied by the patch-kernel.sh
+# script (which will also abort the build if it finds rejects)
+#  -Erik
+#
+#############################################################
+ifneq ($(filter $(TARGETS),linux),)
+
+# Version of Linux to download and then apply patches to
+DOWNLOAD_LINUX_VERSION=2.4.27
+# Version of Linux AFTER patches
+LINUX_VERSION=2.4.28-pre4-erik
+
+LINUX_FORMAT=vmlinux
+#LINUX_FORMAT=images/zImage.prep
+LINUX_KARCH:=$(shell echo $(ARCH) | sed -e 's/i[3-9]86/i386/' \
+	-e 's/mipsel/mips/' \
+	-e 's/powerpc/ppc/' \
+	-e 's/sh[234]/sh/' \
+	)
+LINUX_BINLOC=arch/$(LINUX_KARCH)/boot/$(LINUX_FORMAT)
+
+LINUX_DIR=$(BUILD_DIR)/linux-$(LINUX_VERSION)
+LINUX_SOURCE=linux-$(DOWNLOAD_LINUX_VERSION).tar.bz2
+LINUX_SITE=http://www.kernel.org/pub/linux/kernel/v2.4
+LINUX_KCONFIG=package/linux/linux.config
+LINUX_KERNEL=$(BUILD_DIR)/buildroot-kernel
+# Used by pcmcia-cs and others
+LINUX_SOURCE_DIR=$(LINUX_DIR)
+
+
+$(DL_DIR)/$(LINUX_SOURCE):
+	-mkdir -p $(DL_DIR)
+	$(WGET) -P $(DL_DIR) $(LINUX_SITE)/$(LINUX_SOURCE)
+
+$(LINUX_DIR)/.unpacked: $(DL_DIR)/$(LINUX_SOURCE)
+	-mkdir -p $(TOOL_BUILD_DIR)
+	-(cd $(TOOL_BUILD_DIR); ln -sf $(LINUX_DIR) linux)
+	bzcat $(DL_DIR)/$(LINUX_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+ifneq ($(DOWNLOAD_LINUX_VERSION),$(LINUX_VERSION))
+	# Rename the dir from the downloaded version to the AFTER patch version	
+	mv -f $(BUILD_DIR)/linux-$(DOWNLOAD_LINUX_VERSION) $(BUILD_DIR)/linux-$(LINUX_VERSION)
+endif
+	mkdir -p package/linux/kernel-patches
+	toolchain/patch-kernel.sh $(LINUX_DIR) package/linux/kernel-patches
+	touch $(LINUX_DIR)/.unpacked
+
+$(LINUX_KCONFIG):
+	@if [ ! -f "$(LINUX_KCONFIG)" ] ; then \
+		echo ""; \
+		echo "You should create a .config for your kernel"; \
+		echo "and install it as $(LINUX_KCONFIG)"; \
+		echo ""; \
+		sleep 5; \
+	fi;
+
+$(LINUX_DIR)/.configured $(BUILD_DIR)/linux/.configured:  $(LINUX_DIR)/.unpacked  $(LINUX_KCONFIG)
+	$(SED) "s,^CROSS_COMPILE.*,CROSS_COMPILE=$(KERNEL_CROSS),g;" $(LINUX_DIR)/Makefile
+	-cp $(LINUX_KCONFIG) $(LINUX_DIR)/.config
+	$(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) oldconfig include/linux/version.h
+	touch $(LINUX_DIR)/.configured
+
+$(LINUX_DIR)/.depend_done:  $(LINUX_DIR)/.configured
+	$(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) dep
+	touch $(LINUX_DIR)/.depend_done
+
+$(LINUX_DIR)/$(LINUX_BINLOC): $(LINUX_DIR)/.depend_done
+	$(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) PATH=$(TARGET_PATH) $(LINUX_FORMAT)
+	$(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) PATH=$(TARGET_PATH) modules
+
+$(LINUX_KERNEL): $(LINUX_DIR)/$(LINUX_BINLOC)
+	cp -fa $(LINUX_DIR)/$(LINUX_BINLOC) $(LINUX_KERNEL)
+	touch -c $(LINUX_KERNEL)
+
+$(TARGET_DIR)/lib/modules/$(LINUX_VERSION)/modules.dep: $(LINUX_KERNEL)
+	rm -rf $(TARGET_DIR)/lib/modules
+	rm -f $(TARGET_DIR)/sbin/cardmgr
+	$(MAKE) -C $(LINUX_DIR) INSTALL_MOD_PATH=$(TARGET_DIR) modules_install
+	(cd $(TARGET_DIR)/lib/modules; ln -s $(LINUX_VERSION)/kernel/drivers .)
+
+$(STAGING_DIR)/include/linux/version.h: $(LINUX_DIR)/.configured
+	mkdir -p $(STAGING_DIR)/include
+	tar -ch -C $(LINUX_DIR)/include -f - linux | tar -xf - -C $(STAGING_DIR)/include/
+	tar -ch -C $(LINUX_DIR)/include -f - asm | tar -xf - -C $(STAGING_DIR)/include/
+
+linux: $(STAGING_DIR)/include/linux/version.h $(TARGET_DIR)/lib/modules/$(LINUX_VERSION)/modules.dep
+
+linux-source: $(DL_DIR)/$(LINUX_SOURCE)
+
+# This has been renamed so we do _NOT_ by default run this on 'make clean'
+linuxclean: clean
+	rm -f $(LINUX_KERNEL)
+	-$(MAKE) -C $(LINUX_DIR) clean
+
+linux-dirclean:
+	rm -rf $(LINUX_DIR)
+
+linux-headers: $(LINUX_DIR)/.configured 
+
+endif
diff --git a/openwrt/package/sed/Config.in b/openwrt/package/sed/Config.in
new file mode 100644
index 0000000000..5cfc12d41f
--- /dev/null
+++ b/openwrt/package/sed/Config.in
@@ -0,0 +1,9 @@
+config BR2_PACKAGE_SED
+	bool "sed"
+	default n
+	help
+	  Super-useful stream editor.
+
+	  http://sed.sourceforge.net/
+
+	  Most people will answer Y.
diff --git a/openwrt/package/sed/Makefile.in b/openwrt/package/sed/Makefile.in
new file mode 100644
index 0000000000..6738e4f246
--- /dev/null
+++ b/openwrt/package/sed/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_PACKAGE_SED)),y)
+TARGETS+=sed
+endif
diff --git a/openwrt/package/sed/sed.mk b/openwrt/package/sed/sed.mk
new file mode 100644
index 0000000000..5154c1f795
--- /dev/null
+++ b/openwrt/package/sed/sed.mk
@@ -0,0 +1,136 @@
+#############################################################
+#
+# sed
+#
+#############################################################
+SED_VER:=4.1.2
+SED_SOURCE:=sed-$(SED_VER).tar.gz
+SED_SITE:=ftp://ftp.gnu.org/gnu/sed
+SED_CAT:=zcat
+SED_DIR1:=$(TOOL_BUILD_DIR)/sed-$(SED_VER)
+SED_DIR2:=$(BUILD_DIR)/sed-$(SED_VER)
+SED_BINARY:=sed/sed
+SED_TARGET_BINARY:=bin/sed
+ifeq ($(strip $(BUILD_WITH_LARGEFILE)),true)
+SED_CPPFLAGS=-D_FILE_OFFSET_BITS=64
+endif
+SED:=$(STAGING_DIR)/bin/sed -i -e
+HOST_SED_TARGET=$(shell package/sed/sedcheck.sh)
+
+$(DL_DIR)/$(SED_SOURCE):
+	mkdir -p $(DL_DIR)
+	$(WGET) -P $(DL_DIR) $(SED_SITE)/$(SED_SOURCE)
+
+sed-source: $(DL_DIR)/$(SED_SOURCE)
+
+
+#############################################################
+#
+# build sed for use on the host system
+#
+#############################################################
+$(SED_DIR1)/.unpacked: $(DL_DIR)/$(SED_SOURCE)
+	mkdir -p $(TOOL_BUILD_DIR)
+	mkdir -p $(STAGING_DIR)/bin;
+	$(SED_CAT) $(DL_DIR)/$(SED_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(SED_DIR1)/.unpacked
+
+$(SED_DIR1)/.configured: $(SED_DIR1)/.unpacked
+	(cd $(SED_DIR1); rm -rf config.cache; \
+		./configure \
+		--prefix=$(STAGING_DIR) \
+		--prefix=/usr \
+	);
+	touch  $(SED_DIR1)/.configured
+
+$(SED_DIR1)/$(SED_BINARY): $(SED_DIR1)/.configured
+	$(MAKE) -C $(SED_DIR1)
+
+# This stuff is needed to work around GNU make deficiencies
+build-sed-host-binary: $(SED_DIR1)/$(SED_BINARY)
+	@if [ -L $(STAGING_DIR)/$(SED_TARGET_BINARY) ] ; then \
+		rm -f $(STAGING_DIR)/$(SED_TARGET_BINARY); fi;
+	@if [ ! -f $(STAGING_DIR)/$(SED_TARGET_BINARY) -o $(STAGING_DIR)/$(SED_TARGET_BINARY) \
+	-ot $(SED_DIR1)/$(SED_BINARY) ] ; then \
+	    set -x; \
+	    mkdir -p $(STAGING_DIR)/bin; \
+	    $(MAKE) DESTDIR=$(STAGING_DIR) -C $(SED_DIR1) install; \
+	    mv $(STAGING_DIR)/usr/bin/sed $(STAGING_DIR)/bin/; \
+	    rm -rf $(STAGING_DIR)/share/locale $(STAGING_DIR)/usr/info \
+		    $(STAGING_DIR)/usr/man $(STAGING_DIR)/usr/share/doc; fi
+
+use-sed-host-binary:
+	@if [ -x /usr/bin/sed ]; then SED="/usr/bin/sed"; else \
+	    if [ -x /bin/sed ]; then SED="/bin/sed"; fi; fi; \
+	    mkdir -p $(STAGING_DIR)/bin; \
+	    rm -f $(STAGING_DIR)/$(SED_TARGET_BINARY); \
+	    ln -s $$SED $(STAGING_DIR)/$(SED_TARGET_BINARY)
+
+host-sed: $(HOST_SED_TARGET)
+
+host-sed-clean:
+	$(MAKE) DESTDIR=$(STAGING_DIR) -C $(SED_DIR1) uninstall
+	-$(MAKE) -C $(SED_DIR1) clean
+
+host-sed-dirclean:
+	rm -rf $(SED_DIR1)
+
+
+#############################################################
+#
+# build sed for use on the target system
+#
+#############################################################
+$(SED_DIR2)/.unpacked: $(DL_DIR)/$(SED_SOURCE)
+	$(SED_CAT) $(DL_DIR)/$(SED_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(SED_DIR2)/.unpacked
+
+$(SED_DIR2)/.configured: $(SED_DIR2)/.unpacked
+	(cd $(SED_DIR2); rm -rf config.cache; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		CPPFLAGS="$(SED_CFLAGS)" \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--libexecdir=/usr/lib \
+		--sysconfdir=/etc \
+		--datadir=/usr/share \
+		--localstatedir=/var \
+		--mandir=/usr/man \
+		--infodir=/usr/info \
+		$(DISABLE_NLS) \
+	);
+	touch  $(SED_DIR2)/.configured
+
+$(SED_DIR2)/$(SED_BINARY): $(SED_DIR2)/.configured
+	$(MAKE) CC=$(TARGET_CC) -C $(SED_DIR2)
+
+# This stuff is needed to work around GNU make deficiencies
+sed-target_binary: $(SED_DIR2)/$(SED_BINARY)
+	@if [ -L $(TARGET_DIR)/$(SED_TARGET_BINARY) ] ; then \
+		rm -f $(TARGET_DIR)/$(SED_TARGET_BINARY); fi;
+
+	@if [ ! -f $(SED_DIR2)/$(SED_BINARY) -o $(TARGET_DIR)/$(SED_TARGET_BINARY) \
+	-ot $(SED_DIR2)/$(SED_BINARY) ] ; then \
+	    set -x; \
+	    $(MAKE) DESTDIR=$(TARGET_DIR) CC=$(TARGET_CC) -C $(SED_DIR2) install; \
+	    mv $(TARGET_DIR)/usr/bin/sed $(TARGET_DIR)/bin/; \
+	    rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
+		    $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc; fi
+
+sed: uclibc sed-target_binary
+
+sed-clean:
+	$(MAKE) DESTDIR=$(TARGET_DIR) CC=$(TARGET_CC) -C $(SED_DIR2) uninstall
+	-$(MAKE) -C $(SED_DIR2) clean
+
+sed-dirclean:
+	rm -rf $(SED_DIR2)
+
+
diff --git a/openwrt/package/sed/sedcheck.sh b/openwrt/package/sed/sedcheck.sh
new file mode 100755
index 0000000000..4d645b6ab0
--- /dev/null
+++ b/openwrt/package/sed/sedcheck.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+if [ -x /usr/bin/sed ]; then 
+    SED="/usr/bin/sed";
+else
+    if [ -x /bin/sed ]; then 
+	SED="/bin/sed";
+    fi;
+fi;
+
+echo "HELLO" > .sedtest
+$SED -i -e "s/HELLO/GOODBYE/" .sedtest >/dev/null 2>&1
+
+if [ $? != 0 ] ; then
+	echo build-sed-host-binary
+else
+	echo use-sed-host-binary
+fi;
+rm -f .sedtest
+
+
diff --git a/openwrt/target/Config.in b/openwrt/target/Config.in
new file mode 100644
index 0000000000..18d4114e6d
--- /dev/null
+++ b/openwrt/target/Config.in
@@ -0,0 +1,8 @@
+#
+
+menu "Target Filesystem"
+
+source "target/jffs2/Config.in"
+
+endmenu
+
diff --git a/openwrt/target/Makefile.in b/openwrt/target/Makefile.in
new file mode 100644
index 0000000000..c01ade299a
--- /dev/null
+++ b/openwrt/target/Makefile.in
@@ -0,0 +1 @@
+# Nothing
diff --git a/openwrt/target/default/device_table.txt b/openwrt/target/default/device_table.txt
new file mode 100644
index 0000000000..8b46ca0323
--- /dev/null
+++ b/openwrt/target/default/device_table.txt
@@ -0,0 +1,162 @@
+# When building a target filesystem, it is desirable to not have to
+# become root and then run 'mknod' a thousand times.  Using a device 
+# table you can create device nodes and directories "on the fly".
+#
+# This is a sample device table file for use with genext2fs.  You can
+# do all sorts of interesting things with a device table file.  For
+# example, if you want to adjust the permissions on a particular file
+# you can just add an entry like:
+#   /sbin/foobar        f       2755    0       0       -       -       -       -       -
+# and (assuming the file /sbin/foobar exists) it will be made setuid
+# root (regardless of what its permissions are on the host filesystem.
+# Furthermore, you can use a single table entry to create a many device
+# minors.  For example, if I wanted to create /dev/hda and /dev/hda[0-15]
+# I could just use the following two table entries:
+#   /dev/hda    b       640     0       0       3       0       0       0       -
+#   /dev/hda    b       640     0       0       3       1       1       1       15
+# 
+# Device table entries take the form of:
+# <name>    <type>      <mode>  <uid>   <gid>   <major> <minor> <start> <inc>   <count>
+# where name is the file name,  type can be one of: 
+#       f       A regular file
+#       d       Directory
+#       c       Character special device file
+#       b       Block special device file
+#       p       Fifo (named pipe)
+# uid is the user id for the target file, gid is the group id for the
+# target file.  The rest of the entries (major, minor, etc) apply only 
+# to device special files.
+
+# Have fun
+# -Erik Andersen <andersen@codepoet.org>
+#
+
+#<name>		<type>	<mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
+/dev		d	755	0	0	-	-	-	-	-
+/dev/pts	d	755	0	0	-	-	-	-	-
+/tmp		d	1777	0	0	-	-	-	-	-
+/etc		d	755	0	0	-	-	-	-	-
+/home/default	d	2755	1000	1000	-	-	-	-	-
+#<name>					<type>	<mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
+/bin/busybox				f	4755	0	0	-	-	-	-	-
+/etc/shadow				f	600	0	0	-	-	-	-	-
+/etc/passwd				f	644	0	0	-	-	-	-	-
+/etc/network/if-up.d			d	755	0	0	-	-	-	-	-
+/etc/network/if-pre-up.d		d	755	0	0	-	-	-	-	-
+/etc/network/if-down.d			d	755	0	0	-	-	-	-	-
+/etc/network/if-post-down.d		d	755	0	0	-	-	-	-	-
+/usr/share/udhcpc/default.script	f	755	0	0	-	-	-	-	-
+# uncomment this to allow starting x as non-root
+#/usr/X11R6/bin/Xfbdev		f	4755	0	0	-	-	-	-	-
+# Normal system devices
+/dev/mem	c	640	0	0	1	1	0	0	-
+/dev/kmem	c	640	0	0	1	2	0	0	-
+/dev/null	c	666	0	0	1	3	0	0	-
+/dev/zero	c	666	0	0	1	5	0	0	-
+/dev/random	c	666	0	0	1	8	0	0	-
+/dev/urandom	c	666	0	0	1	9	0	0	-
+/dev/ram	b	640	0	0	1	1	0	0	-
+/dev/ram	b	640	0	0	1	0	0	1	4
+/dev/loop	b	640	0	0	7	0	0	1	2
+/dev/rtc	c	640	0	0	10	135	-	-	-
+/dev/console	c	666	0	0	5	1	-	-	-
+/dev/tty	c	666	0	0	5	0	-	-	-
+/dev/tty	c	666	0	0	4	0	0	1	8
+/dev/ttyp	c	666	0	0	3	0	0	1	10
+/dev/ptyp	c       666     0       0       2       0       0       1       10
+/dev/ptmx	c	666	0	0	5	2	-	-	-
+/dev/ttyP	c	666	0	0	57	0	0	1	4
+/dev/ttyS	c	666	0	0	4	64	0	1	4
+/dev/fb		c	640	0	5	29	0	0	32	4
+#/dev/ttySA	c	666	0	0	204	5	0	1	3
+/dev/psaux	c	666	0	0	10	1	0	0	-
+#/dev/ppp	c	666	0	0	108	0	-	-	-
+
+# MTD stuff
+/dev/mtd	c	640	0	0	90	0	0	2	4
+/dev/mtdblock	b	640	0	0	31	0	0	1	4
+
+#Tun/tap driver
+/dev/net	d	755	0	0	-	-	-	-	-
+/dev/net/tun	c	660	0	0	10	200	-	-	-
+
+# Audio stuff
+#/dev/audio	c	666	0	29	14	4	-	-	-
+#/dev/audio1	c	666	0	29	14	20	-	-	-
+#/dev/dsp	c	666	0	29	14	3	-	-	-
+#/dev/dsp1	c	666	0	29	14	19	-	-	-
+#/dev/sndstat	c	666	0	29	14	6	-	-	-
+
+# User-mode Linux stuff
+/dev/ubda	b	640	0	0	98	0	0	0	-
+/dev/ubda	b	640	0	0	98	1	1	1	15
+
+# IDE Devices
+/dev/hda	b	640	0	0	3	0	0	0	-
+/dev/hda	b	640	0	0	3	1	1	1	15
+/dev/hdb	b	640	0	0	3	64	0	0	-
+/dev/hdb	b	640	0	0	3	65	1	1	15
+#/dev/hdc	b	640	0	0	22	0	0	0	-
+#/dev/hdc	b	640	0	0	22	1	1	1	15
+#/dev/hdd	b	640	0	0	22	64	0	0	-
+#/dev/hdd	b	640	0	0	22	65	1	1	15
+#/dev/hde	b	640	0	0	33	0	0	0	-
+#/dev/hde	b	640	0	0	33	1	1	1	15
+#/dev/hdf	b	640	0	0	33	64	0	0	-
+#/dev/hdf	b	640	0	0	33	65	1	1	15
+#/dev/hdg	b	640	0	0	34	0	0	0	-
+#/dev/hdg	b	640	0	0	34	1	1	1	15
+#/dev/hdh	b	640	0	0	34	64	0	0	-
+#/dev/hdh	b	640	0	0	34	65	1	1	15
+
+# SCSI Devices
+#/dev/sda	b	640	0	0	8	0	0	0	-
+#/dev/sda	b	640	0	0	8	1	1	1	15
+#/dev/sdb	b	640	0	0	8	16	0	0	-
+#/dev/sdb	b	640	0	0	8	17	1	1	15
+#/dev/sdc	b	640	0	0	8	32	0	0	-
+#/dev/sdc	b	640	0	0	8	33	1	1	15
+#/dev/sdd	b	640	0	0	8	48	0	0	-
+#/dev/sdd	b	640	0	0	8	49	1	1	15
+#/dev/sde	b	640	0	0	8	64	0	0	-
+#/dev/sde	b	640	0	0	8	65	1	1	15
+#/dev/sdf	b	640	0	0	8	80	0	0	-
+#/dev/sdf	b	640	0	0	8	81	1	1	15
+#/dev/sdg	b	640	0	0	8	96	0	0	-
+#/dev/sdg	b	640	0	0	8	97	1	1	15
+#/dev/sdh	b	640	0	0	8	112	0	0	-
+#/dev/sdh	b	640	0	0	8	113	1	1	15
+#/dev/sg	c	640	0	0	21	0	0	1	15
+#/dev/scd	b	640	0	0	11	0	0	1	15
+#/dev/st	c	640	0	0	9	0	0	1	8
+#/dev/nst	c	640	0	0	9	128	0	1	8
+#/dev/st	c	640	0	0	9	32	1	1	4
+#/dev/st	c	640	0	0	9	64	1	1	4
+#/dev/st	c	640	0	0	9	96	1	1	4
+
+# Floppy disk devices
+#/dev/fd	b	640	0	0	2	0	0	1	2
+#/dev/fd0d360	b	640	0	0	2	4	0	0	-
+#/dev/fd1d360	b	640	0	0	2	5	0	0	-
+#/dev/fd0h1200	b	640	0	0	2	8	0	0	-
+#/dev/fd1h1200	b	640	0	0	2	9	0	0	-
+#/dev/fd0u1440	b	640	0	0	2	28	0	0	-
+#/dev/fd1u1440	b	640	0	0	2	29	0	0	-
+#/dev/fd0u2880	b	640	0	0	2	32	0	0	-
+#/dev/fd1u2880	b	640	0	0	2	33	0	0	-
+
+# All the proprietary cdrom devices in the world
+#/dev/aztcd	b	640	0	0	29	0	0	0	-
+#/dev/bpcd	b	640	0	0	41	0	0	0	-
+#/dev/capi20	c	640	0	0	68	0	0	1	2
+#/dev/cdu31a	b	640	0	0	15	0	0	0	-
+#/dev/cdu535	b	640	0	0	24	0	0	0	-
+#/dev/cm206cd	b	640	0	0	32	0	0	0	-
+#/dev/sjcd	b	640	0	0	18	0	0	0	-
+#/dev/sonycd	b	640	0	0	15	0	0	0	-
+#/dev/gscd	b	640	0	0	16	0	0	0	-
+#/dev/sbpcd	b	640	0	0	25	0	0	0	-
+#/dev/sbpcd	b	640	0	0	25	0	0	1	4
+#/dev/mcd	b	640	0	0	23	0	0	0	-
+#/dev/optcd	b	640	0	0	17	0	0	0	-
+
diff --git a/openwrt/target/default/skel.tar.gz b/openwrt/target/default/skel.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..aa6ba5518663acc7614d726718b3c4d59f720a6d
GIT binary patch
literal 4846
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
F{2%ai`9J^w

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/etc/TZ b/openwrt/target/default/target_skeleton/etc/TZ
new file mode 100644
index 0000000000..9fcb2a3c56
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/TZ
@@ -0,0 +1 @@
+MST7MDT
diff --git a/openwrt/target/default/target_skeleton/etc/fstab b/openwrt/target/default/target_skeleton/etc/fstab
new file mode 100644
index 0000000000..6d33629a7b
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/fstab
@@ -0,0 +1,8 @@
+# /etc/fstab: static file system information.
+#
+# <file system> <mount pt>     <type>	<options>         <dump> <pass>
+/dev/root       /              ext2	rw,noauto         0      1
+proc		/proc	       proc     defaults	  0	 0
+devpts		/dev/pts       devpts   defaults,gid=5,mode=620	  0	 0
+tmpfs           /tmp           tmpfs    defaults          0      0
+
diff --git a/openwrt/target/default/target_skeleton/etc/group b/openwrt/target/default/target_skeleton/etc/group
new file mode 100644
index 0000000000..a21ef0f769
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/group
@@ -0,0 +1,10 @@
+root:x:0:
+daemon:x:1:
+bin:x:2:
+sys:x:3:
+adm:x:4:
+tty:x:5:
+disk:x:6:
+utmp:x:43:
+staff:x:50:
+default:x:1000:
diff --git a/openwrt/target/default/target_skeleton/etc/hostname b/openwrt/target/default/target_skeleton/etc/hostname
new file mode 100644
index 0000000000..52e67d68aa
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/hostname
@@ -0,0 +1 @@
+uclibc
diff --git a/openwrt/target/default/target_skeleton/etc/hosts b/openwrt/target/default/target_skeleton/etc/hosts
new file mode 100644
index 0000000000..ba712fe033
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/hosts
@@ -0,0 +1 @@
+127.0.0.1	localhost
diff --git a/openwrt/target/default/target_skeleton/etc/init.d/S20urandom b/openwrt/target/default/target_skeleton/etc/init.d/S20urandom
new file mode 100755
index 0000000000..433fafee4e
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/init.d/S20urandom
@@ -0,0 +1,44 @@
+#! /bin/sh
+#
+# urandom	This script saves the random seed between reboots.
+#		It is called from the boot, halt and reboot scripts.
+#
+# Version:	@(#)urandom  1.33  22-Jun-1998  miquels@cistron.nl
+#
+
+[ -c /dev/urandom ] || exit 0
+#. /etc/default/rcS
+
+case "$1" in
+	start|"")
+		if [ "$VERBOSE" != no ]
+		then
+			echo -n "Initializing random number generator... "
+		fi
+		# Load and then save 512 bytes,
+		# which is the size of the entropy pool
+		if [ -f /etc/random-seed ]
+		then
+			cat /etc/random-seed >/dev/urandom
+		fi
+		rm -f /etc/random-seed
+		umask 077
+		dd if=/dev/urandom of=/etc/random-seed count=1 \
+			>/dev/null 2>&1 || echo "urandom start: failed."
+		umask 022
+		[ "$VERBOSE" != no ] && echo "done."
+		;;
+	stop)
+		# Carry a random seed from shut-down to start-up;
+		# see documentation in linux/drivers/char/random.c
+		[ "$VERBOSE" != no ] && echo -n "Saving random seed... "
+		umask 077
+		dd if=/dev/urandom of=/etc/random-seed count=1 \
+			>/dev/null 2>&1 || echo "urandom stop: failed."
+		[ "$VERBOSE" != no ] && echo "done."
+		;;
+	*)
+		echo "Usage: urandom {start|stop}" >&2
+		exit 1
+		;;
+esac
diff --git a/openwrt/target/default/target_skeleton/etc/init.d/S40network b/openwrt/target/default/target_skeleton/etc/init.d/S40network
new file mode 100755
index 0000000000..d835d9c72a
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/init.d/S40network
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# Start the network....
+#
+
+start() {
+ 	echo "Starting network..."
+	/sbin/ifup -a
+}	
+stop() {
+	echo -n "Stopping network..."
+	/sbin/ifdown -a
+}
+restart() {
+	stop
+	start
+}	
+
+case "$1" in
+  start)
+  	start
+	;;
+  stop)
+  	stop
+	;;
+  restart|reload)
+  	restart
+	;;
+  *)
+	echo $"Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
+
diff --git a/openwrt/target/default/target_skeleton/etc/init.d/rcS b/openwrt/target/default/target_skeleton/etc/init.d/rcS
new file mode 100755
index 0000000000..de411534da
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/init.d/rcS
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+
+# Start all init scripts in /etc/init.d
+# executing them in numerical order.
+#
+for i in /etc/init.d/S??* ;do
+
+     # Ignore dangling symlinks (if any).
+     [ ! -f "$i" ] && continue
+
+     case "$i" in
+	*.sh)
+	    # Source shell script for speed.
+	    (
+		trap - INT QUIT TSTP
+		set start
+		. $i
+	    )
+	    ;;
+	*)
+	    # No sh extension, so fork subprocess.
+	    $i start
+	    ;;
+    esac
+done
+
diff --git a/openwrt/target/default/target_skeleton/etc/inittab b/openwrt/target/default/target_skeleton/etc/inittab
new file mode 100644
index 0000000000..a6c014e751
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/inittab
@@ -0,0 +1,47 @@
+# /etc/inittab
+#
+# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
+#
+# Note: BusyBox init doesn't support runlevels.  The runlevels field is
+# completely ignored by BusyBox init. If you want runlevels, use
+# sysvinit.
+#
+# Format for each entry: <id>:<runlevels>:<action>:<process>
+#
+# id        == tty to run on, or empty for /dev/console
+# runlevels == ignored
+# action    == one of sysinit, respawn, askfirst, wait, and once
+# process   == program to run
+
+# Startup the system
+null::sysinit:/bin/mount -o remount,rw /
+null::sysinit:/bin/mount -t proc proc /proc
+null::sysinit:/bin/mount -a
+null::sysinit:/bin/hostname -F /etc/hostname
+null::sysinit:/sbin/ifconfig lo 127.0.0.1 up
+null::sysinit:/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
+# now run any rc scripts
+::sysinit:/etc/init.d/rcS
+
+# Set up a couple of getty's
+tty1::respawn:/sbin/getty 38400 tty1
+tty2::respawn:/sbin/getty 38400 tty2
+
+# Put a getty on the serial port
+#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
+
+# Logging junk
+null::sysinit:/bin/touch /var/log/messages
+null::respawn:/sbin/syslogd -n -m 0
+null::respawn:/sbin/klogd -n
+tty3::respawn:/usr/bin/tail -f /var/log/messages
+
+# Stuff to do for the 3-finger salute
+::ctrlaltdel:/sbin/reboot
+
+# Stuff to do before rebooting
+null::shutdown:/usr/bin/killall klogd
+null::shutdown:/usr/bin/killall syslogd
+null::shutdown:/bin/umount -a -r
+null::shutdown:/sbin/swapoff -a
+
diff --git a/openwrt/target/default/target_skeleton/etc/inputrc b/openwrt/target/default/target_skeleton/etc/inputrc
new file mode 100644
index 0000000000..2f1cb601a5
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/inputrc
@@ -0,0 +1,44 @@
+# /etc/inputrc - global inputrc for libreadline
+# See readline(3readline) and `info readline' for more information.
+
+# Be 8 bit clean.
+set input-meta on
+set output-meta on
+set bell-style visible
+
+# To allow the use of 8bit-characters like the german umlauts, comment out
+# the line below. However this makes the meta key not work as a meta key,
+# which is annoying to those which don't need to type in 8-bit characters.
+
+# set convert-meta off
+
+"\e0d": backward-word
+"\e0c": forward-word
+"\e[h": beginning-of-line
+"\e[f": end-of-line
+"\e[1~": beginning-of-line
+"\e[4~": end-of-line
+#"\e[5~": beginning-of-history
+#"\e[6~": end-of-history
+"\e[3~": delete-char
+"\e[2~": quoted-insert
+
+# Common standard keypad and cursor
+# (codes courtsey Werner Fink, <werner@suse.de>)
+#"\e[1~": history-search-backward
+"\e[2~": yank
+"\e[3~": delete-char
+#"\e[4~": set-mark
+"\e[5~": history-search-backward
+"\e[6~": history-search-forward
+# Normal keypad and cursor of xterm
+"\e[F": end-of-line
+"\e[H": beginning-of-line
+# Application keypad and cursor of xterm
+"\eOA": previous-history
+"\eOC": forward-char
+"\eOB": next-history
+"\eOD": backward-char
+"\eOF": end-of-line
+"\eOH": beginning-of-line
+
diff --git a/openwrt/target/default/target_skeleton/etc/issue b/openwrt/target/default/target_skeleton/etc/issue
new file mode 100644
index 0000000000..f24b862c97
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/issue
@@ -0,0 +1,4 @@
+
+
+Welcome to the Erik's uClibc development environment.
+
diff --git a/openwrt/target/default/target_skeleton/etc/network/interfaces b/openwrt/target/default/target_skeleton/etc/network/interfaces
new file mode 100644
index 0000000000..218b82cde5
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/network/interfaces
@@ -0,0 +1,4 @@
+# Configure Loopback
+auto lo
+iface lo inet loopback
+
diff --git a/openwrt/target/default/target_skeleton/etc/passwd b/openwrt/target/default/target_skeleton/etc/passwd
new file mode 100644
index 0000000000..e0f473fc7b
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/passwd
@@ -0,0 +1,13 @@
+root:x:0:0:root:/root:/bin/sh
+daemon:x:1:1:daemon:/usr/sbin:/bin/sh
+bin:x:2:2:bin:/bin:/bin/sh
+sys:x:3:3:sys:/dev:/bin/sh
+sync:x:4:100:sync:/bin:/bin/sync
+mail:x:8:8:mail:/var/spool/mail:/bin/sh
+proxy:x:13:13:proxy:/bin:/bin/sh
+www-data:x:33:33:www-data:/var/www:/bin/sh
+backup:x:34:34:backup:/var/backups:/bin/sh
+operator:x:37:37:Operator:/var:/bin/sh
+sshd:x:103:99:Operator:/var:/bin/sh
+nobody:x:99:99:nobody:/home:/bin/sh
+default:x:1000:1000:Default non-root user:/home/default:/bin/sh
diff --git a/openwrt/target/default/target_skeleton/etc/profile b/openwrt/target/default/target_skeleton/etc/profile
new file mode 100644
index 0000000000..cc2e0beb87
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/profile
@@ -0,0 +1,48 @@
+# ~/.bashrc: executed by bash(1) for non-login interactive shells.
+
+export PATH=\
+/bin:\
+/sbin:\
+/usr/bin:\
+/usr/sbin:\
+/usr/bin/X11:\
+/usr/local/bin
+
+# If running interactively, then:
+if [ "$PS1" ]; then
+
+    if [ "$BASH" ]; then
+	export PS1="[\u@\h \W]\\$ "
+	alias ll='/bin/ls --color=tty -laFh'
+	alias ls='/bin/ls --color=tty -F'
+	export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:';
+    else
+      if [ "`id -u`" -eq 0 ]; then 
+	export PS1='# '
+      else
+	export PS1='$ '
+      fi
+    fi
+
+    export USER=`id -un`
+    export LOGNAME=$USER
+    export HOSTNAME=`/bin/hostname`
+    export HISTSIZE=1000
+    export HISTFILESIZE=1000
+    export PAGER='/bin/more '
+    export EDITOR='/bin/vi'
+    export INPUTRC=/etc/inputrc
+    export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile
+
+    ### Some aliases
+    alias ps2='ps facux '
+    alias ps1='ps faxo "%U %t %p %a" '
+    alias af='ps af'
+    alias cls='clear'
+    alias df='df -h'
+    alias indent='indent -bad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs -npsl -nsc -nsob -nss -ts4 '
+    #alias bc='bc -l'
+    alias minicom='minicom -c on'
+    alias calc='calc -Cd '
+    alias bc='calc -Cd '
+fi;
diff --git a/openwrt/target/default/target_skeleton/etc/protocols b/openwrt/target/default/target_skeleton/etc/protocols
new file mode 100644
index 0000000000..98f9f2d30e
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/protocols
@@ -0,0 +1,31 @@
+# /etc/protocols:
+# $Id$
+#
+# Internet (IP) protocols
+#
+#	from: @(#)protocols	5.1 (Berkeley) 4/17/89
+#
+# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
+
+ip	0	IP		# internet protocol, pseudo protocol number
+icmp	1	ICMP		# internet control message protocol
+igmp	2	IGMP		# Internet Group Management
+ggp	3	GGP		# gateway-gateway protocol
+ipencap	4	IP-ENCAP	# IP encapsulated in IP (officially ``IP'')
+st	5	ST		# ST datagram mode
+tcp	6	TCP		# transmission control protocol
+egp	8	EGP		# exterior gateway protocol
+pup	12	PUP		# PARC universal packet protocol
+udp	17	UDP		# user datagram protocol
+hmp	20	HMP		# host monitoring protocol
+xns-idp	22	XNS-IDP		# Xerox NS IDP
+rdp	27	RDP		# "reliable datagram" protocol
+iso-tp4	29	ISO-TP4		# ISO Transport Protocol class 4
+xtp	36	XTP		# Xpress Tranfer Protocol
+ddp	37	DDP		# Datagram Delivery Protocol
+idpr-cmtp	39	IDPR-CMTP	# IDPR Control Message Transport
+rspf	73	RSPF		#Radio Shortest Path First.
+vmtp	81	VMTP		# Versatile Message Transport
+ospf	89	OSPFIGP		# Open Shortest Path First IGP
+ipip	94	IPIP		# Yet Another IP encapsulation
+encap	98	ENCAP		# Yet Another IP encapsulation
diff --git a/openwrt/target/default/target_skeleton/etc/random-seed b/openwrt/target/default/target_skeleton/etc/random-seed
new file mode 100644
index 0000000000000000000000000000000000000000..fbc7352fbb40c3cab0441fad743cf61c5342d51c
GIT binary patch
literal 512
zcmV+b0{{Iq0UOB42;n<rZ7)sf8Kr=fg87_s+y&vLYgGJP-sY`OWMEj0aQ&I{*g5$)
zH?Zu5*rX8>4xpAvJIL$H4mg*!B4&9jh)7+B2j-fX7o@K*bzj;pJ$FwoQzl&MuZ^Wy
zrYS)x9vq<)#e~&1uB|_ITW-fntEg1^KXs3>vvgL7?_kg!+6=fg{R%Utkr$#pm<zB(
zu)oAUWFK-u-)cWcuSL*8$Q<cmC?ll~NEK@l5k|75(YzZ_p!I6FJ}YI_3>PZ13liCc
zi|M+im&71p*p+Z|7f(m-aedNFtEezFN<xKEd-wQ71%XuGfKr+6VcDycMQ(v6+Z0G|
z-MPjg@JHu%y(|g}cTa=a4(m?GyU)ZD-T+-vLXX}cCXyn}vCXC3Hn1ft`zDTL(};Rr
z?3wX?Eh5%n+AXAeDtXvl!o>-nZHytAhV~}?OM$-f$(%cG(ioV{==Ub4mfZP}OaJJ7
z25tvCcku=>;L?}O-dvK9`}<^gmg@IrnfQm#P>RRF|C9c;GDgEg_bw26{dkIVt1`{`
z3#ol{Q_FL91TBD~{uZn<gw?^=VUuSaIf)=p`07n=>RRZ(Otf!KXM&;q)8B<Q8(T)k
z?Z}a{1Jyf~bQPL{qVQk6jFNfBr)0;57HwN`o6Kw{wdPGHUWrfsJ}0VmW|Tr22whlH
CkpS8N

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/etc/resolv.conf b/openwrt/target/default/target_skeleton/etc/resolv.conf
new file mode 100644
index 0000000000..71a86dd76c
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/resolv.conf
@@ -0,0 +1,2 @@
+domain dev.null
+nameserver 127.0.0.1
diff --git a/openwrt/target/default/target_skeleton/etc/securetty b/openwrt/target/default/target_skeleton/etc/securetty
new file mode 100644
index 0000000000..81616f38ea
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/securetty
@@ -0,0 +1,12 @@
+tty1
+tty2
+tty3
+tty4
+tty5
+tty6
+tty7
+tty8
+ttyS0
+ttyS1
+ttyS2
+ttyS3
diff --git a/openwrt/target/default/target_skeleton/etc/services b/openwrt/target/default/target_skeleton/etc/services
new file mode 100644
index 0000000000..13718ef3de
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/services
@@ -0,0 +1,302 @@
+# /etc/services:
+# $Id$
+#
+# Network services, Internet style
+#
+# Note that it is presently the policy of IANA to assign a single well-known
+# port number for both TCP and UDP; hence, most entries here have two entries
+# even if the protocol doesn't support UDP operations.
+# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
+# are included, only the more common ones.
+
+tcpmux		1/tcp				# TCP port service multiplexer
+echo		7/tcp
+echo		7/udp
+discard		9/tcp		sink null
+discard		9/udp		sink null
+systat		11/tcp		users
+daytime		13/tcp
+daytime		13/udp
+netstat		15/tcp
+qotd		17/tcp		quote
+msp		18/tcp				# message send protocol
+msp		18/udp				# message send protocol
+chargen		19/tcp		ttytst source
+chargen		19/udp		ttytst source
+ftp-data	20/tcp
+ftp		21/tcp
+fsp		21/udp		fspd
+ssh		22/tcp				# SSH Remote Login Protocol
+ssh		22/udp				# SSH Remote Login Protocol
+telnet		23/tcp
+# 24 - private
+smtp		25/tcp		mail
+# 26 - unassigned
+time		37/tcp		timserver
+time		37/udp		timserver
+rlp		39/udp		resource	# resource location
+nameserver	42/tcp		name		# IEN 116
+whois		43/tcp		nicname
+re-mail-ck	50/tcp				# Remote Mail Checking Protocol
+re-mail-ck	50/udp				# Remote Mail Checking Protocol
+domain		53/tcp		nameserver	# name-domain server
+domain		53/udp		nameserver
+mtp		57/tcp				# deprecated
+bootps		67/tcp				# BOOTP server
+bootps		67/udp
+bootpc		68/tcp				# BOOTP client
+bootpc		68/udp
+tftp		69/udp
+gopher		70/tcp				# Internet Gopher
+gopher		70/udp
+rje		77/tcp		netrjs
+finger		79/tcp
+www		80/tcp		http		# WorldWideWeb HTTP
+www		80/udp				# HyperText Transfer Protocol
+link		87/tcp		ttylink
+kerberos	88/tcp		kerberos5 krb5	# Kerberos v5
+kerberos	88/udp		kerberos5 krb5	# Kerberos v5
+supdup		95/tcp
+# 100 - reserved
+hostnames	101/tcp		hostname	# usually from sri-nic
+iso-tsap	102/tcp		tsap		# part of ISODE.
+csnet-ns	105/tcp		cso-ns		# also used by CSO name server
+csnet-ns	105/udp		cso-ns
+# unfortunately the poppassd (Eudora) uses a port which has already
+# been assigned to a different service. We list the poppassd as an
+# alias here. This should work for programs asking for this service.
+# (due to a bug in inetd the 3com-tsmux line is disabled)
+#3com-tsmux	106/tcp		poppassd
+#3com-tsmux	106/udp		poppassd
+rtelnet		107/tcp				# Remote Telnet
+rtelnet		107/udp
+pop-2		109/tcp		postoffice	# POP version 2
+pop-2		109/udp
+pop-3		110/tcp				# POP version 3
+pop-3		110/udp
+sunrpc		111/tcp		portmapper	# RPC 4.0 portmapper TCP
+sunrpc		111/udp		portmapper	# RPC 4.0 portmapper UDP
+auth		113/tcp		authentication tap ident
+sftp		115/tcp
+uucp-path	117/tcp
+nntp		119/tcp		readnews untp	# USENET News Transfer Protocol
+ntp		123/tcp
+ntp		123/udp				# Network Time Protocol
+netbios-ns	137/tcp				# NETBIOS Name Service
+netbios-ns	137/udp
+netbios-dgm	138/tcp				# NETBIOS Datagram Service
+netbios-dgm	138/udp
+netbios-ssn	139/tcp				# NETBIOS session service
+netbios-ssn	139/udp
+imap2		143/tcp				# Interim Mail Access Proto v2
+imap2		143/udp
+snmp		161/udp				# Simple Net Mgmt Proto
+snmp-trap	162/udp		snmptrap	# Traps for SNMP
+cmip-man	163/tcp				# ISO mgmt over IP (CMOT)
+cmip-man	163/udp
+cmip-agent	164/tcp
+cmip-agent	164/udp
+xdmcp		177/tcp				# X Display Mgr. Control Proto
+xdmcp		177/udp
+nextstep	178/tcp		NeXTStep NextStep	# NeXTStep window
+nextstep	178/udp		NeXTStep NextStep	# server
+bgp		179/tcp				# Border Gateway Proto.
+bgp		179/udp
+prospero	191/tcp				# Cliff Neuman's Prospero
+prospero	191/udp
+irc		194/tcp				# Internet Relay Chat
+irc		194/udp
+smux		199/tcp				# SNMP Unix Multiplexer
+smux		199/udp
+at-rtmp		201/tcp				# AppleTalk routing
+at-rtmp		201/udp
+at-nbp		202/tcp				# AppleTalk name binding
+at-nbp		202/udp
+at-echo		204/tcp				# AppleTalk echo
+at-echo		204/udp
+at-zis		206/tcp				# AppleTalk zone information
+at-zis		206/udp
+qmtp		209/tcp				# The Quick Mail Transfer Protocol
+qmtp		209/udp				# The Quick Mail Transfer Protocol
+z3950		210/tcp		wais		# NISO Z39.50 database
+z3950		210/udp		wais
+ipx		213/tcp				# IPX
+ipx		213/udp
+imap3		220/tcp				# Interactive Mail Access
+imap3		220/udp				# Protocol v3
+ulistserv	372/tcp				# UNIX Listserv
+ulistserv	372/udp
+https		443/tcp				# MCom
+https		443/udp				# MCom
+snpp		444/tcp				# Simple Network Paging Protocol
+snpp		444/udp				# Simple Network Paging Protocol
+saft		487/tcp				# Simple Asynchronous File Transfer
+saft		487/udp				# Simple Asynchronous File Transfer
+npmp-local	610/tcp		dqs313_qmaster	# npmp-local / DQS
+npmp-local	610/udp		dqs313_qmaster	# npmp-local / DQS
+npmp-gui	611/tcp		dqs313_execd	# npmp-gui / DQS
+npmp-gui	611/udp		dqs313_execd	# npmp-gui / DQS
+hmmp-ind	612/tcp		dqs313_intercell# HMMP Indication / DQS
+hmmp-ind	612/udp		dqs313_intercell# HMMP Indication / DQS
+#
+# UNIX specific services
+#
+exec		512/tcp
+biff		512/udp		comsat
+login		513/tcp
+who		513/udp		whod
+shell		514/tcp		cmd		# no passwords used
+syslog		514/udp
+printer		515/tcp		spooler		# line printer spooler
+talk		517/udp
+ntalk		518/udp
+route		520/udp		router routed	# RIP
+timed		525/udp		timeserver
+tempo		526/tcp		newdate
+courier		530/tcp		rpc
+conference	531/tcp		chat
+netnews		532/tcp		readnews
+netwall		533/udp				# -for emergency broadcasts
+uucp		540/tcp		uucpd		# uucp daemon
+afpovertcp	548/tcp				# AFP over TCP
+afpovertcp	548/udp				# AFP over TCP
+remotefs	556/tcp		rfs_server rfs	# Brunhoff remote filesystem
+klogin		543/tcp				# Kerberized `rlogin' (v5)
+kshell		544/tcp		krcmd		# Kerberized `rsh' (v5)
+kerberos-adm	749/tcp				# Kerberos `kadmin' (v5)
+#
+webster		765/tcp				# Network dictionary
+webster		765/udp
+#
+# From ``Assigned Numbers'':
+#
+#> The Registered Ports are not controlled by the IANA and on most systems
+#> can be used by ordinary user processes or programs executed by ordinary
+#> users.
+#
+#> Ports are used in the TCP [45,106] to name the ends of logical
+#> connections which carry long term conversations.  For the purpose of
+#> providing services to unknown callers, a service contact port is
+#> defined.  This list specifies the port used by the server process as its
+#> contact port.  While the IANA can not control uses of these ports it
+#> does register or list uses of these ports as a convienence to the
+#> community.
+#
+nfsdstatus	1110/tcp
+nfsd-keepalive	1110/udp
+
+ingreslock	1524/tcp
+ingreslock	1524/udp
+prospero-np	1525/tcp			# Prospero non-privileged
+prospero-np	1525/udp
+datametrics	1645/tcp	old-radius	# datametrics / old radius entry
+datametrics	1645/udp	old-radius	# datametrics / old radius entry
+sa-msg-port	1646/tcp	old-radacct	# sa-msg-port / old radacct entry
+sa-msg-port	1646/udp	old-radacct	# sa-msg-port / old radacct entry
+radius		1812/tcp			# Radius
+radius		1812/udp			# Radius
+radacct		1813/tcp			# Radius Accounting
+radacct		1813/udp			# Radius Accounting
+nfsd		2049/tcp	nfs
+nfsd		2049/udp	nfs
+cvspserver	2401/tcp			# CVS client/server operations
+cvspserver	2401/udp			# CVS client/server operations
+mysql		3306/tcp			# MySQL
+mysql		3306/udp			# MySQL
+rfe		5002/tcp			# Radio Free Ethernet
+rfe		5002/udp			# Actually uses UDP only
+cfengine	5308/tcp			# CFengine
+cfengine	5308/udp			# CFengine
+bbs		7000/tcp			# BBS service
+#
+#
+# Kerberos (Project Athena/MIT) services
+# Note that these are for Kerberos v4, and are unofficial.  Sites running
+# v4 should uncomment these and comment out the v5 entries above.
+#
+kerberos4	750/udp		kerberos-iv kdc	# Kerberos (server) udp
+kerberos4	750/tcp		kerberos-iv kdc	# Kerberos (server) tcp
+kerberos_master	751/udp				# Kerberos authentication
+kerberos_master	751/tcp				# Kerberos authentication
+passwd_server	752/udp				# Kerberos passwd server
+krb_prop	754/tcp				# Kerberos slave propagation
+krbupdate	760/tcp		kreg		# Kerberos registration
+kpasswd		761/tcp		kpwd		# Kerberos "passwd"
+kpop		1109/tcp			# Pop with Kerberos
+knetd		2053/tcp			# Kerberos de-multiplexor
+zephyr-srv	2102/udp			# Zephyr server
+zephyr-clt	2103/udp			# Zephyr serv-hm connection
+zephyr-hm	2104/udp			# Zephyr hostmanager
+eklogin		2105/tcp			# Kerberos encrypted rlogin
+#
+# Unofficial but necessary (for NetBSD) services
+#
+supfilesrv	871/tcp				# SUP server
+supfiledbg	1127/tcp			# SUP debugging
+#
+# Datagram Delivery Protocol services
+#
+rtmp		1/ddp				# Routing Table Maintenance Protocol
+nbp		2/ddp				# Name Binding Protocol
+echo		4/ddp				# AppleTalk Echo Protocol
+zip		6/ddp				# Zone Information Protocol
+#
+# Services added for the Debian GNU/Linux distribution
+poppassd	106/tcp				# Eudora
+poppassd	106/udp				# Eudora
+mailq		174/tcp				# Mailer transport queue for Zmailer
+mailq		174/tcp				# Mailer transport queue for Zmailer
+omirr		808/tcp		omirrd		# online mirror
+omirr		808/udp		omirrd		# online mirror
+rmtcfg		1236/tcp			# Gracilis Packeten remote config server
+xtel		1313/tcp			# french minitel
+coda_opcons	1355/udp			# Coda opcons            (Coda fs)
+coda_venus	1363/udp			# Coda venus             (Coda fs)
+coda_auth	1357/udp			# Coda auth              (Coda fs)
+coda_udpsrv	1359/udp			# Coda udpsrv            (Coda fs)
+coda_filesrv	1361/udp			# Coda filesrv           (Coda fs)
+codacon		1423/tcp	venus.cmu	# Coda Console           (Coda fs)
+coda_aux1	1431/tcp			# coda auxiliary service (Coda fs)
+coda_aux1	1431/udp			# coda auxiliary service (Coda fs)
+coda_aux2	1433/tcp			# coda auxiliary service (Coda fs)
+coda_aux2	1433/udp			# coda auxiliary service (Coda fs)
+coda_aux3	1435/tcp			# coda auxiliary service (Coda fs)
+coda_aux3	1435/udp			# coda auxiliary service (Coda fs)
+cfinger		2003/tcp			# GNU Finger
+afbackup	2988/tcp			# Afbackup system
+afbackup	2988/udp			# Afbackup system
+icp		3130/tcp			# Internet Cache Protocol (Squid)
+icp		3130/udp			# Internet Cache Protocol (Squid)
+postgres	5432/tcp			# POSTGRES
+postgres	5432/udp			# POSTGRES
+fax		4557/tcp			# FAX transmission service        (old)
+hylafax		4559/tcp			# HylaFAX client-server protocol  (new)
+noclog		5354/tcp			# noclogd with TCP (nocol)
+noclog		5354/udp			# noclogd with UDP (nocol)
+hostmon		5355/tcp			# hostmon uses TCP (nocol)
+hostmon		5355/udp			# hostmon uses TCP (nocol)
+ircd		6667/tcp			# Internet Relay Chat
+ircd		6667/udp			# Internet Relay Chat
+webcache	8080/tcp			# WWW caching service
+webcache	8080/udp			# WWW caching service
+tproxy		8081/tcp			# Transparent Proxy
+tproxy		8081/udp			# Transparent Proxy
+mandelspawn	9359/udp	mandelbrot	# network mandelbrot
+amanda		10080/udp			# amanda backup services
+amandaidx	10082/tcp			# amanda backup services
+amidxtape	10083/tcp			# amanda backup services
+isdnlog		20011/tcp			# isdn logging system
+isdnlog		20011/udp			# isdn logging system
+vboxd		20012/tcp			# voice box system
+vboxd		20012/udp			# voice box system
+binkp           24554/tcp			# Binkley
+binkp           24554/udp			# Binkley
+asp		27374/tcp			# Address Search Protocol
+asp		27374/udp			# Address Search Protocol
+tfido           60177/tcp			# Ifmail
+tfido           60177/udp			# Ifmail
+fido            60179/tcp			# Ifmail
+fido            60179/udp			# Ifmail
+
+# Local services
+
diff --git a/openwrt/target/default/target_skeleton/etc/shadow b/openwrt/target/default/target_skeleton/etc/shadow
new file mode 100644
index 0000000000..4941a1ac53
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/etc/shadow
@@ -0,0 +1,12 @@
+root::10933:0:99999:7:::
+bin:*:10933:0:99999:7:::
+daemon:*:10933:0:99999:7:::
+adm:*:10933:0:99999:7:::
+lp:*:10933:0:99999:7:::
+sync:*:10933:0:99999:7:::
+shutdown:*:10933:0:99999:7:::
+halt:*:10933:0:99999:7:::
+uucp:*:10933:0:99999:7:::
+operator:*:10933:0:99999:7:::
+nobody:*:10933:0:99999:7:::
+default::10933:0:99999:7:::
diff --git a/openwrt/target/default/target_skeleton/root/.bash_history b/openwrt/target/default/target_skeleton/root/.bash_history
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/openwrt/target/default/target_skeleton/root/.bash_logout b/openwrt/target/default/target_skeleton/root/.bash_logout
new file mode 100644
index 0000000000..77ef1f9508
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/root/.bash_logout
@@ -0,0 +1,7 @@
+# ~/.bash_logout: executed by bash(1) when login shell exits.
+
+# when leaving the console clear the screen to increase privacy
+
+case "`tty`" in
+    /dev/tty[0-9]*) clear
+esac
diff --git a/openwrt/target/default/target_skeleton/root/.bash_profile b/openwrt/target/default/target_skeleton/root/.bash_profile
new file mode 100644
index 0000000000..27bf14953d
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/root/.bash_profile
@@ -0,0 +1,15 @@
+# .bash_profile
+
+export PATH=\
+/bin:\
+/sbin:\
+/usr/bin:\
+/usr/sbin:\
+/usr/bin/X11:\
+/usr/local/bin
+
+umask 022
+
+if [ -f ~/.bashrc ]; then
+    source ~/.bashrc
+fi
diff --git a/openwrt/target/default/target_skeleton/root/.bashrc b/openwrt/target/default/target_skeleton/root/.bashrc
new file mode 100644
index 0000000000..d13c8f9026
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/root/.bashrc
@@ -0,0 +1,48 @@
+# ~/.bashrc: executed by bash(1) for non-login interactive shells.
+
+export PATH=\
+/bin:\
+/sbin:\
+/usr/bin:\
+/usr/sbin:\
+/usr/bin/X11:\
+/usr/local/bin
+
+# If running interactively, then:
+if [ "$PS1" ]; then
+
+    if [ "$BASH" ]; then
+	export PS1="[\u@\h \W]\\$ "
+    else
+      if [ "`id -u`" -eq 0 ]; then 
+	export PS1='# '
+      else
+	export PS1='$ '
+      fi
+    fi
+
+    export USER=`id -un`
+    export LOGNAME=$USER
+    export HOSTNAME=`/bin/hostname`
+    export HISTSIZE=1000
+    export HISTFILESIZE=1000
+    export PAGER='/bin/more '
+    export EDITOR='/bin/vi'
+    export INPUTRC=/etc/inputrc
+    export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile
+    export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:';
+
+    ### Some aliases
+    alias ps2='ps facux '
+    alias ps1='ps faxo "%U %t %p %a" '
+    alias af='ps af'
+    alias cls='clear'
+    alias ll='/bin/ls --color=tty -laFh'
+    alias ls='/bin/ls --color=tty -F'
+    alias df='df -h'
+    alias indent='indent -bad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs -npsl -nsc -nsob -nss -ts4 '
+    #alias bc='bc -l'
+    alias minicom='minicom -c on'
+    alias calc='calc -Cd '
+    alias bc='calc -Cd '
+fi;
diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/a/ansi b/openwrt/target/default/target_skeleton/usr/share/terminfo/a/ansi
new file mode 100644
index 0000000000000000000000000000000000000000..d1e14008c5b102878b914b58343dad09d75a7f21
GIT binary patch
literal 1450
zcmds$O=uHQ5Xa}O#fJ7$Az*8y^s*RjquFHh#j1%KFlq`#dyoXFX|}ej`7(*N+NR*i
zqX!WM>%oHu4}wL#c=4n0=2cJ&dQkA_=Rq&V|LkUy9IW6;aN$4mdo%Oqy`4=q2{&z|
zKB|ehlqpn<1vWcMSx<GUoFB>-^QBDHn9NNL%^KAitaHUOk)ZY??1i8)a!@}te)Bje
zM(ePri`FCWpdNCfax-`fg=r^z%-k1;O+ZQX;x^-yq6w3DrGpGAP=)5`0$pszFVW>z
z1y}KN6_M*5(Hk9XRdm{$bPM_0&6+z+zx>BNjm87yAJPgvrx)~wKF}xnL6Ybdc4wy;
z5QD8%qu~SZf}-LI?6r=Jy@UM{;;U=qI_v%~e*2ei{9b$%-$b|6EB(7UIHken>27I6
z@=EF&cL__oC09B{-T2kJ(!Ob!ge!dz?hwRYHsq2b>-*cN$t9nxClJ^Rv5!OhpgqtS
zGzuw79yY+nq%c#cWmG1!^HHww^3tnWo|%=zU$%Wn65Kwh$CW;UfZ2hMG-1>RzL*(_
z+0ZKHHfD-@nZP$UVcZ6O57mGP7{r+@7x?6Pr6zl1eUi(psp#g|_}+4q3#(d4));+2
z)k1$essaO6Gze5I3<1LyMmUNv-k#@rfQI`<HhB8C4|rFPcV(7Oe4qY2bNA${Q;%}5
z^N$P9ii@TC>3X?dnW(OuxqtS_?9;h>=f0l*GXHMjWo>EkCt9Q+g})_ktZTA<7#J+T
tMCG*RReXLm5DbMQ$Fc~q{1Hu!@bLZSNSIWc+!*UtXd5&PHNP=`v|lT3JNf_s

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/d/dumb b/openwrt/target/default/target_skeleton/usr/share/terminfo/d/dumb
new file mode 100644
index 0000000000000000000000000000000000000000..ffdc8acf34bed25a78f4a019267bfca72f716179
GIT binary patch
literal 308
zcmb1Qlwe?DU}R`w;9y88%}uJYFwjlT&neB#Qvh)lN=hmj7#IT>{{LqHs{4-ySTID;
P6bvIS8v{E77Z?Hn(+>pZ

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/l/linux b/openwrt/target/default/target_skeleton/usr/share/terminfo/l/linux
new file mode 100644
index 0000000000000000000000000000000000000000..e9ec115d5c584a45dedfa30384ced55125c985d9
GIT binary patch
literal 1551
zcmb_cOGs2v82-<}$ZAnSQ8@?|T_UWUd+xpSV5~7qoKhpiML2}UOg_i){U~*kAc7zw
zXj8O`7Old_Hnk|twryJUkQO~~Q7a1~2%5hC+?lboNU6j8-~avp`Q|*nIZUBgPertr
zM#X)ZXifGHjcD8w>rD1`CQcFwd=PqMNUo%GIv?@7kxylqA(E6w8>o=Bl0iGsv8jS8
zsfudB>nI9rK*XpSm`=A-Hw|buOk;Eo>;he)D|D4^&@J5`r+f5(CN<CQ`;4BWp2_rH
zBfrhf&(cSlqc8Lg*H|Iehyt-u6p3vjo!)^c7GB{X^9W|LTP?=Dm@gBDfVGI|AJp+o
zzfE+AAu%jQ#h7@5-uqwlv$^U6Sg~BZ+s~bnzszT~_7Zhj{le^%rLtT`<PljX>t&;C
zl8Jv@ap4Zxx@Vc|4$8Cgyu2tcFY|lZ{r*S3CT}ij_uFzpuB6rEi5jg&mubX9Mwc?;
zJ!n|XfQTo07^w=uIU}l^r>;Jtmx!PpR!)NQUDASd0I?r&6j6gP%?_Z$pqXN3vogTU
zp97njKGHD|)61nd<Yqg8LTRniy0FuNt)0a7QswoQ?89ssqMFVCtrVafq0gaAF5Q~X
z7Cp#N0WkeMV+J$^8I@OaO&M6~W8yHlH`CU!aeP62+?p)mBj`>wd19X9wd4tK$Mrc*
z9zUDLYQB~cW@%r@Z-kgCP}`-}eAfnb+^z$vT<QZgUFru7xHQOJwBcKXR$-S)Dqgp%
zVE3jyo4qrQc_;2PeQlm=8E<{s_Okt9;#J3^<de=+*L3%E&vb7?-{by?fyu$Cp}VI(
zpZ+xbZsf)2_0)GPQjf4x_=|))+E|4OTsxw)IZ8XIw1bv*+fuBtwBFKslOGhEz;lbk
em#8lZ2>W6{4l5Y4gZzVA+COG?j=3+0AHom(k1vV<

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/r/rxvt b/openwrt/target/default/target_skeleton/usr/share/terminfo/r/rxvt
new file mode 100644
index 0000000000000000000000000000000000000000..ba6987a1a8ae0e70a6f1f4f24a1ee3f1c79dcff6
GIT binary patch
literal 1627
zcmbVL&r4KM6h8NAr4b5&5k87ZnjDM5d2hy127gvC_ydiQGC>q)97o^GI6rj!H7*Ql
zk&B{&Xc28Hh!)Z!Y7+#l+SH~^ix&L{1uY_I`p%iBW+tJRIp6utch9|Z@AuxTR%hr4
zRZ>Egm!xNBvWpC^Y$P3zB}QylBtC7AWRq!^=d$ZkED=uTTo>mu*+{&ONa4pp7)&?`
za_*xtI!uLsj52D2PNb=ns;HW3=!Ep0q#!j@JB3hn(gk2Y4bU)!Wp<n<C`no2dBJ76
zPAg!y=r-L$end}cm0rl)8+tGKD}6`)A-qudiA<_cC`FX3N>!x{bxhT&)5=m!s#Tp=
zU8)ar{fGfIq(+f>MAf89IJ~HA#gv*?SJeu-?y3js3G(V+D_*HjqWl6XU8?tLoC0wG
zQ5+TepgyFl^-)o3fc@)p+%d4JVr5uIpvAW6Jh%Nwpg*H$*H`7imZiD|yy56Koy_~(
z(f9R3{a8QK&-F|FTEErr{+QkVpLRa;VVC=U+~vBRpKxQvXXih^=x+{FC3{Nt(S9-p
z-7)u+*BuVJr%ZP^4Z(^6LdKxkiQI+Yys0ZB3qz1wO}~xrN60wRSw#Cr*$3J~6+nL+
z-~|NG>kDwNk0HRifG>`Z+Zc>9n4QvP8;vM@HY?I&q6stpaR!#Lm2EU5d$~$ud2un0
z-x}a9Z_o<*f(^E_O&hwp<-pbwXa}Nk2w-}-^a?uM6h+#+KH+}BfMBCw6QfzrD6*_M
zhpK@k>31AyA)^_RSk0~o=~*Lu4pI1gLb}%o?<NXwBn1Ap;H+{nzg$hOiksv9>|6+)
z|FOcrdEjk;A0$o@qH;2NbBH;_G$Mt_(D3lc$k<pkIx#UhY1{F5B9Tl^O{G%lbS9I{
zPEXIw<Z`pKb93|a3k!>j`TP=J`wAJJ4x_FflwIoOTZ*yPaWJv6ky(HtjA&ruXBb78
zV!0`OrdVi-o2FQ9ise>uKe5}AeyjM1_;t0Kg1#nxPuA>Ru<G;fQ|>Tp>|m{@)+s$O
I-cwJ%0l%&O@&Et;

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/s/screen b/openwrt/target/default/target_skeleton/usr/share/terminfo/s/screen
new file mode 100644
index 0000000000000000000000000000000000000000..8f4206c81e6bb6dd8e0e7cc01cc0699d7d095c4f
GIT binary patch
literal 1318
zcmc&zJ8aWX6g>|REg(@gK9(RtibP3M{7ciQ>X(87ZAhUNittjaO%o?}>N=mM`ILnP
zF|aT(Au%u@76t|e!~hZ!EHEJkrcMm7Ft8wV--|P#bYMZXe9t-ey!)>2dy-GF^BBM}
zSnNA1uXx#PsdaNHq{#Ax>1&HuLK$s%L=V+0uTnMbP$la*R>`yhCSFb?7#7fv6YzI=
z`Z0z5RCE9bspce3BaA^&8N~#x&0>zS6qX1xFkm7pRxK3a3g!D%!42HT9a493PvrOU
z01xpfsCgXl6XK_Ven$K}(7yiyFYy|0@D3mF37_#5JNSklwEh#n@EiMBAL|_82peF>
z1HH?U{4=z6mPMG(#z|dfX_g^2dv+9r;}E*6%&Nq7il%UT`?h=hS3OSeuK(k_W$*Xw
z+y8c=k9#=Z7q-JB;}-gG7?KgT!mbit9Sgf^c-13A%Mm0c<0{b{1?Rttl44(y>`66d
z({CX}p6DW^6p^OegbNfY93_l71PTY8SH-!~MC#DbD;YxaEvj%;oeUacP$p|$^w+i_
zrDrI3Q&r*Fb&4Ali{vOVattLda8zJ|qbdt6Btd$XJe_AF9QdX*jhvpQWKyxE3Bh@3
z9MUC{;$HX%g-CS;jnQ$Yx?;X7cz;n$T|0tWuRt1w6z7*lJ(4(tNMvXz8XX>%<>h75
zTwBZK@_EZD6pBULcAQdaecg38HaxFfu2ibkT5WT)Uf<ekG@8v;tKHtFvCqwPZb#)8
VW2oXxT4GF3@T=6s2wdrb`U6T0>Q?{&

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/s/screen-w b/openwrt/target/default/target_skeleton/usr/share/terminfo/s/screen-w
new file mode 100644
index 0000000000000000000000000000000000000000..965601433d1e6a82be5936d800c9f6198b3aa8c9
GIT binary patch
literal 1334
zcmc&zJ8Tm{5Pb`X1ds?FpOfH(bP|zcb3ey1QN9FZNQ@zgki|8z9LGNU&UXBdKcS&P
z6f{&+NE8%^hJu0uQGkR54OEDNDisAZ6g23VUE2k63K|s4^WK}cv$L}+-6?hfBRB?|
zeP`ulDV56m>+PGXvZku%=dP_>k>f^S+>~o}sZvciawS!A?L3LPUCGFrq07mFQwEs$
zb0WcT2g5i4Z<pUNX0e}&4&WfwoWyA;7!{R%Ow-x|7AcEjl`swq38ciTjU0+Xd0tg;
z6SwIc&%29zBEOFZc!)>6n#VnULj1I+pAkRrY0rCsmw1ggc!v-8gwObj9el$NTK|b(
z_>FyRh;=V;gpIJ{J-y47yfd_Rmid^;rbu08F%~CI4D84X$0aPXGOH3dC|bfD?Asae
zUkx~eyZ(>!mc8Gzv;XZzANO#+FKmZN)-4R-FeFQ{m7=DsPbx)SSuc@cqzNLDb(Lt5
zg7aTR5wR~q_KY5M=(7+aLv#^Rl*lk0!s`@K93>381R4jESB1DTMC#JVELlSGExK@Z
zlMEVSR3&Rk^f$I4#pWq^Q(fcP4T@!o6>_v7IhGa@I3Y01QCEc)k|4G~p2@Ru4t!IL
zMvl!<GNU=twBU?11?dt=@h<#8A)<XjV|1O_zF6uD-d_|`*RG(}Nk|irLj2LFM+Ar9
z^No%9{egh0uB{~!8yo3#CS%*#Y%b?GuA9#n3dQ2)W~o#zS1Q$NtyZr$8e3b<W~<e1
hcRJfN_PP1)>*)MpEM45m2v3?}{*;Cofh)78{s5B@@1g(z

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/s/sun b/openwrt/target/default/target_skeleton/usr/share/terminfo/s/sun
new file mode 100644
index 0000000000000000000000000000000000000000..47c0d66faa75dd398d28cce7e313fbd4d1edcb8c
GIT binary patch
literal 1019
zcmb_aJx>Bb5S>-ySB%EkK_O^1YD~nvLq0-?qL_$6z!)oR3{aqQhujfALPBR}XJ=<&
zXJ=tyYinz3Vf-67J9`j7sPvLI@6F8H$xL!C7J?}lge8_{R@JB>gbZ5kplWzh#azX-
zt}MGyvOEbRx8k`lE2oxyY!^+#lQRv=JSzY&pidEl3^W>Z2!H{Mjm8iR!#Jr)m?id7
zoX5C;SOy>E(%bpz5OO+Ehhx8-+mOIo%BiQ3_gkJrID#CUz&Tt(9d6(j?%<xf4;UZe
z37#GAOY2SN2JP7^yrJtI@zK})+1B|&{Z08aYo9aIk+pYvX;%-ox2v{Dxv#6*Yg+$W
zfJOiGzW?O^=)_rqjo@E20q*P`Vi&=SyexP=!pj=Z?_hHji(7~oB7;aFf~97VLSh4v
zL~k8=6QODTYe~9Jq^&6mC<-bHDGC$mtBQmojY!axI1O|vG@`i>?JBn-Ay*?Iw;_>4
zVc`+(>?&X9<p8%Mf=8s(Q2Lb=ysYyY=0P4Q!5Eq~;jBhGi7;&;!gPxWt6OyEK+1%T
HuLQ;)GgMaY

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt100 b/openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt100
new file mode 100644
index 0000000000000000000000000000000000000000..5cc9a88bb0ec76c6aa649b8d936b91bf7e73f0ed
GIT binary patch
literal 1143
zcmdT?J#W)c6uplR6&R8Uf$Akg9%>~%;(U;zghWj{M3mA}*uqe&&PQ82aT3Q#TDKA_
zYXxFJhyfu6gcukY7#J8B7#J8BkYE4_2_}S?kj(LWPTGk60iJyBJ@?%6uHLgf&Q8;D
z8lw>Nm}9H4m@DEL&2;thN<<WqiS9W~ceMISS&ulYdbu%4#Kc2#p}=CaNJr=-d14(z
zCOSZeFn^p*(OIFV=`vjbTN2fE#2bRiJvvpWv8VRD9^Ir{P<H5cpx>uQBM!OK^PcWe
zp9TCmy`Y!$ieA$jdQ0!<J$;~$LGN>rzXbUk{h(g~AI#h@{|P*Y8Qz(90vKHpp=1&B
ztiWd39NPiEGxXhM_t*pWkUbX4lcD~JeHHxsP}!aPb02ND`~R`uY>bYPQsS%JQn{Yt
zR-EfC2#G2}Q7K)DW>c{o_*^ub@bgd@*;0fpCngo~=P9L`Xg2P<r$r8drOZH52PFLu
zNlGOQyBQAb1Cz{{y-)!9z#`BCt^!NIHNXZsfCCsn7nlWRfN6})tA^sAE3ej+i^$^E
z7$^yxlE5wr_T=DB7zjx}r2LSsAxzasnIa|a-+EqLUn#|S-k)fl=PtK1D$n?J95g8@
zS_#og%Q}fxif2sUc7fX=UJmmNDMdPp^EQDtfX}gD0d-nl*0f5cT3uUPUpEZXtk)Y2
x%W5`Tt#;eCI~~XAc6+^ke`8~F({;DDwzqK)oK{4<j){UY8N;M`2&(*`e*w3}N7n!V

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt220 b/openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt220
new file mode 100644
index 0000000000000000000000000000000000000000..cefb7b358764526779e91a851e6a5a113adbf729
GIT binary patch
literal 975
zcmbVKzi-n(6n+;fwIBwTRtR^9qMV2r8vA^%Q`t(@HlR=lZ2=)fmKw!vlG=&mIBC<S
z87d(mvA_re3u0nqVPfJx;4eUo42Xq+0rT$SR6?Q)Cx74j-VZ;&d-4^s0JAU+Z{cdH
zA2Fs5kyUkAy1tfva3B42qm}MQnyRK<zvnqoquomT?V1Zf<OA}c7Kgwl#PMZ>IOos;
zq+kl|EM(xCjO%a{DzF6)(R&0AvWsYdFS8vOz=>3G{7l;C@Dg65dIRsI{~kWT$D|^T
zKcV`J_=fnNM1P?DndmtF1;1g6%#e%Z5}70OBtvp!f#@WT3kaL6kQ->lSx@ZP`+vTJ
zeVXJ1`3ZSSUXWL^@0T;We?5)QrRG!r{%R&Q4HrPE(gqDQTC-@tXf4D*S*f!1tZk@8
zbZ%vBUD(sWU*+Yjt;w=g@g8EC86M1xMIFr=Vg<2@sDP4Fvo;g$3_lUtL~v1VPCU~`
zk0a$)vo;rROfuX<hsit>1y#*rJj4*Uv@+y--7w#+JE5D8oX1@^%FF)@%WliD^btxN
zc0&xrmeAYSLfl2%6TM84*9wwFw#rn=nv6&(sDxM)!Vr{PvWVB$JtQv35M<Vo3iY$c
zDu7~wQo?1Z`64J4+$R^Js?uc|EYir*s3jyr$;XnTG{#b+fli0$o7D0}*%FO#$<)QY
zQ47w)_O|2f?CkC~n|phn=liWzyB!3bP8fE(QPk`8`}_L`2ZO=k;nC4>cziq(_rb9x
Ji%s(p`~h@Wg6jYP

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt52 b/openwrt/target/default/target_skeleton/usr/share/terminfo/v/vt52
new file mode 100644
index 0000000000000000000000000000000000000000..d55932876a44f3f076fc94bdfe1a6903af666286
GIT binary patch
literal 461
zcmb1Q<YQo9U}l)i(7{kvVro>AlA5dlVlV_Sa4<+P{Qu9uzyu`!|7T&~WZ(g__!%@9
zw1F%=FwYQ3nt)j#Rsa8+Be5YOFwzRA3`~VBk_vkyHcTF!c7m#Lh0-1b^mr4HM>ikD
z_XCCmL_8RW?obAH1}+9^4{0w3X>SG)8L3)esH(1@uBxq?tXg0MV=_oP0hKXGyD&&Q
zGe|o!NV_pey90w6Bn%Vd0vY8A4C{o1#Kg3;^z^K(?ChMJ+}ymp{QQD~!os4W;^LB$
Z($ccB^74v`%F3#$>gt-B+S<B01^}vJBG3Q;

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/x/xterm b/openwrt/target/default/target_skeleton/usr/share/terminfo/x/xterm
new file mode 100644
index 0000000000000000000000000000000000000000..89da67d089b6cd88a5fef65886cf45e308861ae3
GIT binary patch
literal 1366
zcmc&zO=}ZT6uob(XuGI__(8`-P@+~{WZsNTB*suHTH1zGgIJtRLz5<HXOeW1G)bHE
z2Ph~~P=AUGapS^;xadMbL=Xf)5ClOG1jqAk(uExmTs7pLd+vGXechQE5fM5-dnhL^
zX{~zRb32S7MN8$Z6Uw^{CtI(0p)+%#+of`@(hOzVwR+wiB@+Bs2}IB=?Wbep`$QTI
z&|w;(6Lbo-@1LbOCBVkHngCu$OjDZc4Dc4+VZOjvB$qs}Cbg-He3u^3CXcAq9{1T(
z<Y#^U9Qj3``~FLMMO*ZS-q8p8L|^C|{h(hsqwnuU42ofK2wDA(3SFG+^PUpKbHWk{
z_FNNbF$b0n%vfUO9`L?+C^q}!j{?5l>Q4gt>wvPw%G-b*Jl{^`{eR8*C_am?;=A}M
zev1KZNIR$<(RQx5JN0qxw02&zcI7lNZ66JhZih?Zsu9k`!&Mp1c@WG3U{bf`6!J7e
z<-c5$JaG~qgKkeC#u2lK6b%Cnm-MJ^C#`4^m8BpGsRx#ek5RW(EvMMz=rI(Q(^q?w
zJy<XrEdq?V8MoqNjxy;n{W6R*ytTPOdin}N?JW&e-9X$#WS|%qpx8!~F~)dNp^PwR
z3P@jtHl`}&Pvbsmb)Tf+@K#Bqs3%Z!lhj5`QriUE_mr7!qLyQi>I@SshkpF~O6WmU
zbu~qUG(VrsE-n@drP9*U^0MQ&Zn<2kRI4j1o>!~Y>y5_hYO~pDwcBfJ>+79Px4VIp
zk4CVcrS73R(PL7z$d;^1ZinQXN^Xbbc9?88rE;3=H`$LTj+Y{bZrWpI0G@+fKvt2W
EKW-D*_5c6?

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/terminfo/x/xterm-xfree86 b/openwrt/target/default/target_skeleton/usr/share/terminfo/x/xterm-xfree86
new file mode 100644
index 0000000000000000000000000000000000000000..eeac9d8d35fdaf374dd11590cfaabc6f45a69c64
GIT binary patch
literal 1840
zcmcIkONbn05U%PGlc;3zAh<RwlS9WuNSJ=iiy?N5QO9JL$phIWqp(9}c6XAV$IkR-
zcCwF);MI$Wf(YtGg<K*mf(m=lLr@QT(Tf4`6bOWXo&ue(s(WSy17Sg%sjt4OzpDEG
ztNxy6c$%hYf|`6IwGuXZtwSsGy+)&uTZ^rBV-T~nEH>M<Al+y!2eq)%OCLD*iiW1W
z!<qDKvt92D(r1VLu+ch5#QGBjq9{Zx;3?WoPgC@OXEz;1#3S@5A|~ls+E35ZVMG?`
z1WhAv7W_QT0qe9#9qMb90S#$`-ctT9eE|IteM+CvHQJ=F=v&x7(J%BH-PDLEx|QgA
z(8TdJ4Cq}6kD|wUf}i3^p5lG{93Ntri|q4ptiQ%He1>QFjU;xC>l}>p9&jYMLSE;$
z`5i>P&mZ#_&|fAQ-|!ZH2Y!QpRL@QRgKzU4zRQ1c*@&W(kocJ~P8+Wq=Z!bjQycr=
zGd@)QiQ?yDe-vFauEW~=hi6plVfyPG<!l+>8$TF78^0RA8-E(Nj625PJIa69ZnoF&
z?XWJVo=82JnoLclMm6@Qf-xWY{vUlkdCz8QD`i$M&@Ot6%&OJ2y0%p>SzX7f_uz0B
z0A;i4oPa(F5uHT6x=rJRveqcW?K{~3pNNu0sFxrwZkwk-XJ{`l+XC1EzMb(3i?Pm2
zjweu%rTiE?VY<b0_*XEiEdj~Q2T6qh4o|?*EJri^tQ5wU%<8@_m|OA?4|xHeY2B#1
zL1yI`ME2&`Vx5MZft-cM&cai*^NIz<qM(yet`tx?4xcAhPC$|>ID19UZpZKQ?M3ql
z7WEkNHYGD7f<45Zqa!jsB2rv~rJYKoZWH1OWC0hU|8>LyoXO1UWaec`^16)WOObBQ
zTC>8EZI#4!K)sk^$<?KNY<pPB#xxIFuu3h-C|coOt1)4f$Sl(y9CiR%h72J~kUq`L
z)oSze3k%KWrAwDD2SKaVZg)D}?$T1P*YAhn^754{gTczmaCr6V>gw9s`uc{n&)0k4
z=P|bf$IOEn)Os0i>2F02AXAFF?a275j&|PBQ8_vQM@Qx8s9X(q9f@=`-qm<pt~J_&
zTVKbxtGPD7w@Z%nQp7EmyrNt@H*VOfy>1<`LeFYQ`&M1Ga*5@sWhYinEjPC6Xc($^
S|49`&zpHm3t|^~wi|zx05Hhj=

literal 0
HcmV?d00001

diff --git a/openwrt/target/default/target_skeleton/usr/share/udhcpc/default.script b/openwrt/target/default/target_skeleton/usr/share/udhcpc/default.script
new file mode 100755
index 0000000000..a52a7f8122
--- /dev/null
+++ b/openwrt/target/default/target_skeleton/usr/share/udhcpc/default.script
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# udhcpc script edited by Tim Riker <Tim@Rikers.org>
+
+[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
+
+RESOLV_CONF="/etc/resolv.conf"
+[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
+[ -n "$subnet" ] && NETMASK="netmask $subnet"
+
+case "$1" in
+	deconfig)
+		/sbin/ifconfig $interface 0.0.0.0
+		;;
+
+	renew|bound)
+		/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+
+		if [ -n "$router" ] ; then
+			echo "deleting routers"
+			while route del default gw 0.0.0.0 dev $interface ; do
+				:
+			done
+
+			for i in $router ; do
+				route add default gw $i dev $interface
+			done
+		fi
+
+		echo -n > $RESOLV_CONF
+		[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
+		for i in $dns ; do
+			echo adding dns $i
+			echo nameserver $i >> $RESOLV_CONF
+		done
+		;;
+esac
+
+exit 0
diff --git a/openwrt/target/jffs2/Config.in b/openwrt/target/jffs2/Config.in
new file mode 100644
index 0000000000..0d79dd1ffa
--- /dev/null
+++ b/openwrt/target/jffs2/Config.in
@@ -0,0 +1,6 @@
+config BR2_TARGET_ROOTFS_JFFS2
+	bool "jffs2 root filesystem for the target device"
+	default n
+	help
+	  Build a jffs2 root filesystem
+
diff --git a/openwrt/target/jffs2/Makefile.in b/openwrt/target/jffs2/Makefile.in
new file mode 100644
index 0000000000..31452eba8d
--- /dev/null
+++ b/openwrt/target/jffs2/Makefile.in
@@ -0,0 +1,3 @@
+ifeq ($(strip $(BR2_TARGET_ROOTFS_JFFS2)),y)
+TARGETS+=jffs2root
+endif
diff --git a/openwrt/target/jffs2/jffs2root.mk b/openwrt/target/jffs2/jffs2root.mk
new file mode 100644
index 0000000000..5dd79032fd
--- /dev/null
+++ b/openwrt/target/jffs2/jffs2root.mk
@@ -0,0 +1,50 @@
+#############################################################
+#
+# mtd provides us with mkfs.jffs2, to target JFFS2 filesystems
+#
+#############################################################
+
+MTD_DIR:=$(BUILD_DIR)/mtd-20011217
+MTD_SOURCE=mtd_20011217.orig.tar.gz
+MTD_SITE=http://ftp.debian.org/debian/pool/main/m/mtd
+MKFS_JFFS2=$(shell which mkfs.jffs2 2>/dev/null || echo $(MTD_DIR)/util/mkfs.jffs2)
+
+$(DL_DIR)/$(MTD_SOURCE):
+	$(WGET) -P $(DL_DIR) $(MTD_SITE)/$(MTD_SOURCE)
+
+$(MTD_DIR)/.unpacked: $(DL_DIR)/$(MTD_SOURCE)
+	zcat $(DL_DIR)/$(MTD_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	touch $(MTD_DIR)/.unpacked
+
+$(MTD_DIR)/util/mkfs.jffs2: $(MTD_DIR)/.unpacked
+#	CFLAGS=-I$(LINUX_HEADERS_DIR)/include $(MAKE) LINUXDIR=$(LINUX_DIR) -C $(MTD_DIR)/util
+	$(MAKE) LINUXDIR=$(LINUX_DIR) -C $(MTD_DIR)/util
+
+mtd: $(MKFS_JFFS2)
+
+
+#############################################################
+#
+# Build the jffs2 root filesystem image
+#
+#############################################################
+
+jffs2root: mtd
+	#-@find $(TARGET_DIR)/lib -type f -name \*.so\* | xargs $(STRIP) --strip-unneeded 2>/dev/null || true;
+	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
+	@rm -rf $(TARGET_DIR)/usr/man
+	@rm -rf $(TARGET_DIR)/usr/info
+	$(MKFS_JFFS2) --pad --little-endian --squash -e 0x20000 \
+		-D target/default/device_table.txt -d $(TARGET_DIR) \
+		-o $(IMAGE).jffs2
+
+jffs2root-source: $(DL_DIR)/$(MTD_SOURCE)
+
+jffs2root-clean:
+	-$(MAKE) -C $(MTD_DIR) clean
+
+jffs2root-dirclean:
+	rm -rf $(MTD_DIR)
+
+
+
diff --git a/openwrt/toolchain/Config.in b/openwrt/toolchain/Config.in
new file mode 100644
index 0000000000..22a11e7d65
--- /dev/null
+++ b/openwrt/toolchain/Config.in
@@ -0,0 +1,57 @@
+#
+
+menu "Toolchain Options"
+
+
+source "toolchain/uClibc/Config.in"
+source "toolchain/binutils/Config.in"
+source "toolchain/gcc/Config.in"
+source "toolchain/ccache/Config.in"
+source "toolchain/gdb/Config.in"
+
+
+comment "Common Toolchain Options"
+
+config BR2_ENABLE_MULTILIB
+	bool "Enable multilib support?"
+	default y
+	help
+	    If you want multilib enabled, enable this...
+
+config BR2_LARGEFILE
+	bool "Enable large file (files > 2 GB) support?"
+	depends on !BR2_cris
+	default y
+	help
+	    Enable large file (files > 2 GB) support
+
+config BR2_SOFT_FLOAT
+	bool "Use software floating point by default"
+	default n
+	depends on BR2_arm || BR2_mips || BR2_powerpc
+	help
+	  If your target CPU does not have a Floating Point Unit (FPU) or a
+	  kernel FPU emulator, but you still wish to support floating point
+	  functions, then everything will need to be compiled with soft floating
+	  point support (-msoft-float).
+
+	  Most people will answer N.
+
+config BR2_TARGET_OPTIMIZATION
+	string "Target Optimizations"
+	default "-Os -pipe"
+	help
+	  Optimizations to use when building for the target host.
+
+# Might be worth experimenting with for gcc 3.4.x.
+#GCC_WITH_CPU:=
+#GCC_WITH_ARCH:=
+#GCC_WITH_TUNE:=
+
+#GCC_WITH_CPU:=--with-cpu=
+#GCC_WITH_ARCH:=--with-arch=
+#GCC_WITH_TUNE:=--with-tune=
+
+
+endmenu
+
diff --git a/openwrt/toolchain/Makefile.in b/openwrt/toolchain/Makefile.in
new file mode 100644
index 0000000000..5b2d7f213d
--- /dev/null
+++ b/openwrt/toolchain/Makefile.in
@@ -0,0 +1,7 @@
+ifeq ($(BR2_ENABLE_MULTILIB),y)
+MULTILIB:=--enable-multilib
+endif
+
+
+# FIXME -- this is temporary
+OPTIMIZE_FOR_CPU=$(ARCH)
diff --git a/openwrt/toolchain/binutils/2.14.90.0.6/001-debian.patch b/openwrt/toolchain/binutils/2.14.90.0.6/001-debian.patch
new file mode 100644
index 0000000000..97b8e7fde7
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.6/001-debian.patch
@@ -0,0 +1,185 @@
+--- binutils-2.11.90.0.19.orig/ld/Makefile.am
++++ binutils-2.11.90.0.19/ld/Makefile.am
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+--- binutils-2.11.90.0.19.orig/ld/Makefile.in
++++ binutils-2.11.90.0.19/ld/Makefile.in
+@@ -123,7 +123,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urN binutils-2.11.90.0.27/gprof/gprof.texi binutils-2.11.90.0.27.new/gprof/gprof.texi
+--- binutils-2.11.90.0.27/gprof/gprof.texi	Tue Jun 19 14:57:58 2001
++++ binutils-2.11.90.0.27.new/gprof/gprof.texi	Mon Aug 27 10:27:23 2001
+@@ -137,6 +137,10 @@
+ If more than one profile file is specified, the @code{gprof}
+ output shows the sum of the profile information in the given profile files.
+ 
++If you use gcc 2.95.x or 3.0 to compile your binaries, you may need
++to add the @samp{-fprofile-arcs} to the compile command line in order
++for the call graphs to be properly stored in gmon.out.
++
+ @code{Gprof} calculates the amount of time spent in each routine.
+ Next, these times are propagated along the edges of the call graph.
+ Cycles are discovered, and calls into a cycle are made to share the time
+@@ -266,6 +270,11 @@
+ to do the linking, simply specify @samp{-pg} in addition to your usual
+ options.  The same option, @samp{-pg}, alters either compilation or linking
+ to do what is necessary for profiling.  Here are examples:
++
++If you use gcc 2.95.x or 3.0.x, you may need to add the
++@samp{-fprofile-arcs} option to the compile line along with @samp{-pg}
++in order to allow the call-graphs to be properly included in the gmon.out
++file.
+ 
+ @example
+ cc -g -c myprog.c utils.c -pg
+diff -urN binutils-2.11.92.0.5/bfd/opncls.c binutils-2.11.92.0.5.new/bfd/opncls.c
+--- binutils-2.11.92.0.5/bfd/opncls.c	Mon Oct  1 18:25:21 2001
++++ binutils-2.11.92.0.5.new/bfd/opncls.c	Sat Oct 13 11:26:59 2001
+@@ -127,6 +127,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
+diff -urN binutils-2.11.92.0.12.3/opcodes/i386-dis.c binutils-2.11.92.0.12.3.new/opcodes/i386-dis.c
+--- binutils-2.11.92.0.12.3/opcodes/i386-dis.c	Fri Nov 16 17:05:55 2001
++++ binutils-2.11.92.0.12.3.new/opcodes/i386-dis.c	Mon Dec 31 15:55:04 2001
+@@ -1830,7 +1830,7 @@
+  * The function returns the length of this instruction in bytes.
+  */
+ 
+-static char intel_syntax;
++static signed char intel_syntax;
+ static char open_char;
+ static char close_char;
+ static char separator_char;
+diff -urN binutils-2.12.90.0.12/ld/emultempl/elf32.em binutils-2.12.90.0.12.new/ld/emultempl/elf32.em
+--- binutils-2.12.90.0.12/ld/emultempl/elf32.em	Wed Jun 19 00:41:59 2002
++++ binutils-2.12.90.0.12.new/ld/emultempl/elf32.em	Wed Jun 26 10:00:26 2002
+@@ -672,6 +672,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, l->name,
+ 						      force))
+ 		break;
+@@ -867,6 +869,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf${ELFSIZE}_size_dynamic_sections
+          (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
+diff -urN binutils-2.13.90.0.18/gprof/gprof.texi binutils-2.13.90.0.18.new/gprof/gprof.texi
+--- binutils-2.13.90.0.18/gprof/gprof.texi	2003-02-02 18:29:09.000000000 -0500
++++ binutils-2.13.90.0.18.new/gprof/gprof.texi	2003-02-02 18:28:37.000000000 -0500
+@@ -185,7 +185,7 @@
+ @c man end
+ 
+ @c man begin SEEALSO
+-monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
++profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
+ 
+ ``An Execution Profiler for Modular Programs'',
+ by S. Graham, P. Kessler, M. McKusick;
+diff -urN binutils-2.13.90.0.10/opcodes/alpha-opc.c binutils-2.13.90.0.10.new/opcodes/alpha-opc.c
+--- binutils-2.13.90.0.10/opcodes/alpha-opc.c	2002-03-07 14:52:40.000000000 -0500
++++ binutils-2.13.90.0.10.new/opcodes/alpha-opc.c	2002-10-12 20:16:08.000000000 -0400
+@@ -1101,7 +1101,8 @@
+   { "wmb",		MFC(0x18,0x4400), BASE, ARG_NONE },
+   { "fetch",		MFC(0x18,0x8000), BASE, { ZA, PRB } },
+   { "fetch_m",		MFC(0x18,0xA000), BASE, { ZA, PRB } },
+-  { "rpcc",		MFC(0x18,0xC000), BASE, { RA } },
++  { "rpcc",		MFC(0x18,0xC000), BASE, { RA, ZB } },
++  { "rpcc",		MFC(0x18,0xC000), BASE, { RA, RB } },	/* ev6 una */
+   { "rc",		MFC(0x18,0xE000), BASE, { RA } },
+   { "ecb",		MFC(0x18,0xE800), BASE, { ZA, PRB } },	/* ev56 una */
+   { "rs",		MFC(0x18,0xF000), BASE, { RA } },
+--- binutils-2.13.90.0.18/bfd/elf64-alpha.c	2003-01-21 19:21:32.000000000 +0100
++++ binutils-2.13.90.0.18-modif/bfd/elf64-alpha.c	2003-04-11 01:24:26.000000000 +0200
+@@ -4184,9 +4184,12 @@
+ 
+   loc = srel->contents;
+   loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
+-  bfd_elf64_swap_reloca_out (abfd, &outrel, loc);
+-  BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
+-	      <= srel->_cooked_size);
++  if (loc)
++    {
++      bfd_elf64_swap_reloca_out (abfd, &outrel, loc);
++      BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
++		  <= srel->_cooked_size);
++    }
+ }
+ 
+ /* Relocate an Alpha ELF section for a relocatable link.
+2003-05-23  H.J. Lu <hongjiu.lu@intel.com>
+
+	* ltmain.sh: Make symlink for shared library if needed.
+
+opcodes/
+
+2003-07-14  H.J. Lu <hongjiu.lu@intel.com>
+
+	* Makefile.in: Regenerated.
+
+2003-06-11  H.J. Lu <hongjiu.lu@intel.com>
+
+	* Makefile.in: Regenerated.
+
+2003-05-23  H.J. Lu <hongjiu.lu@intel.com>
+
+	* Makefile.am (libopcodes_la_LIBADD): Use "-L../bfd -lbfd"
+	instead of "../bfd/libbfd.la".
+	* Makefile.in: Regenerated.
+
+--- binutils/ltmain.sh.dso	2002-03-22 00:16:20.000000000 -0800
++++ binutils/ltmain.sh	2003-07-14 12:50:17.000000000 -0700
+@@ -4413,6 +4413,10 @@ relink_command=\"$relink_command\""
+       # LD_LIBRARY_PATH before the program is installed.
+       $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+       $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
++      if test -n "$linkname"; then
++        $show "(cd $output_objdir && $rm ../$linkname && $LN_S $output_objdir/$linkname ../$linkname)"
++        $run eval '(cd $output_objdir && $rm ../$linkname && $LN_S $output_objdir/$linkname ../$linkname)' || exit $?
++      fi
+       ;;
+     esac
+     exit 0
+--- binutils/opcodes/Makefile.am.dso	2003-06-11 07:18:04.000000000 -0700
++++ binutils/opcodes/Makefile.am	2003-07-14 12:50:18.000000000 -0700
+@@ -283,7 +283,7 @@ disassemble.lo: disassemble.c $(INCDIR)/
+ 
+ libopcodes_la_SOURCES =  dis-buf.c disassemble.c
+ libopcodes_la_DEPENDENCIES = $(OFILES) ../bfd/libbfd.la
+-libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ ../bfd/libbfd.la
++libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ -L../bfd -lbfd
+ libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+ 
+ # libtool will build .libs/libopcodes.a.  We create libopcodes.a in
diff --git a/openwrt/toolchain/binutils/2.14.90.0.6/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.14.90.0.6/100-uclibc-conf.patch
new file mode 100644
index 0000000000..87db23fb01
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.6/100-uclibc-conf.patch
@@ -0,0 +1,646 @@
+diff -urN binutils-2.14.90.0.6/bfd/config.bfd binutils-2.14.90.0.6-uClibc/bfd/config.bfd
+--- binutils-2.14.90.0.6/bfd/config.bfd	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/config.bfd	2004-01-06 23:20:32.000000000 -0600
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,8 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf*)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | \
++  ia64*-*-linux-uclibc* | ia64*-*-elf*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -214,7 +215,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -222,7 +223,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux*)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+@@ -355,7 +357,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -366,7 +368,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -488,7 +490,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -502,7 +504,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -662,7 +664,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -929,7 +931,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -961,8 +964,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1110,7 +1113,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1157,7 +1160,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+diff -urN binutils-2.14.90.0.6/bfd/configure binutils-2.14.90.0.6-uClibc/bfd/configure
+--- binutils-2.14.90.0.6/bfd/configure	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure	2004-01-06 20:26:51.000000000 -0600
+@@ -1698,6 +1698,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5102,7 +5107,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5161,7 +5166,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5211,7 +5216,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.6/bfd/configure.in binutils-2.14.90.0.6-uClibc/bfd/configure.in
+--- binutils-2.14.90.0.6/bfd/configure.in	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure.in	2004-01-06 20:33:02.000000000 -0600
+@@ -153,7 +153,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -233,7 +233,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -286,7 +286,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.6/config.sub binutils-2.14.90.0.6-uClibc/config.sub
+--- binutils-2.14.90.0.6/config.sub	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/config.sub	2004-01-06 22:56:56.000000000 -0600
+@@ -118,7 +118,7 @@
+ # 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1131,7 +1131,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN binutils-2.14.90.0.6/configure binutils-2.14.90.0.6-uClibc/configure
+--- binutils-2.14.90.0.6/configure	2003-08-21 10:29:32.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure	2004-01-07 05:43:40.000000000 -0600
+@@ -1257,6 +1262,18 @@
+   i[3456789]86-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.6/configure.in binutils-2.14.90.0.6-uClibc/configure.in
+--- binutils-2.14.90.0.6/configure.in	2003-08-21 10:29:30.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure.in	2004-01-07 05:44:02.000000000 -0600
+@@ -508,6 +513,19 @@
+   i[[3456789]]86-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    build_modules=
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.6/demangler/configure binutils-2.14.90.0.6-uClibc/demangler/configure
+--- binutils-2.14.90.0.6/demangler/configure	2003-08-21 10:29:31.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/demangler/configure	2004-01-06 21:45:51.000000000 -0600
+@@ -1363,6 +1363,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.6/gas/configure binutils-2.14.90.0.6-uClibc/gas/configure
+--- binutils-2.14.90.0.6/gas/configure	2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure	2004-01-06 21:57:25.000000000 -0600
+@@ -1576,6 +1576,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -2370,6 +2375,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -2386,6 +2392,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -2400,6 +2407,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -2455,7 +2463,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -2512,6 +2522,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -2538,6 +2549,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -2592,6 +2604,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -2616,7 +2629,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -2649,6 +2664,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.6/gas/configure.in binutils-2.14.90.0.6-uClibc/gas/configure.in
+--- binutils-2.14.90.0.6/gas/configure.in	2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure.in	2004-01-06 21:57:26.000000000 -0600
+@@ -184,6 +184,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -200,6 +201,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -214,6 +216,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -269,7 +272,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -322,6 +327,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -348,6 +354,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -402,6 +409,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -424,7 +432,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -457,6 +467,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.6/ld/configure binutils-2.14.90.0.6-uClibc/ld/configure
+--- binutils-2.14.90.0.6/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure	2004-01-06 21:59:31.000000000 -0600
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.6/ld/configure.tgt binutils-2.14.90.0.6-uClibc/ld/configure.tgt
+--- binutils-2.14.90.0.6/ld/configure.tgt	2003-08-21 10:28:48.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure.tgt	2004-01-06 22:09:40.000000000 -0600
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -124,7 +127,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -148,14 +151,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -250,10 +255,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -354,7 +362,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -370,9 +379,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -416,16 +425,20 @@
+ mips*-*-rtems*)		targ_emul=elf32ebmip ;;
+ mips*el-*-vxworks*)	targ_emul=elf32elmip ;;
+ mips*-*-vxworks*)	targ_emul=elf32ebmip ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*) \
++			targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*) \
++			targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -447,6 +460,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.14.90.0.6/libtool.m4 binutils-2.14.90.0.6-uClibc/libtool.m4
+--- binutils-2.14.90.0.6/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/libtool.m4	2004-01-06 20:30:39.000000000 -0600
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.14.90.0.6/ltconfig binutils-2.14.90.0.6-uClibc/ltconfig
+--- binutils-2.14.90.0.6/ltconfig	2003-07-23 10:08:08.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ltconfig	2004-01-06 21:05:11.000000000 -0600
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/binutils/2.14.90.0.6/200-build_modules.patch b/openwrt/toolchain/binutils/2.14.90.0.6/200-build_modules.patch
new file mode 100644
index 0000000000..e9f8e75a89
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.6/200-build_modules.patch
@@ -0,0 +1,31 @@
+Get around an odd build failure.
+diff -urN binutils-2.14.90.0.6/configure binutils-2.14.90.0.6-uClibc/configure
+--- binutils-2.14.90.0.6/configure	2003-08-21 10:29:32.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure	2004-01-07 05:43:40.000000000 -0600
+@@ -906,6 +906,11 @@
+ fi
+ 
+ 
++case "$target" in
++  *-*-*-uclibc*)
++    build_modules=
++    ;;
++esac
+ ################################################################################
+ 
+ srcname="gnu development package"
+diff -urN binutils-2.14.90.0.6/configure.in binutils-2.14.90.0.6-uClibc/configure.in
+--- binutils-2.14.90.0.6/configure.in	2003-08-21 10:29:30.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure.in	2004-01-07 05:44:02.000000000 -0600
+@@ -178,6 +178,11 @@
+ fi
+ 
+ 
++case "$target" in
++  *-*-*-uclibc*)
++    build_modules=
++    ;;
++esac
+ ################################################################################
+ 
+ srcname="gnu development package"
diff --git a/openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch b/openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch
new file mode 100644
index 0000000000..dc67d3c4e3
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.6/210-cflags.patch
@@ -0,0 +1,32 @@
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
+@@ -55,10 +55,10 @@
+ MKDOC = chew$(EXEEXT_FOR_BUILD)
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
+@@ -469,10 +469,10 @@
+ 
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/001-debian.patch b/openwrt/toolchain/binutils/2.14.90.0.7/001-debian.patch
new file mode 100644
index 0000000000..1dd39a933d
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.7/001-debian.patch
@@ -0,0 +1,2394 @@
+diff -urN binutils-2.14.90.0.7.orig/bfd/ChangeLog binutils-2.14.90.0.7/bfd/ChangeLog
+--- binutils-2.14.90.0.7.orig/bfd/ChangeLog	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/ChangeLog	2004-04-20 01:26:12.000000000 -0600
+@@ -1,3 +1,34 @@
++2003-10-29  Daniel Jacobowitz  <drow@mvista.com>
++
++        * elf32-arm.h (elf32_arm_final_link_relocate): Move check for
++        SEC_ALLOC.
++
++2003-10-29  Philip Blundell  <philb@gnu.org>
++
++	* elf32-arm.h (elf32_arm_plt0_entry, elf32_arm_plt_entry): New
++	code sequence.
++	(PLT_HEADER_SIZE): New.
++	(struct elf32_arm_pcrel_relocs_copied): Rename to ...
++	(struct elf32_arm_relocs_copied): ... this.  Count both
++	pcrel and non-pcrel relocs.  All uses updated.
++	(struct elf32_arm_link_hash_table): Add pointers to dynamic linker
++	sections and symbol/section mapping cache.
++	(create_got_section): New.
++	(elf32_arm_create_dynamic_sections): New.
++	(elf_backend_create_dynamic_sections): Use it.
++	(elf32_arm_final_link_relocate): Support garbage collection of relocs.
++	(elf32_arm_check_relocs): Likewise.
++	(elf32_arm_adjust_dynamic_symbol): Likewise.
++	(elf32_arm_copy_indirect_symbol): New.
++	(elf32_arm_link_hash_table_create): Initialise new fields. 
++	(elf32_arm_gc_sweep_hook): Implement.
++	(elf32_arm_discard_copies): Delete.
++	(elf32_arm_finish_dynamic_symbol): Use new PLT code.
++	(elf32_arm_finish_dynamic_sections): Likewise.
++	(elf_backend_can_refcount): Define.
++	(elf_backend_copy_indirect_symbol): Likewise.
++	(elf_backend_plt_header_size): Set to PLT_HEADER_SIZE.
++
+ 2003-10-29  Alan Modra  <amodra@bigpond.net.au>
+ 
+ 	* elf64-ppc.c (elf_backend_grok_prstatus): Define.
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf-bfd.h binutils-2.14.90.0.7/bfd/elf-bfd.h
+--- binutils-2.14.90.0.7.orig/bfd/elf-bfd.h	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf-bfd.h	2004-04-20 01:26:12.000000000 -0600
+@@ -1303,7 +1303,7 @@
+ extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
+   (const Elf_Internal_Rela *);
+ extern bfd_vma _bfd_elf_rela_local_sym
+-  (bfd *, Elf_Internal_Sym *, asection *, Elf_Internal_Rela *);
++  (bfd *, Elf_Internal_Sym *, asection **, Elf_Internal_Rela *);
+ extern bfd_vma _bfd_elf_rel_local_sym
+   (bfd *, Elf_Internal_Sym *, asection **, bfd_vma);
+ extern bfd_vma _bfd_elf_section_offset
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf-hppa.h binutils-2.14.90.0.7/bfd/elf-hppa.h
+--- binutils-2.14.90.0.7.orig/bfd/elf-hppa.h	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf-hppa.h	2004-04-20 01:26:12.000000000 -0600
+@@ -1346,11 +1346,11 @@
+ 	  /* This is a local symbol.  */
+ 	  sym = local_syms + r_symndx;
+ 	  sym_sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
+ 
+ 	  /* If this symbol has an entry in the PA64 dynamic hash
+ 	     table, then get it.  */
+-	  dyn_name = get_dyn_name (input_section, h, rel,
++	  dyn_name = get_dyn_name (input_bfd, h, rel,
+ 				   &dynh_buf, &dynh_buflen);
+ 	  dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ 					      dyn_name, FALSE, FALSE);
+@@ -1373,7 +1373,7 @@
+ 
+ 	      /* If this symbol has an entry in the PA64 dynamic hash
+ 		 table, then get it.  */
+-	      dyn_name = get_dyn_name (input_section, h, rel,
++	      dyn_name = get_dyn_name (input_bfd, h, rel,
+ 				       &dynh_buf, &dynh_buflen);
+ 	      dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ 						  dyn_name, FALSE, FALSE);
+@@ -1410,7 +1410,7 @@
+ 
+ 	      /* If this symbol has an entry in the PA64 dynamic hash
+ 		 table, then get it.  */
+-	      dyn_name = get_dyn_name (input_section, h, rel,
++	      dyn_name = get_dyn_name (input_bfd, h, rel,
+ 				       &dynh_buf, &dynh_buflen);
+ 	      dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ 						  dyn_name, FALSE, FALSE);
+@@ -1426,7 +1426,7 @@
+ 	    }
+ 	  else if (h->root.type == bfd_link_hash_undefweak)
+             {
+-	      dyn_name = get_dyn_name (input_section, h, rel,
++	      dyn_name = get_dyn_name (input_bfd, h, rel,
+ 				       &dynh_buf, &dynh_buflen);
+ 	      dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+ 						  dyn_name, FALSE, FALSE);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf-m10200.c binutils-2.14.90.0.7/bfd/elf-m10200.c
+--- binutils-2.14.90.0.7.orig/bfd/elf-m10200.c	2003-07-23 09:08:08.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf-m10200.c	2004-04-20 01:26:12.000000000 -0600
+@@ -373,7 +373,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf-m10300.c binutils-2.14.90.0.7/bfd/elf-m10300.c
+--- binutils-2.14.90.0.7.orig/bfd/elf-m10300.c	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf-m10300.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1574,7 +1574,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf.c binutils-2.14.90.0.7/bfd/elf.c
+--- binutils-2.14.90.0.7.orig/bfd/elf.c	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf.c	2004-04-20 01:26:12.000000000 -0600
+@@ -7367,9 +7367,10 @@
+ bfd_vma
+ _bfd_elf_rela_local_sym (bfd *abfd,
+ 			 Elf_Internal_Sym *sym,
+-			 asection *sec,
++			 asection **psec,
+ 			 Elf_Internal_Rela *rel)
+ {
++  asection *sec = *psec;
+   bfd_vma relocation;
+ 
+   relocation = (sec->output_section->vma
+@@ -7379,16 +7380,14 @@
+       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
+       && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
+     {
+-      asection *msec;
+-
+-      msec = sec;
+       rel->r_addend =
+-	_bfd_merged_section_offset (abfd, &msec,
++	_bfd_merged_section_offset (abfd, psec,
+ 				    elf_section_data (sec)->sec_info,
+ 				    sym->st_value + rel->r_addend,
+-				    0)
+-	- relocation;
+-      rel->r_addend += msec->output_section->vma + msec->output_offset;
++				    0);
++      sec = *psec;
++      rel->r_addend -= relocation;
++      rel->r_addend += sec->output_section->vma + sec->output_offset;
+     }
+   return relocation;
+ }
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-arm.h binutils-2.14.90.0.7/bfd/elf32-arm.h
+--- binutils-2.14.90.0.7.orig/bfd/elf32-arm.h	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-arm.h	2004-04-20 01:26:12.000000000 -0600
+@@ -84,6 +84,12 @@
+ static void arm_add_to_rel
+   PARAMS ((bfd *, bfd_byte *, reloc_howto_type *, bfd_signed_vma));
+ #endif
++static bfd_boolean allocate_dynrelocs 
++  PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean create_got_section 
++  PARAMS ((bfd * dynobj, struct bfd_link_info * info));
++static bfd_boolean elf32_arm_create_dynamic_sections 
++  PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static enum elf_reloc_type_class elf32_arm_reloc_type_class
+   PARAMS ((const Elf_Internal_Rela *));
+ static bfd_boolean elf32_arm_object_p
+@@ -119,6 +125,12 @@
+    section.  */
+ #define ELF_DYNAMIC_INTERPRETER     "/usr/lib/ld.so.1"
+ 
++#ifdef FOUR_WORD_PLT
++
++/* The size in bytes of the special first entry in the procedure
++   linkage table.  */
++#define PLT_HEADER_SIZE 16
++
+ /* The size in bytes of an entry in the procedure linkage table.  */
+ #define PLT_ENTRY_SIZE 16
+ 
+@@ -126,23 +138,56 @@
+    this.  It is set up so that any shared library function that is
+    called before the relocation has been set up calls the dynamic
+    linker first.  */
+-static const bfd_vma elf32_arm_plt0_entry [PLT_ENTRY_SIZE / 4] =
++static const bfd_vma elf32_arm_plt0_entry [PLT_HEADER_SIZE / 4] =
+   {
+-    0xe52de004,	/* str   lr, [sp, #-4]!     */
+-    0xe59fe010,	/* ldr   lr, [pc, #16]      */
+-    0xe08fe00e,	/* add   lr, pc, lr         */
+-    0xe5bef008	/* ldr   pc, [lr, #8]!      */
++    0xe52de004,		/* str   lr, [sp, #-4]! */
++    0xe59fe010,		/* ldr   lr, [pc, #16]  */
++    0xe08fe00e,		/* add   lr, pc, lr     */
++    0xe5bef008,		/* ldr   pc, [lr, #8]!  */
+   };
+ 
+ /* Subsequent entries in a procedure linkage table look like
+    this.  */
+ static const bfd_vma elf32_arm_plt_entry [PLT_ENTRY_SIZE / 4] =
+- {
+-   0xe59fc004,	/* ldr   ip, [pc, #4]       */
+-   0xe08fc00c,	/* add   ip, pc, ip         */
+-   0xe59cf000,	/* ldr   pc, [ip]           */
+-   0x00000000	/* offset to symbol in got  */
+- };
++  {
++    0xe28fc600,		/* add   ip, pc, #NN	*/
++    0xe28cca00,		/* add	 ip, ip, #NN	*/
++    0xe5bcf000,		/* ldr	 pc, [ip, #NN]! */
++    0x00000000,		/* unused		*/
++  };
++
++#else
++
++/* The size in bytes of the special first entry in the procedure
++   linkage table.  */
++#define PLT_HEADER_SIZE 20
++
++/* The size in bytes of an entry in the procedure linkage table.  */
++#define PLT_ENTRY_SIZE 12
++
++/* The first entry in a procedure linkage table looks like
++   this.  It is set up so that any shared library function that is
++   called before the relocation has been set up calls the dynamic
++   linker first.  */
++static const bfd_vma elf32_arm_plt0_entry [PLT_HEADER_SIZE / 4] =
++  {
++    0xe52de004,		/* str   lr, [sp, #-4]! */
++    0xe59fe004,		/* ldr   lr, [pc, #4]   */
++    0xe08fe00e,		/* add   lr, pc, lr     */
++    0xe5bef008,		/* ldr   pc, [lr, #8]!  */
++    0x00000000,		/* &GOT[0] - .          */
++  };
++
++/* Subsequent entries in a procedure linkage table look like
++   this.  */
++static const bfd_vma elf32_arm_plt_entry [PLT_ENTRY_SIZE / 4] =
++  {
++    0xe28fc600,		/* add   ip, pc, #0xNN00000 */
++    0xe28cca00,		/* add	 ip, ip, #0xNN000   */
++    0xe5bcf000,		/* ldr	 pc, [ip, #0xNNN]!  */
++  };
++
++#endif
+ 
+ /* The ARM linker needs to keep track of the number of relocs that it
+    decides to copy in check_relocs for each symbol.  This is so that
+@@ -152,14 +197,16 @@
+ 
+ /* This structure keeps track of the number of PC relative relocs we
+    have copied for a given symbol.  */
+-struct elf32_arm_pcrel_relocs_copied
++struct elf32_arm_relocs_copied
+   {
+     /* Next section.  */
+-    struct elf32_arm_pcrel_relocs_copied * next;
++    struct elf32_arm_relocs_copied * next;
+     /* A section in dynobj.  */
+     asection * section;
+     /* Number of relocs copied in this section.  */
+     bfd_size_type count;
++    /* Number of relocs copied in this section.  */
++    bfd_size_type pc_count;
+   };
+ 
+ /* Arm ELF linker hash entry.  */
+@@ -168,13 +215,9 @@
+     struct elf_link_hash_entry root;
+ 
+     /* Number of PC relative relocs copied for this symbol.  */
+-    struct elf32_arm_pcrel_relocs_copied * pcrel_relocs_copied;
++    struct elf32_arm_relocs_copied * relocs_copied;
+   };
+ 
+-/* Declare this now that the above structures are defined.  */
+-static bfd_boolean elf32_arm_discard_copies
+-  PARAMS ((struct elf32_arm_link_hash_entry *, PTR));
+-
+ /* Traverse an arm ELF linker hash table.  */
+ #define elf32_arm_link_hash_traverse(table, func, info)			\
+   (elf_link_hash_traverse						\
+@@ -204,6 +247,18 @@
+     /* A boolean indicating whether knowledge of the ARM's pipeline
+        length should be applied by the linker.  */
+     int no_pipeline_knowledge;
++
++    /* Short-cuts to get to dynamic linker sections.  */
++    asection *sgot;
++    asection *sgotplt;
++    asection *srelgot;
++    asection *splt;
++    asection *srelplt;
++    asection *sdynbss;
++    asection *srelbss;
++
++    /* Small local sym to section mapping cache.  */
++    struct sym_sec_cache sym_sec;
+   };
+ 
+ /* Create an entry in an ARM ELF linker hash table.  */
+@@ -231,11 +286,121 @@
+ 	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+ 				     table, string));
+   if (ret != (struct elf32_arm_link_hash_entry *) NULL)
+-    ret->pcrel_relocs_copied = NULL;
++    ret->relocs_copied = NULL;
+ 
+   return (struct bfd_hash_entry *) ret;
+ }
+ 
++/* Create .got, .gotplt, and .rel.got sections in DYNOBJ, and set up
++   shortcuts to them in our hash table.  */
++
++static bfd_boolean
++create_got_section (dynobj, info)
++     bfd *dynobj;
++     struct bfd_link_info *info;
++{
++  struct elf32_arm_link_hash_table *htab;
++
++  if (! _bfd_elf_create_got_section (dynobj, info))
++    return FALSE;
++
++  htab = elf32_arm_hash_table (info);
++  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
++  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
++  if (!htab->sgot || !htab->sgotplt)
++    abort ();
++
++  htab->srelgot = bfd_make_section (dynobj, ".rel.got");
++  if (htab->srelgot == NULL
++      || ! bfd_set_section_flags (dynobj, htab->srelgot,
++				  (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
++				   | SEC_IN_MEMORY | SEC_LINKER_CREATED
++				   | SEC_READONLY))
++      || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2))
++    return FALSE;
++  return TRUE;
++}
++
++/* Create .plt, .rel.plt, .got, .got.plt, .rel.got, .dynbss, and
++   .rel.bss sections in DYNOBJ, and set up shortcuts to them in our
++   hash table.  */
++
++static bfd_boolean
++elf32_arm_create_dynamic_sections (dynobj, info)
++     bfd *dynobj;
++     struct bfd_link_info *info;
++{
++  struct elf32_arm_link_hash_table *htab;
++
++  htab = elf32_arm_hash_table (info);
++  if (!htab->sgot && !create_got_section (dynobj, info))
++    return FALSE;
++
++  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
++    return FALSE;
++
++  htab->splt = bfd_get_section_by_name (dynobj, ".plt");
++  htab->srelplt = bfd_get_section_by_name (dynobj, ".rel.plt");
++  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
++  if (!info->shared)
++    htab->srelbss = bfd_get_section_by_name (dynobj, ".rel.bss");
++
++  if (!htab->splt || !htab->srelplt || !htab->sdynbss
++      || (!info->shared && !htab->srelbss))
++    abort ();
++
++  return TRUE;
++}
++
++/* Copy the extra info we tack onto an elf_link_hash_entry.  */
++
++static void
++elf32_arm_copy_indirect_symbol (const struct elf_backend_data *bed,
++				struct elf_link_hash_entry *dir,
++				struct elf_link_hash_entry *ind)
++{
++  struct elf32_arm_link_hash_entry *edir, *eind;
++
++  edir = (struct elf32_arm_link_hash_entry *) dir;
++  eind = (struct elf32_arm_link_hash_entry *) ind;
++
++  if (eind->relocs_copied != NULL)
++    {
++      if (edir->relocs_copied != NULL)
++	{
++	  struct elf32_arm_relocs_copied **pp;
++	  struct elf32_arm_relocs_copied *p;
++
++	  if (ind->root.type == bfd_link_hash_indirect)
++	    abort ();
++
++	  /* Add reloc counts against the weak sym to the strong sym
++	     list.  Merge any entries against the same section.  */
++	  for (pp = &eind->relocs_copied; (p = *pp) != NULL; )
++	    {
++	      struct elf32_arm_relocs_copied *q;
++
++	      for (q = edir->relocs_copied; q != NULL; q = q->next)
++		if (q->section == p->section)
++		  {
++		    q->pc_count += p->pc_count;
++		    q->count += p->count;
++		    *pp = p->next;
++		    break;
++		  }
++	      if (q == NULL)
++		pp = &p->next;
++	    }
++	  *pp = edir->relocs_copied;
++	}
++
++      edir->relocs_copied = eind->relocs_copied;
++      eind->relocs_copied = NULL;
++    }
++
++  _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
++}
++
+ /* Create an ARM elf linker hash table.  */
+ 
+ static struct bfd_link_hash_table *
+@@ -256,10 +421,18 @@
+       return NULL;
+     }
+ 
++  ret->sgot = NULL;
++  ret->sgotplt = NULL;
++  ret->srelgot = NULL;
++  ret->splt = NULL;
++  ret->srelplt = NULL;
++  ret->sdynbss = NULL;
++  ret->srelbss = NULL;
+   ret->thumb_glue_size = 0;
+   ret->arm_glue_size = 0;
+   ret->bfd_of_glue_owner = NULL;
+   ret->no_pipeline_knowledge = 0;
++  ret->sym_sec.abfd = NULL;
+ 
+   return &ret->root.root;
+ }
+@@ -1134,16 +1307,21 @@
+ #ifndef OLD_ARM_ABI
+     case R_ARM_XPC25:
+ #endif
++      /* r_symndx will be zero only for relocs against symbols
++	 from removed linkonce sections, or sections discarded by
++	 a linker script.  */
++      if (r_symndx == 0)
++	return bfd_reloc_ok;
++
+       /* When generating a shared object, these relocations are copied
+ 	 into the output file to be resolved at run time.  */
+-      if (info->shared
+-	  && r_symndx != 0
+-	  && (r_type != R_ARM_PC24
+-	      || (h != NULL
+-	          && h->dynindx != -1
+-		  && (! info->symbolic
+-		      || (h->elf_link_hash_flags
+-			  & ELF_LINK_HASH_DEF_REGULAR) == 0))))
++      if ((info->shared
++	   && (input_section->flags & SEC_ALLOC)
++	   && (h == NULL
++	       || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++	       || h->root.type != bfd_link_hash_undefweak)
++	   && (r_type != R_ARM_PC24
++	       || !SYMBOL_CALLS_LOCAL (info, h))))
+ 	{
+ 	  Elf_Internal_Rela outrel;
+ 	  bfd_byte *loc;
+@@ -1184,30 +1362,19 @@
+ 
+ 	  if (skip)
+ 	    memset (&outrel, 0, sizeof outrel);
+-	  else if (r_type == R_ARM_PC24)
+-	    {
+-	      BFD_ASSERT (h != NULL && h->dynindx != -1);
+-	      if ((input_section->flags & SEC_ALLOC) == 0)
+-		relocate = TRUE;
+-	      outrel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_PC24);
+-	    }
++	  else if (h != NULL
++		   && h->dynindx != -1
++		   && (r_type == R_ARM_PC24
++		       || !info->shared
++		       || !info->symbolic
++		       || (h->elf_link_hash_flags
++			   & ELF_LINK_HASH_DEF_REGULAR) == 0))
++	    outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+ 	  else
+ 	    {
+-	      if (h == NULL
+-		  || ((info->symbolic || h->dynindx == -1)
+-		      && (h->elf_link_hash_flags
+-			  & ELF_LINK_HASH_DEF_REGULAR) != 0))
+-		{
+-		  relocate = TRUE;
+-		  outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
+-		}
+-	      else
+-		{
+-		  BFD_ASSERT (h->dynindx != -1);
+-		  if ((input_section->flags & SEC_ALLOC) == 0)
+-		    relocate = TRUE;
+-		  outrel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_ABS32);
+-		}
++	      /* This symbol is local, or marked to become local.  */
++	      relocate = TRUE;
++	      outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
+ 	    }
+ 
+ 	  loc = sreloc->contents;
+@@ -1617,16 +1784,17 @@
+       if (h != NULL)
+ 	{
+ 	  bfd_vma off;
+-	  bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
++	  bfd_boolean dyn;
+ 
+ 	  off = h->got.offset;
+ 	  BFD_ASSERT (off != (bfd_vma) -1);
++	  dyn = globals->root.dynamic_sections_created;
+ 
+-	  if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
++	  if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
+ 	      || (info->shared
+-		  && (info->symbolic || h->dynindx == -1
+-		      || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
+-		  && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
++		  && SYMBOL_REFERENCES_LOCAL (info, h))
++	      || (ELF_ST_VISIBILITY (h->other)
++		  && h->root.type == bfd_link_hash_undefweak))
+ 	    {
+ 	      /* This is actually a static link, or it is a -Bsymbolic link
+ 		 and the symbol is defined locally.  We must initialize this
+@@ -1712,7 +1880,8 @@
+ 				 contents, rel->r_offset, value,
+ 				 (bfd_vma) 0);
+ 
+-      if (h->plt.offset == (bfd_vma) -1)
++      if (h->plt.offset == (bfd_vma) -1
++	  || globals->splt == NULL)
+         /* We didn't make a PLT entry for this symbol.  This
+            happens when statically linking PIC code, or when
+            using -Bsymbolic.  */
+@@ -1958,7 +2127,7 @@
+ 	      bfd_put_32 (input_bfd, value, contents + rel->r_offset);
+ 	    }
+ #else
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ #endif
+ 	}
+       else
+@@ -1983,9 +2152,10 @@
+ 		case R_ARM_THM_PC22:
+ 	          if (info->shared
+ 	              && (
+-		  (!info->symbolic && h->dynindx != -1)
++			  (!info->symbolic && h->dynindx != -1)
+ 	                  || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
+ 			  )
++		      && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ 	              && ((input_section->flags & SEC_ALLOC) != 0
+ 			  /* DWARF will emit R_ARM_ABS32 relocations in its
+ 			     sections against symbols defined externally
+@@ -2603,7 +2773,82 @@
+      asection *sec ATTRIBUTE_UNUSED;
+      const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
+ {
+-  /* We don't support garbage collection of GOT and PLT relocs yet.  */
++  Elf_Internal_Shdr *symtab_hdr;
++  struct elf_link_hash_entry **sym_hashes;
++  bfd_signed_vma *local_got_refcounts;
++  const Elf_Internal_Rela *rel, *relend;
++  unsigned long r_symndx;
++  struct elf_link_hash_entry *h;
++
++  elf_section_data (sec)->local_dynrel = NULL;
++
++  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
++  sym_hashes = elf_sym_hashes (abfd);
++  local_got_refcounts = elf_local_got_refcounts (abfd);
++
++  relend = relocs + sec->reloc_count;
++  for (rel = relocs; rel < relend; rel++)
++    switch (ELF32_R_TYPE (rel->r_info))
++      {
++      case R_ARM_GOT32:
++	r_symndx = ELF32_R_SYM (rel->r_info);
++	if (r_symndx >= symtab_hdr->sh_info)
++	  {
++	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
++	    if (h->got.refcount > 0)
++	      h->got.refcount -= 1;
++	  }
++	else if (local_got_refcounts != NULL)
++	  {
++	    if (local_got_refcounts[r_symndx] > 0)
++	      local_got_refcounts[r_symndx] -= 1;
++	  }
++	break;
++
++      case R_ARM_ABS32:
++      case R_ARM_REL32:
++      case R_ARM_PC24:
++	r_symndx = ELF32_R_SYM (rel->r_info);
++	if (r_symndx >= symtab_hdr->sh_info)
++	  {
++	    struct elf32_arm_link_hash_entry *eh;
++	    struct elf32_arm_relocs_copied **pp;
++	    struct elf32_arm_relocs_copied *p;
++
++	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
++
++	    if (!info->shared && h->plt.refcount > 0)
++	      h->plt.refcount -= 1;
++
++	    eh = (struct elf32_arm_link_hash_entry *) h;
++
++	    for (pp = &eh->relocs_copied; (p = *pp) != NULL; pp = &p->next)
++	      if (p->section == sec)
++		{
++		  if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
++		    p->pc_count -= 1;
++		  p->count -= 1;
++		  if (p->count == 0)
++		    *pp = p->next;
++		  break;
++		}
++	  }
++	break;
++
++      case R_ARM_PLT32:
++	r_symndx = ELF32_R_SYM (rel->r_info);
++	if (r_symndx >= symtab_hdr->sh_info)
++	  {
++	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
++	    if (h->plt.refcount > 0)
++	      h->plt.refcount -= 1;
++	  }
++	break;
++
++      default:
++	break;
++      }
++
+   return TRUE;
+ }
+ 
+@@ -2622,13 +2867,15 @@
+   const Elf_Internal_Rela *rel;
+   const Elf_Internal_Rela *rel_end;
+   bfd *dynobj;
+-  asection *sgot, *srelgot, *sreloc;
++  asection *sreloc;
+   bfd_vma *local_got_offsets;
++  struct elf32_arm_link_hash_table *htab;
+ 
+   if (info->relocatable)
+     return TRUE;
+ 
+-  sgot = srelgot = sreloc = NULL;
++  htab = elf32_arm_hash_table (info);
++  sreloc = NULL;
+ 
+   dynobj = elf_hash_table (info)->dynobj;
+   local_got_offsets = elf_local_got_offsets (abfd);
+@@ -2653,126 +2900,82 @@
+       else
+         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ 
+-      /* Some relocs require a global offset table.  */
+-      if (dynobj == NULL)
+-	{
+-	  switch (ELF32_R_TYPE (rel->r_info))
+-	    {
+-	    case R_ARM_GOT32:
+-	    case R_ARM_GOTOFF:
+-	    case R_ARM_GOTPC:
+-	      elf_hash_table (info)->dynobj = dynobj = abfd;
+-	      if (! _bfd_elf_create_got_section (dynobj, info))
+-		return FALSE;
+-	      break;
+-
+-	    default:
+-	      break;
+-	    }
+-	}
+-
+       switch (ELF32_R_TYPE (rel->r_info))
+         {
+-	  case R_ARM_GOT32:
+-	    /* This symbol requires a global offset table entry.  */
+-	    if (sgot == NULL)
+-	      {
+-	        sgot = bfd_get_section_by_name (dynobj, ".got");
+-	        BFD_ASSERT (sgot != NULL);
+-	      }
++	  case R_ARM_PLT32:
++	    /* This symbol requires a procedure linkage table entry.  We
++               actually build the entry in adjust_dynamic_symbol,
++               because this might be a case of linking PIC code which is
++               never referenced by a dynamic object, in which case we
++               don't need to generate a procedure linkage table entry
++               after all.  */
+ 
+-	    /* Get the got relocation section if necessary.  */
+-	    if (srelgot == NULL
+-	        && (h != NULL || info->shared))
+-	      {
+-	        srelgot = bfd_get_section_by_name (dynobj, ".rel.got");
++	    /* If this is a local symbol, we resolve it directly without
++               creating a procedure linkage table entry.  */
++	    if (h == NULL)
++	      continue;
+ 
+-	        /* If no got relocation section, make one and initialize.  */
+-	        if (srelgot == NULL)
+-		  {
+-		    srelgot = bfd_make_section (dynobj, ".rel.got");
+-		    if (srelgot == NULL
+-		        || ! bfd_set_section_flags (dynobj, srelgot,
+-						    (SEC_ALLOC
+-						     | SEC_LOAD
+-						     | SEC_HAS_CONTENTS
+-						     | SEC_IN_MEMORY
+-						     | SEC_LINKER_CREATED
+-						     | SEC_READONLY))
+-		        || ! bfd_set_section_alignment (dynobj, srelgot, 2))
+-		      return FALSE;
+-		  }
+-	      }
++	    h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
++	    h->plt.refcount++;
++	    break;
+ 
++	  case R_ARM_GOT32:
++	    /* This symbol requires a global offset table entry.  */
+ 	    if (h != NULL)
+ 	      {
+-	        if (h->got.offset != (bfd_vma) -1)
+-		  /* We have already allocated space in the .got.  */
+-		  break;
+-
+-	        h->got.offset = sgot->_raw_size;
+-
+-	        /* Make sure this symbol is output as a dynamic symbol.  */
+-	        if (h->dynindx == -1)
+-		  if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+-		    return FALSE;
+-
+-	        srelgot->_raw_size += sizeof (Elf32_External_Rel);
++		h->got.refcount++;
+ 	      }
+ 	    else
+ 	      {
+-	        /* This is a global offset table entry for a local
+-                   symbol.  */
+-	        if (local_got_offsets == NULL)
++		bfd_signed_vma *local_got_refcounts;
++
++		/* This is a global offset table entry for a local symbol.  */
++		local_got_refcounts = elf_local_got_refcounts (abfd);
++		if (local_got_refcounts == NULL)
+ 		  {
+ 		    bfd_size_type size;
+-		    unsigned int i;
+ 
+ 		    size = symtab_hdr->sh_info;
+-		    size *= sizeof (bfd_vma);
+-		    local_got_offsets = (bfd_vma *) bfd_alloc (abfd, size);
+-		    if (local_got_offsets == NULL)
++		    size *= (sizeof (bfd_signed_vma) + sizeof(char));
++		    local_got_refcounts = ((bfd_signed_vma *)
++					   bfd_zalloc (abfd, size));
++		    if (local_got_refcounts == NULL)
+ 		      return FALSE;
+-		    elf_local_got_offsets (abfd) = local_got_offsets;
+-		    for (i = 0; i < symtab_hdr->sh_info; i++)
+-		      local_got_offsets[i] = (bfd_vma) -1;
++		    elf_local_got_refcounts (abfd) = local_got_refcounts;
+ 		  }
+-
+-	        if (local_got_offsets[r_symndx] != (bfd_vma) -1)
+-		  /* We have already allocated space in the .got.  */
+-		  break;
+-
+-	        local_got_offsets[r_symndx] = sgot->_raw_size;
+-
+-	        if (info->shared)
+-		  /* If we are generating a shared object, we need to
+-		     output a R_ARM_RELATIVE reloc so that the dynamic
+-		     linker can adjust this GOT entry.  */
+-		  srelgot->_raw_size += sizeof (Elf32_External_Rel);
++		local_got_refcounts[r_symndx] += 1;
+ 	      }
+-
+-	    sgot->_raw_size += 4;
+ 	    break;
+ 
+-	  case R_ARM_PLT32:
+-	    /* This symbol requires a procedure linkage table entry.  We
+-               actually build the entry in adjust_dynamic_symbol,
+-               because this might be a case of linking PIC code which is
+-               never referenced by a dynamic object, in which case we
+-               don't need to generate a procedure linkage table entry
+-               after all.  */
+-
+-	    /* If this is a local symbol, we resolve it directly without
+-               creating a procedure linkage table entry.  */
+-	    if (h == NULL)
+-	      continue;
+-
+-	    h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
++	  case R_ARM_GOTOFF:
++	  case R_ARM_GOTPC:
++	    if (htab->sgot == NULL)
++	      {
++		if (htab->root.dynobj == NULL)
++		  htab->root.dynobj = abfd;
++		if (!create_got_section (htab->root.dynobj, info))
++		  return FALSE;
++	      }
+ 	    break;
+ 
+ 	  case R_ARM_ABS32:
+ 	  case R_ARM_REL32:
+ 	  case R_ARM_PC24:
++	    if (h != NULL && !info->shared)
++	      {
++		/* If this reloc is in a read-only section, we might
++		   need a copy reloc.  We can't check reliably at this
++		   stage whether the section is read-only, as input
++		   sections have not yet been mapped to output sections.
++		   Tentatively set the flag for now, and correct in
++		   adjust_dynamic_symbol.  */
++		h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
++		
++		/* We may need a .plt entry if the function this reloc
++		   refers to is in a shared lib.  */
++		h->plt.refcount += 1;
++	      }
++
+ 	    /* If we are creating a shared library, and this is a reloc
+                against a global symbol, or a non PC relative reloc
+                against a local symbol, then we need to copy the reloc
+@@ -2784,14 +2987,17 @@
+                possible that DEF_REGULAR is not set now but will be set
+                later (it is never cleared).  We account for that
+                possibility below by storing information in the
+-               pcrel_relocs_copied field of the hash table entry.  */
++               relocs_copied field of the hash table entry.  */
+ 	    if (info->shared
+-	      && (ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
+-	        || (h != NULL
+-		  && (! info->symbolic
+-		    || (h->elf_link_hash_flags
+-		      & ELF_LINK_HASH_DEF_REGULAR) == 0))))
++		&& (sec->flags & SEC_ALLOC) != 0
++		&& (ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
++		    || (h != NULL
++			&& (! info->symbolic
++			    || (h->elf_link_hash_flags
++				& ELF_LINK_HASH_DEF_REGULAR) == 0))))
+ 	      {
++		struct elf32_arm_relocs_copied *p, **head;
++
+ 	        /* When creating a shared object, we must copy these
+                    reloc types into the output file.  We create a reloc
+                    section in dynobj and make room for this reloc.  */
+@@ -2825,45 +3031,49 @@
+ 			    || ! bfd_set_section_alignment (dynobj, sreloc, 2))
+ 			  return FALSE;
+ 		      }
+-		  if (sec->flags & SEC_READONLY)
+-		    info->flags |= DF_TEXTREL;
++
++		    elf_section_data (sec)->sreloc = sreloc;
+ 		  }
+ 
+-	        sreloc->_raw_size += sizeof (Elf32_External_Rel);
+-	        /* If we are linking with -Bsymbolic, and this is a
+-                   global symbol, we count the number of PC relative
+-                   relocations we have entered for this symbol, so that
+-                   we can discard them again if the symbol is later
+-                   defined by a regular object.  Note that this function
+-                   is only called if we are using an elf_i386 linker
+-                   hash table, which means that h is really a pointer to
+-                   an elf_i386_link_hash_entry.  */
+-	        if (h != NULL && info->symbolic
+-		    && ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
++		/* If this is a global symbol, we count the number of
++		   relocations we need for this symbol.  */
++		if (h != NULL)
+ 		  {
+-		    struct elf32_arm_link_hash_entry * eh;
+-		    struct elf32_arm_pcrel_relocs_copied * p;
+-
+-		    eh = (struct elf32_arm_link_hash_entry *) h;
+-
+-		    for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next)
+-		      if (p->section == sreloc)
+-		        break;
+-
++		    head = &((struct elf32_arm_link_hash_entry *) h)->relocs_copied;
++		  }
++		else
++		  {
++		    /* Track dynamic relocs needed for local syms too.
++		       We really need local syms available to do this
++		       easily.  Oh well.  */
++		    
++		    asection *s;
++		    s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
++						   sec, r_symndx);
++		    if (s == NULL)
++		      return FALSE;
++		    
++		    head = ((struct elf32_arm_relocs_copied **)
++			    &elf_section_data (s)->local_dynrel);
++		  }
++		
++		p = *head;
++		if (p == NULL || p->section != sec)
++		  {
++		    bfd_size_type amt = sizeof *p;
++		    p = bfd_alloc (htab->root.dynobj, amt);
+ 		    if (p == NULL)
+-		      {
+-		        p = ((struct elf32_arm_pcrel_relocs_copied *)
+-			     bfd_alloc (dynobj, (bfd_size_type) sizeof * p));
+-		        if (p == NULL)
+-			  return FALSE;
+-		        p->next = eh->pcrel_relocs_copied;
+-		        eh->pcrel_relocs_copied = p;
+-		        p->section = sreloc;
+-		        p->count = 0;
+-		      }
+-
+-		    ++p->count;
++		      return FALSE;
++		    p->next = *head;
++		    *head = p;
++		    p->section = sec;
++		    p->count = 0;
++		    p->pc_count = 0;
+ 		  }
++		
++		p->count += 1;
++		if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
++		  p->pc_count += 1;
+ 	      }
+ 	    break;
+ 
+@@ -3003,71 +3213,29 @@
+   if (h->type == STT_FUNC
+       || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
+     {
+-      /* If we link a program (not a DSO), we'll get rid of unnecessary
+-	 PLT entries; we point to the actual symbols -- even for pic
+-	 relocs, because a program built with -fpic should have the same
+-	 result as one built without -fpic, specifically considering weak
+-	 symbols.
+-	 FIXME: m68k and i386 differ here, for unclear reasons.  */
+-      if (! info->shared
+-	  && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0)
++      if (h->plt.refcount <= 0
++	  || SYMBOL_CALLS_LOCAL (info, h)
++	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
++	      && h->root.type == bfd_link_hash_undefweak))
+ 	{
+ 	  /* This case can occur if we saw a PLT32 reloc in an input
+-	     file, but the symbol was not defined by a dynamic object.
+-	     In such a case, we don't actually need to build a
+-	     procedure linkage table, and we can just do a PC32 reloc
+-	     instead.  */
+-	  BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0);
++	     file, but the symbol was never referred to by a dynamic
++	     object, or if all references were garbage collected.  In
++	     such a case, we don't actually need to build a procedure
++	     linkage table, and we can just do a PC24 reloc instead.  */
++	  h->plt.offset = (bfd_vma) -1;
+ 	  h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+-	  return TRUE;
+-	}
+-
+-      /* Make sure this symbol is output as a dynamic symbol.  */
+-      if (h->dynindx == -1)
+-	{
+-	  if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+-	    return FALSE;
+ 	}
+ 
+-      s = bfd_get_section_by_name (dynobj, ".plt");
+-      BFD_ASSERT (s != NULL);
+-
+-      /* If this is the first .plt entry, make room for the special
+-	 first entry.  */
+-      if (s->_raw_size == 0)
+-	s->_raw_size += PLT_ENTRY_SIZE;
+-
+-      /* If this symbol is not defined in a regular file, and we are
+-	 not generating a shared library, then set the symbol to this
+-	 location in the .plt.  This is required to make function
+-	 pointers compare as equal between the normal executable and
+-	 the shared library.  */
+-      if (! info->shared
+-	  && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+-	{
+-	  h->root.u.def.section = s;
+-	  h->root.u.def.value = s->_raw_size;
+-	}
+-
+-      h->plt.offset = s->_raw_size;
+-
+-      /* Make room for this entry.  */
+-      s->_raw_size += PLT_ENTRY_SIZE;
+-
+-      /* We also need to make an entry in the .got.plt section, which
+-	 will be placed in the .got section by the linker script.  */
+-      s = bfd_get_section_by_name (dynobj, ".got.plt");
+-      BFD_ASSERT (s != NULL);
+-      s->_raw_size += 4;
+-
+-      /* We also need to make an entry in the .rel.plt section.  */
+-
+-      s = bfd_get_section_by_name (dynobj, ".rel.plt");
+-      BFD_ASSERT (s != NULL);
+-      s->_raw_size += sizeof (Elf32_External_Rel);
+-
+       return TRUE;
+     }
++  else
++    /* It's possible that we incorrectly decided a .plt reloc was
++       needed for an R_ARM_PC24 reloc to a non-function sym in
++       check_relocs.  We can't decide accurately between function and
++       non-function syms in check-relocs;  Objects loaded later in
++       the link may change h->type.  So fix it now.  */
++    h->plt.offset = (bfd_vma) -1;
+ 
+   /* If this is a weak symbol, and there is a real definition, the
+      processor independent code will have arranged for us to see the
+@@ -3142,6 +3310,198 @@
+   return TRUE;
+ }
+ 
++/* Allocate space in .plt, .got and associated reloc sections for
++   dynamic relocs.  */
++
++static bfd_boolean
++allocate_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct bfd_link_info *info;
++  struct elf32_arm_link_hash_table *htab;
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_indirect)
++    return TRUE;
++
++  if (h->root.type == bfd_link_hash_warning)
++    /* When warning symbols are created, they **replace** the "real"
++       entry in the hash table, thus we never get to see the real
++       symbol in a hash traversal.  So look at it now.  */
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  info = (struct bfd_link_info *) inf;
++  htab = elf32_arm_hash_table (info);
++
++  if (htab->root.dynamic_sections_created
++      && h->plt.refcount > 0)
++    {
++      /* Make sure this symbol is output as a dynamic symbol.
++	 Undefined weak syms won't yet be marked as dynamic.  */
++      if (h->dynindx == -1
++	  && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
++	{
++	  if (! bfd_elf32_link_record_dynamic_symbol (info, h))
++	    return FALSE;
++	}
++
++      if (info->shared
++	  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
++	{
++	  asection *s = htab->splt;
++
++	  /* If this is the first .plt entry, make room for the special
++	     first entry.  */
++	  if (s->_raw_size == 0)
++	    s->_raw_size += PLT_HEADER_SIZE;
++
++	  h->plt.offset = s->_raw_size;
++
++	  /* If this symbol is not defined in a regular file, and we are
++	     not generating a shared library, then set the symbol to this
++	     location in the .plt.  This is required to make function
++	     pointers compare as equal between the normal executable and
++	     the shared library.  */
++	  if (! info->shared
++	      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
++	    {
++	      h->root.u.def.section = s;
++	      h->root.u.def.value = h->plt.offset;
++	    }
++
++	  /* Make room for this entry.  */
++	  s->_raw_size += PLT_ENTRY_SIZE;
++
++	  /* We also need to make an entry in the .got.plt section, which
++	     will be placed in the .got section by the linker script.  */
++	  htab->sgotplt->_raw_size += 4;
++
++	  /* We also need to make an entry in the .rel.plt section.  */
++	  htab->srelplt->_raw_size += sizeof (Elf32_External_Rel);
++	}
++      else
++	{
++	  h->plt.offset = (bfd_vma) -1;
++	  h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
++	}
++    }
++  else
++    {
++      h->plt.offset = (bfd_vma) -1;
++      h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
++    }
++
++  if (h->got.refcount > 0)
++    {
++      asection *s;
++      bfd_boolean dyn;
++
++      /* Make sure this symbol is output as a dynamic symbol.
++	 Undefined weak syms won't yet be marked as dynamic.  */
++      if (h->dynindx == -1
++	  && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
++	{
++	  if (! bfd_elf32_link_record_dynamic_symbol (info, h))
++	    return FALSE;
++	}
++
++      s = htab->sgot;
++      h->got.offset = s->_raw_size;
++      s->_raw_size += 4;
++      dyn = htab->root.dynamic_sections_created;
++      if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++	   || h->root.type != bfd_link_hash_undefweak)
++	  && (info->shared
++	      || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
++	htab->srelgot->_raw_size += sizeof (Elf32_External_Rel);
++    }
++  else
++    h->got.offset = (bfd_vma) -1;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  if (eh->relocs_copied == NULL)
++    return TRUE;
++
++  /* In the shared -Bsymbolic case, discard space allocated for
++     dynamic pc-relative relocs against symbols which turn out to be
++     defined in regular objects.  For the normal shared case, discard
++     space for pc-relative relocs that have become local due to symbol
++     visibility changes.  */
++
++  if (info->shared)
++    {
++      /* The only reloc that uses pc_count is R_ARM_PC24, which will
++	 appear on a call or on something like ".long foo - .".  We
++	 want calls to protected symbols to resolve directly to the
++	 function rather than going via the plt.  If people want
++	 function pointer comparisons to work as expected then they
++	 should avoid writing assembly like ".long foo - .".  */
++      if (SYMBOL_CALLS_LOCAL (info, h))
++	{
++	  struct elf32_arm_relocs_copied **pp;
++
++	  for (pp = &eh->relocs_copied; (p = *pp) != NULL; )
++	    {
++	      p->count -= p->pc_count;
++	      p->pc_count = 0;
++	      if (p->count == 0)
++		*pp = p->next;
++	      else
++		pp = &p->next;
++	    }
++	}
++
++      /* Also discard relocs on undefined weak syms with non-default
++	 visibility.  */
++      if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
++	  && h->root.type == bfd_link_hash_undefweak)
++	eh->relocs_copied = NULL;
++    }
++  else
++    {
++      /* For the non-shared case, discard space for relocs against
++	 symbols which turn out to need copy relocs or are not
++	 dynamic.  */
++
++      if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
++	  && (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
++	       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
++	      || (htab->root.dynamic_sections_created
++		  && (h->root.type == bfd_link_hash_undefweak
++		      || h->root.type == bfd_link_hash_undefined))))
++	{
++	  /* Make sure this symbol is output as a dynamic symbol.
++	     Undefined weak syms won't yet be marked as dynamic.  */
++	  if (h->dynindx == -1
++	      && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
++	    {
++	      if (! bfd_elf32_link_record_dynamic_symbol (info, h))
++		return FALSE;
++	    }
++
++	  /* If that succeeded, we know we'll be keeping all the
++	     relocs.  */
++	  if (h->dynindx != -1)
++	    goto keep;
++	}
++
++      eh->relocs_copied = NULL;
++
++    keep: ;
++    }
++
++  /* Finally, allocate space.  */
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *sreloc = elf_section_data (p->section)->sreloc;
++      sreloc->_raw_size += p->count * sizeof (Elf32_External_Rel);
++    }
++
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3153,7 +3513,10 @@
+   asection * s;
+   bfd_boolean plt;
+   bfd_boolean relocs;
++  bfd *ibfd;
++  struct elf32_arm_link_hash_table *htab;
+ 
++  htab = elf32_arm_hash_table (info);
+   dynobj = elf_hash_table (info)->dynobj;
+   BFD_ASSERT (dynobj != NULL);
+ 
+@@ -3168,26 +3531,74 @@
+ 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+ 	}
+     }
+-  else
+-    {
+-      /* We may have created entries in the .rel.got section.
+-         However, if we are not creating the dynamic sections, we will
+-         not actually use these entries.  Reset the size of .rel.got,
+-         which will cause it to get stripped from the output file
+-         below.  */
+-      s = bfd_get_section_by_name (dynobj, ".rel.got");
+-      if (s != NULL)
+-	s->_raw_size = 0;
+-    }
+-
+-  /* If this is a -Bsymbolic shared link, then we need to discard all
+-     PC relative relocs against symbols defined in a regular object.
+-     We allocated space for them in the check_relocs routine, but we
+-     will not fill them in in the relocate_section routine.  */
+-  if (info->shared && info->symbolic)
+-    elf32_arm_link_hash_traverse (elf32_arm_hash_table (info),
+-				  elf32_arm_discard_copies,
+-				  (PTR) NULL);
++
++  /* Set up .got offsets for local syms, and space for local dynamic
++     relocs.  */
++  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
++    {
++      bfd_signed_vma *local_got;
++      bfd_signed_vma *end_local_got;
++      char *local_tls_type;
++      bfd_size_type locsymcount;
++      Elf_Internal_Shdr *symtab_hdr;
++      asection *srel;
++
++      if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
++	continue;
++
++      for (s = ibfd->sections; s != NULL; s = s->next)
++	{
++	  struct elf32_arm_relocs_copied *p;
++
++	  for (p = *((struct elf32_arm_relocs_copied **)
++		     &elf_section_data (s)->local_dynrel);
++	       p != NULL;
++	       p = p->next)
++	    {
++	      if (!bfd_is_abs_section (p->section)
++		  && bfd_is_abs_section (p->section->output_section))
++		{
++		  /* Input section has been discarded, either because
++		     it is a copy of a linkonce section or due to
++		     linker script /DISCARD/, so we'll be discarding
++		     the relocs too.  */
++		}
++	      else if (p->count != 0)
++		{
++		  srel = elf_section_data (p->section)->sreloc;
++		  srel->_raw_size += p->count * sizeof (Elf32_External_Rel);
++		  if ((p->section->output_section->flags & SEC_READONLY) != 0)
++		    info->flags |= DF_TEXTREL;
++		}
++	    }
++	}
++
++      local_got = elf_local_got_refcounts (ibfd);
++      if (!local_got)
++	continue;
++
++      symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
++      locsymcount = symtab_hdr->sh_info;
++      end_local_got = local_got + locsymcount;
++      s = htab->sgot;
++      srel = htab->srelgot;
++      for (; local_got < end_local_got; ++local_got, ++local_tls_type)
++	{
++	  if (*local_got > 0)
++	    {
++	      *local_got = s->_raw_size;
++	      s->_raw_size += 4;
++	      if (info->shared)
++		srel->_raw_size += sizeof (Elf32_External_Rel);
++	    }
++	  else
++	    *local_got = (bfd_vma) -1;
++	}
++    }
++
++  /* Allocate global sym .plt and .got entries, and space for global
++     sym dynamic relocs.  */
++  elf_link_hash_traverse (&htab->root, allocate_dynrelocs, (PTR) info);
+ 
+   /* The check_relocs and adjust_dynamic_symbol entry points have
+      determined the sizes of the various dynamic sections.  Allocate
+@@ -3312,33 +3723,6 @@
+   return TRUE;
+ }
+ 
+-/* This function is called via elf32_arm_link_hash_traverse if we are
+-   creating a shared object with -Bsymbolic.  It discards the space
+-   allocated to copy PC relative relocs against symbols which are
+-   defined in regular objects.  We allocated space for them in the
+-   check_relocs routine, but we won't fill them in in the
+-   relocate_section routine.  */
+-
+-static bfd_boolean
+-elf32_arm_discard_copies (h, ignore)
+-     struct elf32_arm_link_hash_entry * h;
+-     PTR ignore ATTRIBUTE_UNUSED;
+-{
+-  struct elf32_arm_pcrel_relocs_copied * s;
+-
+-  if (h->root.root.type == bfd_link_hash_warning)
+-    h = (struct elf32_arm_link_hash_entry *) h->root.root.u.i.link;
+-
+-  /* We only discard relocs for symbols defined in a regular object.  */
+-  if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+-    return TRUE;
+-
+-  for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
+-    s->section->_raw_size -= s->count * sizeof (Elf32_External_Rel);
+-
+-  return TRUE;
+-}
+-
+ /* Finish up dynamic symbol handling.  We set the contents of various
+    dynamic sections here.  */
+ 
+@@ -3362,6 +3746,7 @@
+       bfd_vma got_offset;
+       Elf_Internal_Rela rel;
+       bfd_byte *loc;
++      bfd_vma got_displacement;
+ 
+       /* This symbol has an entry in the procedure linkage table.  Set
+ 	 it up.  */
+@@ -3377,35 +3762,43 @@
+ 	 corresponds to this symbol.  This is the index of this symbol
+ 	 in all the symbols for which we are making plt entries.  The
+ 	 first entry in the procedure linkage table is reserved.  */
+-      plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
++      plt_index = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
+ 
+       /* Get the offset into the .got table of the entry that
+ 	 corresponds to this function.  Each .got entry is 4 bytes.
+ 	 The first three are reserved.  */
+       got_offset = (plt_index + 3) * 4;
+ 
++      /* Calculate the displacement between the PLT slot and the
++	 entry in the GOT.  */
++      got_displacement = (sgot->output_section->vma
++			  + sgot->output_offset
++			  + got_offset
++			  - splt->output_section->vma
++			  - splt->output_offset
++			  - h->plt.offset
++			  - 8);
++
++      BFD_ASSERT ((got_displacement & 0xf0000000) == 0);
++
+       /* Fill in the entry in the procedure linkage table.  */
+-      bfd_put_32 (output_bfd, elf32_arm_plt_entry[0],
++      bfd_put_32 (output_bfd, elf32_arm_plt_entry[0] | ((got_displacement & 0x0ff00000) >> 20),
+ 		  splt->contents + h->plt.offset + 0);
+-      bfd_put_32 (output_bfd, elf32_arm_plt_entry[1],
++      bfd_put_32 (output_bfd, elf32_arm_plt_entry[1] | ((got_displacement & 0x000ff000) >> 12),
+ 		  splt->contents + h->plt.offset + 4);
+-      bfd_put_32 (output_bfd, elf32_arm_plt_entry[2],
++      bfd_put_32 (output_bfd, elf32_arm_plt_entry[2] | (got_displacement & 0x00000fff),
+ 		  splt->contents + h->plt.offset + 8);
+-      bfd_put_32 (output_bfd,
+-		      (sgot->output_section->vma
+-		       + sgot->output_offset
+-		       + got_offset
+-		       - splt->output_section->vma
+-		       - splt->output_offset
+-		       - h->plt.offset - 12),
+-		      splt->contents + h->plt.offset + 12);
++#ifdef FOUR_WORD_PLT
++      bfd_put_32 (output_bfd, elf32_arm_plt_entry[3],
++		  splt->contents + h->plt.offset + 12);
++#endif
+ 
+       /* Fill in the entry in the global offset table.  */
+       bfd_put_32 (output_bfd,
+ 		  (splt->output_section->vma
+ 		   + splt->output_offset),
+ 		  sgot->contents + got_offset);
+-
++      
+       /* Fill in the entry in the .rel.plt section.  */
+       rel.r_offset = (sgot->output_section->vma
+ 		      + sgot->output_offset
+@@ -3446,16 +3839,20 @@
+ 		      + sgot->output_offset
+ 		      + (h->got.offset &~ (bfd_vma) 1));
+ 
+-      /* If this is a -Bsymbolic link, and the symbol is defined
+-	 locally, we just want to emit a RELATIVE reloc.  The entry in
+-	 the global offset table will already have been initialized in
+-	 the relocate_section function.  */
++      /* If this is a static link, or it is a -Bsymbolic link and the
++	 symbol is defined locally or was forced to be local because
++	 of a version file, we just want to emit a RELATIVE reloc.
++	 The entry in the global offset table will already have been
++	 initialized in the relocate_section function.  */
+       if (info->shared
+-	  && (info->symbolic || h->dynindx == -1)
+-	  && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
+-	rel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
++	  && SYMBOL_REFERENCES_LOCAL (info, h))
++	{
++	  BFD_ASSERT((h->got.offset & 1) != 0);
++	  rel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE);
++	}
+       else
+ 	{
++	  BFD_ASSERT((h->got.offset & 1) == 0);
+ 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
+ 	  rel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_GLOB_DAT);
+ 	}
+@@ -3609,10 +4006,26 @@
+       /* Fill in the first entry in the procedure linkage table.  */
+       if (splt->_raw_size > 0)
+ 	{
++	  bfd_vma got_displacement;
++
++	  /* Calculate the displacement between the PLT slot and &GOT[0].  */
++	  got_displacement = (sgot->output_section->vma
++			      + sgot->output_offset
++			      - splt->output_section->vma
++			      - splt->output_offset
++			      - 16);
++
+ 	  bfd_put_32 (output_bfd, elf32_arm_plt0_entry[0], splt->contents +  0);
+ 	  bfd_put_32 (output_bfd, elf32_arm_plt0_entry[1], splt->contents +  4);
+ 	  bfd_put_32 (output_bfd, elf32_arm_plt0_entry[2], splt->contents +  8);
+ 	  bfd_put_32 (output_bfd, elf32_arm_plt0_entry[3], splt->contents + 12);
++#ifdef FOUR_WORD_PLT
++	  /* The displacement value goes in the otherwise-unused last word of
++	     the second entry.  */
++	  bfd_put_32 (output_bfd, got_displacement,        splt->contents + 28);
++#else
++	  bfd_put_32 (output_bfd, got_displacement,        splt->contents + 16);
++#endif
+ 	}
+ 
+       /* UnixWare sets the entsize of .plt to 4, although that doesn't
+@@ -3714,7 +4127,7 @@
+ #define elf_backend_check_relocs                elf32_arm_check_relocs
+ #define elf_backend_relocate_section		elf32_arm_relocate_section
+ #define elf_backend_adjust_dynamic_symbol	elf32_arm_adjust_dynamic_symbol
+-#define elf_backend_create_dynamic_sections	_bfd_elf_create_dynamic_sections
++#define elf_backend_create_dynamic_sections     elf32_arm_create_dynamic_sections
+ #define elf_backend_finish_dynamic_symbol	elf32_arm_finish_dynamic_symbol
+ #define elf_backend_finish_dynamic_sections	elf32_arm_finish_dynamic_sections
+ #define elf_backend_size_dynamic_sections	elf32_arm_size_dynamic_sections
+@@ -3723,7 +4136,9 @@
+ #define elf_backend_object_p			elf32_arm_object_p
+ #define elf_backend_section_flags		elf32_arm_section_flags
+ #define elf_backend_final_write_processing      elf32_arm_final_write_processing
++#define elf_backend_copy_indirect_symbol        elf32_arm_copy_indirect_symbol
+ 
++#define elf_backend_can_refcount    1
+ #define elf_backend_can_gc_sections 1
+ #define elf_backend_plt_readonly    1
+ #define elf_backend_want_got_plt    1
+@@ -3733,7 +4148,7 @@
+ #endif
+ 
+ #define elf_backend_got_header_size	12
+-#define elf_backend_plt_header_size	PLT_ENTRY_SIZE
++#define elf_backend_plt_header_size	PLT_HEADER_SIZE
+ 
+ #include "elf32-target.h"
+ 
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-avr.c binutils-2.14.90.0.7/bfd/elf32-avr.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-avr.c	2003-07-23 09:08:08.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-avr.c	2004-04-20 01:26:12.000000000 -0600
+@@ -750,7 +750,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-cris.c binutils-2.14.90.0.7/bfd/elf32-cris.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-cris.c	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-cris.c	2004-04-20 01:26:12.000000000 -0600
+@@ -847,7 +847,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  symname = (bfd_elf_string_from_elf_section
+ 		     (input_bfd, symtab_hdr->sh_link, sym->st_name));
+@@ -1292,16 +1292,7 @@
+ 		    {
+ 		      long indx;
+ 
+-		      if (h == NULL)
+-			sec = local_sections[r_symndx];
+-		      else
+-			{
+-			  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-				      || (h->root.type
+-					  == bfd_link_hash_defweak));
+-			  sec = h->root.u.def.section;
+-			}
+-		      if (sec != NULL && bfd_is_abs_section (sec))
++		      if (bfd_is_abs_section (sec))
+ 			indx = 0;
+ 		      else if (sec == NULL || sec->owner == NULL)
+ 			{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-fr30.c binutils-2.14.90.0.7/bfd/elf32-fr30.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-fr30.c	2003-07-23 09:08:08.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-fr30.c	2004-04-20 01:26:12.000000000 -0600
+@@ -552,7 +552,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-frv.c binutils-2.14.90.0.7/bfd/elf32-frv.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-frv.c	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-frv.c	2004-04-20 01:26:12.000000000 -0600
+@@ -724,7 +724,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-h8300.c binutils-2.14.90.0.7/bfd/elf32-h8300.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-h8300.c	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-h8300.c	2004-04-20 01:26:12.000000000 -0600
+@@ -435,7 +435,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-hppa.c binutils-2.14.90.0.7/bfd/elf32-hppa.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-hppa.c	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-hppa.c	2004-04-20 01:26:12.000000000 -0600
+@@ -3408,7 +3408,7 @@
+ 	  /* This is a local symbol, h defaults to NULL.  */
+ 	  sym = local_syms + r_symndx;
+ 	  sym_sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-i370.c binutils-2.14.90.0.7/bfd/elf32-i370.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-i370.c	2003-07-23 09:08:08.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-i370.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1210,7 +1210,7 @@
+ 	  sec = local_sections[r_symndx];
+ 	  sym_name = "<local symbol>";
+ 
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	  addend = rel->r_addend;
+ 	}
+       else
+@@ -1363,16 +1363,7 @@
+ 		    {
+ 		      long indx;
+ 
+-		      if (h == NULL)
+-			sec = local_sections[r_symndx];
+-		      else
+-			{
+-			  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-				      || (h->root.type
+-					  == bfd_link_hash_defweak));
+-			  sec = h->root.u.def.section;
+-			}
+-		      if (sec != NULL && bfd_is_abs_section (sec))
++		      if (bfd_is_abs_section (sec))
+ 			indx = 0;
+ 		      else if (sec == NULL || sec->owner == NULL)
+ 			{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-i860.c binutils-2.14.90.0.7/bfd/elf32-i860.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-i860.c	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-i860.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1104,7 +1104,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-m32r.c binutils-2.14.90.0.7/bfd/elf32-m32r.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-m32r.c	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-m32r.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1107,7 +1107,7 @@
+ 	      sec = local_sections[r_symndx];
+ 	      sym_name = "<local symbol>";
+ #if !USE_REL
+-	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	      addend = rel->r_addend;
+ #else
+ 	      /* FIXME: This won't handle local relocations against SEC_MERGE
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-m68k.c binutils-2.14.90.0.7/bfd/elf32-m68k.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-m68k.c	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-m68k.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1403,7 +1403,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+@@ -1657,16 +1657,7 @@
+ 		    {
+ 		      long indx;
+ 
+-		      if (h == NULL)
+-			sec = local_sections[r_symndx];
+-		      else
+-			{
+-			  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-				      || (h->root.type
+-					  == bfd_link_hash_defweak));
+-			  sec = h->root.u.def.section;
+-			}
+-		      if (sec != NULL && bfd_is_abs_section (sec))
++		      if (bfd_is_abs_section (sec))
+ 			indx = 0;
+ 		      else if (sec == NULL || sec->owner == NULL)
+ 			{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-mcore.c binutils-2.14.90.0.7/bfd/elf32-mcore.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-mcore.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-mcore.c	2004-04-20 01:26:12.000000000 -0600
+@@ -467,7 +467,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	  addend = rel->r_addend;
+ 	}
+       else
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-msp430.c binutils-2.14.90.0.7/bfd/elf32-msp430.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-msp430.c	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-msp430.c	2004-04-20 01:26:12.000000000 -0600
+@@ -449,7 +449,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	      (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-openrisc.c binutils-2.14.90.0.7/bfd/elf32-openrisc.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-openrisc.c	2003-07-23 09:08:08.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-openrisc.c	2004-04-20 01:26:12.000000000 -0600
+@@ -375,7 +375,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-ppc.c binutils-2.14.90.0.7/bfd/elf32-ppc.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-ppc.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-ppc.c	2004-04-20 01:26:12.000000000 -0600
+@@ -4727,7 +4727,7 @@
+ 	  sec = local_sections[r_symndx];
+ 	  sym_name = bfd_elf_local_sym_name (input_bfd, sym);
+ 
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+@@ -5455,44 +5455,9 @@
+ 	  break;
+ 
+ 	case R_PPC_RELAX32:
+-	  {
+-	    unsigned long r_symndx;
+-	    Elf_Internal_Sym *sym;
+-	    asection *sym_sec;
+-	    bfd_byte *hit_addr = 0;
+-	    bfd_vma value = 0;
+-
+-	    r_symndx = ELF32_R_SYM (rel->r_info);
+-
+-	    if (r_symndx < symtab_hdr->sh_info)
+-	      {
+-		sym = local_syms + r_symndx;
+-		sym_sec = local_sections[r_symndx];
+-
+-		value = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
+-	      }
+-	    else
+-	      {
+-		bfd_boolean warned;
+-		bfd_boolean unresolved_reloc;
+-
+-		RELOC_FOR_GLOBAL_SYMBOL (h, elf_sym_hashes (input_bfd),
+-					 r_symndx, symtab_hdr,
+-					 value, sym_sec,
+-					 unresolved_reloc, info,
+-					 warned);
+-		if (warned)
+-		  continue;
+-	      }
+-	    hit_addr = contents + rel->r_offset;
+-	    value += rel->r_addend;
+-
+-	    r = ppc_elf_install_value (output_bfd, hit_addr, value, r_type);
+-	    if (r != bfd_reloc_ok)
+-	      break;
+-	    else
+-	      continue;
+-	  }
++	  ppc_elf_install_value (output_bfd, contents + rel->r_offset,
++				 relocation + addend, r_type);
++	  continue;
+ 
+ 	  /* Indirect .sdata relocation.  */
+ 	case R_PPC_EMB_SDAI16:
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-s390.c binutils-2.14.90.0.7/bfd/elf32-s390.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-s390.c	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-s390.c	2004-04-20 01:26:12.000000000 -0600
+@@ -2327,7 +2327,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-sh.c binutils-2.14.90.0.7/bfd/elf32-sh.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-sh.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-sh.c	2004-04-20 01:26:12.000000000 -0600
+@@ -4805,7 +4805,7 @@
+ 	    }
+ 	  else if (! howto->partial_inplace)
+ 	    {
+-	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	      addend = rel->r_addend;
+ 	    }
+ 	  else if ((sec->flags & SEC_MERGE)
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-sparc.c binutils-2.14.90.0.7/bfd/elf32-sparc.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-sparc.c	2003-08-21 09:28:48.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-sparc.c	2004-04-20 01:26:12.000000000 -0600
+@@ -2182,7 +2182,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+@@ -2459,16 +2459,8 @@
+ 
+ 		      if (is_plt)
+ 			sec = htab->splt;
+-		      else if (h == NULL)
+-			sec = local_sections[r_symndx];
+-		      else
+-			{
+-			  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-				      || (h->root.type
+-					  == bfd_link_hash_defweak));
+-			  sec = h->root.u.def.section;
+-			}
+-		      if (sec != NULL && bfd_is_abs_section (sec))
++
++		      if (bfd_is_abs_section (sec))
+ 			indx = 0;
+ 		      else if (sec == NULL || sec->owner == NULL)
+ 			{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-v850.c binutils-2.14.90.0.7/bfd/elf32-v850.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-v850.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-v850.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1681,7 +1681,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ #if 0
+ 	  {
+ 	    char * name;
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-vax.c binutils-2.14.90.0.7/bfd/elf32-vax.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-vax.c	2003-08-21 09:28:48.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-vax.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1483,7 +1483,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+@@ -1737,16 +1737,7 @@
+ 		    {
+ 		      long indx;
+ 
+-		      if (h == NULL)
+-			sec = local_sections[r_symndx];
+-		      else
+-			{
+-			  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-				      || (h->root.type
+-					  == bfd_link_hash_defweak));
+-			  sec = h->root.u.def.section;
+-			}
+-		      if (sec != NULL && bfd_is_abs_section (sec))
++		      if (bfd_is_abs_section (sec))
+ 			indx = 0;
+ 		      else if (sec == NULL || sec->owner == NULL)
+ 			{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-xstormy16.c binutils-2.14.90.0.7/bfd/elf32-xstormy16.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-xstormy16.c	2003-07-23 09:08:09.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf32-xstormy16.c	2004-04-20 01:26:12.000000000 -0600
+@@ -845,7 +845,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf32-xtensa.c binutils-2.14.90.0.7/bfd/elf32-xtensa.c
+--- binutils-2.14.90.0.7.orig/bfd/elf32-xtensa.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf32-xtensa.c	2004-04-20 01:26:12.000000000 -0600
+@@ -2004,7 +2004,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-alpha.c binutils-2.14.90.0.7/bfd/elf64-alpha.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-alpha.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf64-alpha.c	2004-04-20 01:26:12.000000000 -0600
+@@ -4394,9 +4394,11 @@
+ 
+       if (r_symndx < symtab_hdr->sh_info)
+ 	{
++	  asection *msec;
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  value = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  msec = sec;
++	  value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel);
+ 
+ 	  /* If this is a tp-relative relocation against sym 0,
+ 	     this is hackery from relax_section.  Force the value to
+@@ -4424,7 +4426,6 @@
+ 	      && !gotent->reloc_xlated)
+ 	    {
+ 	      struct alpha_elf_got_entry *ent;
+-	      asection *msec;
+ 
+ 	      for (ent = gotent; ent; ent = ent->next)
+ 		{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-hppa.c binutils-2.14.90.0.7/bfd/elf64-hppa.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-hppa.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf64-hppa.c	2004-04-20 01:26:12.000000000 -0600
+@@ -173,7 +173,7 @@
+ 	   PTR info));
+ 
+ static const char *get_dyn_name
+-  PARAMS ((asection *, struct elf_link_hash_entry *,
++  PARAMS ((bfd *, struct elf_link_hash_entry *,
+ 	   const Elf_Internal_Rela *, char **, size_t *));
+ 
+ /* This must follow the definitions of the various derived linker
+@@ -446,13 +446,14 @@
+    allocate memory as necessary, possibly reusing PBUF/PLEN.  */
+ 
+ static const char *
+-get_dyn_name (sec, h, rel, pbuf, plen)
+-     asection *sec;
++get_dyn_name (abfd, h, rel, pbuf, plen)
++     bfd *abfd;
+      struct elf_link_hash_entry *h;
+      const Elf_Internal_Rela *rel;
+      char **pbuf;
+      size_t *plen;
+ {
++  asection *sec = abfd->sections;
+   size_t nlen, tlen;
+   char *buf;
+   size_t len;
+@@ -858,7 +859,7 @@
+ 	continue;
+ 
+       /* Collect a canonical name for this address.  */
+-      addr_name = get_dyn_name (sec, h, rel, &buf, &buf_len);
++      addr_name = get_dyn_name (abfd, h, rel, &buf, &buf_len);
+ 
+       /* Collect the canonical entry data for this address.  */
+       dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-mmix.c binutils-2.14.90.0.7/bfd/elf64-mmix.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-mmix.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf64-mmix.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1472,7 +1472,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-ppc.c binutils-2.14.90.0.7/bfd/elf64-ppc.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-ppc.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf64-ppc.c	2004-04-20 01:26:12.000000000 -0600
+@@ -7385,7 +7385,7 @@
+ 	  sec = local_sections[r_symndx];
+ 	  sym_name = bfd_elf_local_sym_name (input_bfd, sym);
+ 	  sym_type = ELF64_ST_TYPE (sym->st_info);
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	  if (elf_section_data (sec) != NULL)
+ 	    {
+ 	      long *opd_sym_adjust;
+@@ -8178,7 +8178,9 @@
+ 	  relocation = TOCstart;
+ 	  if (r_symndx == 0)
+ 	    relocation += htab->stub_group[input_section->id].toc_off;
+-	  else if (sec != NULL && !unresolved_reloc)
++	  else if (unresolved_reloc)
++	    ;
++	  else if (sec != NULL && sec->id <= htab->top_id)
+ 	    relocation += htab->stub_group[sec->id].toc_off;
+ 	  else
+ 	    unresolved_reloc = TRUE;
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-s390.c binutils-2.14.90.0.7/bfd/elf64-s390.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-s390.c	2003-08-21 09:28:48.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf64-s390.c	2004-04-20 01:26:12.000000000 -0600
+@@ -2297,7 +2297,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-sh64.c binutils-2.14.90.0.7/bfd/elf64-sh64.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-sh64.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elf64-sh64.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1582,7 +1582,7 @@
+ 	    }
+ 	  else if (! howto->partial_inplace)
+ 	    {
+-	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	      relocation |= ((sym->st_other & STO_SH5_ISA32) != 0);
+ 	    }
+ 	  else if ((sec->flags & SEC_MERGE)
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-sparc.c binutils-2.14.90.0.7/bfd/elf64-sparc.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-sparc.c	2003-08-21 09:28:48.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf64-sparc.c	2004-04-20 01:26:12.000000000 -0600
+@@ -2070,7 +2070,7 @@
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+@@ -2247,16 +2247,8 @@
+ 
+ 			if (is_plt)
+ 			  sec = splt;
+-			else if (h == NULL)
+-			  sec = local_sections[r_symndx];
+-			else
+-			  {
+-			    BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-					|| (h->root.type
+-					    == bfd_link_hash_defweak));
+-			    sec = h->root.u.def.section;
+-			  }
+-			if (sec != NULL && bfd_is_abs_section (sec))
++
++			if (bfd_is_abs_section (sec))
+ 			  indx = 0;
+ 			else if (sec == NULL || sec->owner == NULL)
+ 			  {
+diff -urN binutils-2.14.90.0.7.orig/bfd/elf64-x86-64.c binutils-2.14.90.0.7/bfd/elf64-x86-64.c
+--- binutils-2.14.90.0.7.orig/bfd/elf64-x86-64.c	2003-08-21 09:28:48.000000000 -0600
++++ binutils-2.14.90.0.7/bfd/elf64-x86-64.c	2004-04-20 01:26:12.000000000 -0600
+@@ -1823,7 +1823,7 @@
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections[r_symndx];
+ 
+-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
++	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	}
+       else
+ 	{
+@@ -2048,16 +2048,7 @@
+ 		    {
+ 		      long sindx;
+ 
+-		      if (h == NULL)
+-			sec = local_sections[r_symndx];
+-		      else
+-			{
+-			  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+-				      || (h->root.type
+-					  == bfd_link_hash_defweak));
+-			  sec = h->root.u.def.section;
+-			}
+-		      if (sec != NULL && bfd_is_abs_section (sec))
++		      if (bfd_is_abs_section (sec))
+ 			sindx = 0;
+ 		      else if (sec == NULL || sec->owner == NULL)
+ 			{
+diff -urN binutils-2.14.90.0.7.orig/bfd/elfxx-ia64.c binutils-2.14.90.0.7/bfd/elfxx-ia64.c
+--- binutils-2.14.90.0.7.orig/bfd/elfxx-ia64.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/elfxx-ia64.c	2004-04-20 01:26:12.000000000 -0600
+@@ -3849,9 +3849,11 @@
+       if (r_symndx < symtab_hdr->sh_info)
+ 	{
+ 	  /* Reloc against local symbol.  */
++	  asection *msec;
+ 	  sym = local_syms + r_symndx;
+ 	  sym_sec = local_sections[r_symndx];
+-	  value = _bfd_elf_rela_local_sym (output_bfd, sym, sym_sec, rel);
++	  msec = sym_sec;
++	  value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel);
+ 	  if ((sym_sec->flags & SEC_MERGE)
+ 	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
+ 	      && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
+@@ -3862,7 +3864,6 @@
+ 	      if (loc_h && ! loc_h->sec_merge_done)
+ 		{
+ 		  struct elfNN_ia64_dyn_sym_info *dynent;
+-		  asection *msec;
+ 
+ 		  for (dynent = loc_h->info; dynent; dynent = dynent->next)
+ 		    {
+diff -urN binutils-2.14.90.0.7.orig/bfd/opncls.c binutils-2.14.90.0.7/bfd/opncls.c
+--- binutils-2.14.90.0.7.orig/bfd/opncls.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/opncls.c	2004-04-20 01:26:11.000000000 -0600
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
+diff -urN binutils-2.14.90.0.7.orig/binutils/objcopy.c binutils-2.14.90.0.7/binutils/objcopy.c
+--- binutils-2.14.90.0.7.orig/binutils/objcopy.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/binutils/objcopy.c	2004-04-20 01:26:12.000000000 -0600
+@@ -27,6 +27,7 @@
+ #include "libiberty.h"
+ #include "budbg.h"
+ #include "filenames.h"
++#include "elf-bfd.h"
+ #include <sys/stat.h>
+ 
+ /* A list of symbols to explicitly strip out, or to keep.  A linked
+@@ -385,6 +386,7 @@
+   -g --strip-debug                 Remove all debugging symbols & sections\n\
+      --strip-unneeded              Remove all symbols not needed by relocations\n\
+   -N --strip-symbol <name>         Do not copy symbol <name>\n\
++     --only-keep-debug             Strip everything but the debug information\n\
+   -K --keep-symbol <name>          Only copy symbol <name>\n\
+   -L --localize-symbol <name>      Force symbol <name> to be marked as a local\n\
+   -G --keep-global-symbol <name>   Localize all symbols except <name>\n\
+@@ -457,6 +459,7 @@
+   -s --strip-all                   Remove all symbol and relocation information\n\
+   -g -S -d --strip-debug           Remove all debugging symbols & sections\n\
+      --strip-unneeded              Remove all symbols not needed by relocations\n\
++     --only-keep-debug             Strip everything but the debug information\n\
+   -N --strip-symbol=<name>         Do not copy symbol <name>\n\
+   -K --keep-symbol=<name>          Only copy symbol <name>\n\
+   -x --discard-all                 Remove all non-global symbols\n\
+@@ -734,7 +737,7 @@
+ 	return FALSE;
+     }
+ 
+-  return strip_symbols == STRIP_NONDEBUG ? TRUE : FALSE;
++  return FALSE;
+ }
+ 
+ /* Choose which symbol entries to copy; put the result in OSYMS.
+@@ -1806,6 +1809,13 @@
+ 
+   if (p != NULL && p->set_flags)
+     flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
++  else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
++    {
++      flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
++      if (obfd->xvec->flavour == bfd_target_elf_flavour)
++	elf_section_type (osection) = SHT_NOBITS;
++    }
++
+   if (!bfd_set_section_flags (obfd, osection, flags))
+     {
+       err = _("flags");
+@@ -1926,6 +1936,8 @@
+ 	}
+ 
+       bfd_set_reloc (obfd, osection, relcount == 0 ? NULL : relpp, relcount);
++      if (relcount == 0)
++	free (relpp);
+     }
+ 
+   isection->_cooked_size = isection->_raw_size;
+diff -urN binutils-2.14.90.0.7.orig/binutils/readelf.c binutils-2.14.90.0.7/binutils/readelf.c
+--- binutils-2.14.90.0.7.orig/binutils/readelf.c	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/binutils/readelf.c	2004-04-20 01:26:12.000000000 -0600
+@@ -6055,7 +6055,7 @@
+ 
+   bytes = section->sh_size;
+ 
+-  if (bytes == 0)
++  if (bytes == 0 || section->sh_type == SHT_NOBITS)
+     {
+       printf (_("\nSection '%s' has no data to dump.\n"),
+ 	      SECTION_NAME (section));
+diff -urN binutils-2.14.90.0.7.orig/gprof/gprof.texi binutils-2.14.90.0.7/gprof/gprof.texi
+--- binutils-2.14.90.0.7.orig/gprof/gprof.texi	2002-08-01 18:49:32.000000000 -0600
++++ binutils-2.14.90.0.7/gprof/gprof.texi	2004-04-20 01:26:11.000000000 -0600
+@@ -137,6 +137,10 @@
+ If more than one profile file is specified, the @code{gprof}
+ output shows the sum of the profile information in the given profile files.
+ 
++If you use gcc 2.95.x or 3.0 to compile your binaries, you may need
++to add the @samp{-fprofile-arcs} to the compile command line in order
++for the call graphs to be properly stored in gmon.out.
++
+ @code{Gprof} calculates the amount of time spent in each routine.
+ Next, these times are propagated along the edges of the call graph.
+ Cycles are discovered, and calls into a cycle are made to share the time
+@@ -181,7 +185,7 @@
+ @c man end
+ 
+ @c man begin SEEALSO
+-monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
++profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
+ 
+ ``An Execution Profiler for Modular Programs'',
+ by S. Graham, P. Kessler, M. McKusick;
+@@ -267,6 +271,11 @@
+ options.  The same option, @samp{-pg}, alters either compilation or linking
+ to do what is necessary for profiling.  Here are examples:
+ 
++If you use gcc 2.95.x or 3.0.x, you may need to add the
++@samp{-fprofile-arcs} option to the compile line along with @samp{-pg}
++in order to allow the call-graphs to be properly included in the gmon.out
++file.
++
+ @example
+ cc -g -c myprog.c utils.c -pg
+ cc -o myprog myprog.o utils.o -pg
+diff -urN binutils-2.14.90.0.7.orig/ld/Makefile.am binutils-2.14.90.0.7/ld/Makefile.am
+--- binutils-2.14.90.0.7.orig/ld/Makefile.am	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/ld/Makefile.am	2004-04-20 01:26:11.000000000 -0600
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urN binutils-2.14.90.0.7.orig/ld/Makefile.in binutils-2.14.90.0.7/ld/Makefile.in
+--- binutils-2.14.90.0.7.orig/ld/Makefile.in	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/ld/Makefile.in	2004-04-20 01:26:11.000000000 -0600
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urN binutils-2.14.90.0.7.orig/ld/emultempl/elf32.em binutils-2.14.90.0.7/ld/emultempl/elf32.em
+--- binutils-2.14.90.0.7.orig/ld/emultempl/elf32.em	2003-08-21 09:28:48.000000000 -0600
++++ binutils-2.14.90.0.7/ld/emultempl/elf32.em	2004-04-20 01:26:11.000000000 -0600
+@@ -679,6 +679,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, l->name,
+ 						      force))
+ 		break;
+@@ -855,6 +857,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf${ELFSIZE}_size_dynamic_sections
+ 	 (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
+diff -urN binutils-2.14.90.0.7.orig/ltmain.sh binutils-2.14.90.0.7/ltmain.sh
+--- binutils-2.14.90.0.7.orig/ltmain.sh	2002-03-22 15:06:16.000000000 -0700
++++ binutils-2.14.90.0.7/ltmain.sh	2004-04-20 01:26:12.000000000 -0600
+@@ -4413,6 +4413,10 @@
+       # LD_LIBRARY_PATH before the program is installed.
+       $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+       $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
++      if test -n "$linkname"; then
++        $show "(cd $output_objdir && $rm ../$linkname && $LN_S $output_objdir/$linkname ../$linkname)"
++        $run eval '(cd $output_objdir && $rm ../$linkname && $LN_S $output_objdir/$linkname ../$linkname)' || exit $?
++      fi
+       ;;
+     esac
+     exit 0
+diff -urN binutils-2.14.90.0.7.orig/opcodes/Makefile.am binutils-2.14.90.0.7/opcodes/Makefile.am
+--- binutils-2.14.90.0.7.orig/opcodes/Makefile.am	2003-10-29 10:37:49.000000000 -0700
++++ binutils-2.14.90.0.7/opcodes/Makefile.am	2004-04-20 01:26:12.000000000 -0600
+@@ -284,7 +284,7 @@
+ 
+ libopcodes_la_SOURCES =  dis-buf.c disassemble.c dis-init.c
+ libopcodes_la_DEPENDENCIES = $(OFILES) ../bfd/libbfd.la
+-libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ ../bfd/libbfd.la
++libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ -L../bfd -lbfd
+ libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+ 
+ # libtool will build .libs/libopcodes.a.  We create libopcodes.a in
+diff -urN binutils-2.14.90.0.7.orig/opcodes/Makefile.in binutils-2.14.90.0.7/opcodes/Makefile.in
+--- binutils-2.14.90.0.7.orig/opcodes/Makefile.in	2003-10-29 10:37:49.000000000 -0700
++++ binutils-2.14.90.0.7/opcodes/Makefile.in	2004-04-20 01:26:12.000000000 -0600
+@@ -394,7 +394,7 @@
+ 
+ libopcodes_la_SOURCES = dis-buf.c disassemble.c dis-init.c
+ libopcodes_la_DEPENDENCIES = $(OFILES) ../bfd/libbfd.la
+-libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ ../bfd/libbfd.la
++libopcodes_la_LIBADD = $(OFILES) @WIN32LIBADD@ -L../bfd -lbfd
+ libopcodes_la_LDFLAGS = -release $(VERSION) @WIN32LDFLAGS@
+ 
+ # libtool will build .libs/libopcodes.a.  We create libopcodes.a in
+@@ -593,7 +593,7 @@
+ all-recursive install-data-recursive install-exec-recursive \
+ installdirs-recursive install-recursive uninstall-recursive install-info-recursive \
+ check-recursive installcheck-recursive info-recursive dvi-recursive:
+-	@set fnord $(MAKEFLAGS); amf=$$2; \
++	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	target=`echo $@ | sed s/-recursive//`; \
+ 	list='$(SUBDIRS)'; for subdir in $$list; do \
+@@ -613,7 +613,7 @@
+ 
+ mostlyclean-recursive clean-recursive distclean-recursive \
+ maintainer-clean-recursive:
+-	@set fnord $(MAKEFLAGS); amf=$$2; \
++	@set fnord $$MAKEFLAGS; amf=$$2; \
+ 	dot_seen=no; \
+ 	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ 	  rev="$$subdir $$rev"; \
+diff -urN binutils-2.14.90.0.7.orig/opcodes/alpha-opc.c binutils-2.14.90.0.7/opcodes/alpha-opc.c
+--- binutils-2.14.90.0.7.orig/opcodes/alpha-opc.c	2003-01-21 11:21:34.000000000 -0700
++++ binutils-2.14.90.0.7/opcodes/alpha-opc.c	2004-04-20 01:26:11.000000000 -0600
+@@ -1105,7 +1105,8 @@
+   { "wmb",		MFC(0x18,0x4400), BASE, ARG_NONE },
+   { "fetch",		MFC(0x18,0x8000), BASE, { ZA, PRB } },
+   { "fetch_m",		MFC(0x18,0xA000), BASE, { ZA, PRB } },
+-  { "rpcc",		MFC(0x18,0xC000), BASE, { RA } },
++  { "rpcc",		MFC(0x18,0xC000), BASE, { RA, ZB } },
++  { "rpcc",		MFC(0x18,0xC000), BASE, { RA, RB } },	/* ev6 una */
+   { "rc",		MFC(0x18,0xE000), BASE, { RA } },
+   { "ecb",		MFC(0x18,0xE800), BASE, { ZA, PRB } },	/* ev56 una */
+   { "rs",		MFC(0x18,0xF000), BASE, { RA } },
+diff -urN binutils-2.14.90.0.7.orig/opcodes/m68k-opc.c binutils-2.14.90.0.7/opcodes/m68k-opc.c
+--- binutils-2.14.90.0.7.orig/opcodes/m68k-opc.c	2003-10-29 10:37:49.000000000 -0700
++++ binutils-2.14.90.0.7/opcodes/m68k-opc.c	2004-04-20 01:26:12.000000000 -0600
+@@ -847,15 +847,15 @@
+ {"fmoved",	two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
+ {"fmovel",	two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+ {"fmovel",	two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
++/* FIXME: the next two variants should not permit moving an address
++   register to anything but the floating point instruction register.  */
++{"fmovel",	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
++{"fmovel",	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
+ {"fmovel",	two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+ {"fmovel",	two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
+   /* Move the FP control registers */
+ {"fmovel",	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
+ {"fmovel",	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
+-/* FIXME: the next two variants should not permit moving an address
+-   register to anything but the floating point instruction register.  */
+-{"fmovel",	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
+-{"fmovel",	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
+ {"fmovep",	two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
+ {"fmovep",	two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
+ {"fmovep",	two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.14.90.0.7/100-uclibc-conf.patch
new file mode 100644
index 0000000000..6e36af2298
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.7/100-uclibc-conf.patch
@@ -0,0 +1,646 @@
+diff -urN binutils-2.14.90.0.7.orig/bfd/config.bfd binutils-2.14.90.0.7/bfd/config.bfd
+--- binutils-2.14.90.0.7.orig/bfd/config.bfd	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/config.bfd	2004-04-20 01:37:12.000000000 -0600
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-linux-uclibc* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -214,7 +214,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -222,7 +222,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu)
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux* | arm*-*-linux-uclibc* | arm-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+@@ -355,7 +355,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -366,7 +366,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-netbsd* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -488,7 +488,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -502,7 +502,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -662,7 +662,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -929,7 +929,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -961,8 +962,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1110,7 +1111,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1157,7 +1158,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+diff -urN binutils-2.14.90.0.7.orig/bfd/configure binutils-2.14.90.0.7/bfd/configure
+--- binutils-2.14.90.0.7.orig/bfd/configure	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/configure	2004-04-20 01:32:29.000000000 -0600
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5388,7 +5393,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.7.orig/bfd/configure.in binutils-2.14.90.0.7/bfd/configure.in
+--- binutils-2.14.90.0.7.orig/bfd/configure.in	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/bfd/configure.in	2004-04-20 01:32:29.000000000 -0600
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -312,7 +312,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.7.orig/config.sub binutils-2.14.90.0.7/config.sub
+--- binutils-2.14.90.0.7.orig/config.sub	2003-08-21 09:28:47.000000000 -0600
++++ binutils-2.14.90.0.7/config.sub	2004-04-20 01:32:29.000000000 -0600
+@@ -118,7 +118,7 @@
+ # 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1131,7 +1131,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN binutils-2.14.90.0.7.orig/configure binutils-2.14.90.0.7/configure
+--- binutils-2.14.90.0.7.orig/configure	2003-10-29 10:38:23.000000000 -0700
++++ binutils-2.14.90.0.7/configure	2004-04-20 01:32:29.000000000 -0600
+@@ -1276,6 +1276,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.7.orig/configure.in binutils-2.14.90.0.7/configure.in
+--- binutils-2.14.90.0.7.orig/configure.in	2003-10-29 10:38:20.000000000 -0700
++++ binutils-2.14.90.0.7/configure.in	2004-04-20 01:32:29.000000000 -0600
+@@ -515,6 +515,19 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    build_modules=
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.7.orig/demangler/configure binutils-2.14.90.0.7/demangler/configure
+--- binutils-2.14.90.0.7.orig/demangler/configure	2003-10-29 10:38:20.000000000 -0700
++++ binutils-2.14.90.0.7/demangler/configure	2004-04-20 01:32:29.000000000 -0600
+@@ -1380,6 +1380,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.7.orig/gas/configure binutils-2.14.90.0.7/gas/configure
+--- binutils-2.14.90.0.7.orig/gas/configure	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/gas/configure	2004-04-20 01:37:58.000000000 -0600
+@@ -3215,6 +3215,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4028,6 +4033,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4044,6 +4050,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4058,6 +4065,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4114,7 +4122,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4175,6 +4185,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4201,6 +4212,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -4257,7 +4269,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
+-      ppc-*-linux-gnu*)			fmt=elf em=linux
++      ppc-*-linux-uclibc* | ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+ 		*)    { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5
+@@ -4286,7 +4298,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4319,6 +4333,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.7.orig/gas/configure.in binutils-2.14.90.0.7/gas/configure.in
+--- binutils-2.14.90.0.7.orig/gas/configure.in	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/gas/configure.in	2004-04-20 01:38:23.000000000 -0600
+@@ -192,6 +192,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -208,6 +209,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -222,6 +224,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -278,7 +281,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -332,6 +337,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -358,6 +364,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -412,7 +419,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
+-      ppc-*-linux-gnu*)			fmt=elf em=linux
++      ppc-*-linux-uclibc* | ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+ 		*)    AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
+@@ -434,7 +441,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -467,6 +476,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.7.orig/ld/configure binutils-2.14.90.0.7/ld/configure
+--- binutils-2.14.90.0.7.orig/ld/configure	2003-05-05 15:46:49.000000000 -0600
++++ binutils-2.14.90.0.7/ld/configure	2004-04-20 01:32:29.000000000 -0600
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.7.orig/ld/configure.tgt binutils-2.14.90.0.7/ld/configure.tgt
+--- binutils-2.14.90.0.7.orig/ld/configure.tgt	2003-10-29 10:37:48.000000000 -0700
++++ binutils-2.14.90.0.7/ld/configure.tgt	2004-04-20 01:32:29.000000000 -0600
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -125,7 +128,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -149,14 +152,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -256,10 +261,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -360,7 +368,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -376,9 +385,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -422,16 +431,20 @@
+ mips*-*-rtems*)		targ_emul=elf32ebmip ;;
+ mips*el-*-vxworks*)	targ_emul=elf32elmip ;;
+ mips*-*-vxworks*)	targ_emul=elf32ebmip ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*) \
++			targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*) \
++			targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -454,6 +467,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.14.90.0.7.orig/libtool.m4 binutils-2.14.90.0.7/libtool.m4
+--- binutils-2.14.90.0.7.orig/libtool.m4	2003-05-05 15:46:46.000000000 -0600
++++ binutils-2.14.90.0.7/libtool.m4	2004-04-20 01:32:29.000000000 -0600
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.14.90.0.7.orig/ltconfig binutils-2.14.90.0.7/ltconfig
+--- binutils-2.14.90.0.7.orig/ltconfig	2003-10-29 10:37:47.000000000 -0700
++++ binutils-2.14.90.0.7/ltconfig	2004-04-20 01:32:29.000000000 -0600
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/200-build_modules.patch b/openwrt/toolchain/binutils/2.14.90.0.7/200-build_modules.patch
new file mode 100644
index 0000000000..e9f8e75a89
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.7/200-build_modules.patch
@@ -0,0 +1,31 @@
+Get around an odd build failure.
+diff -urN binutils-2.14.90.0.6/configure binutils-2.14.90.0.6-uClibc/configure
+--- binutils-2.14.90.0.6/configure	2003-08-21 10:29:32.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure	2004-01-07 05:43:40.000000000 -0600
+@@ -906,6 +906,11 @@
+ fi
+ 
+ 
++case "$target" in
++  *-*-*-uclibc*)
++    build_modules=
++    ;;
++esac
+ ################################################################################
+ 
+ srcname="gnu development package"
+diff -urN binutils-2.14.90.0.6/configure.in binutils-2.14.90.0.6-uClibc/configure.in
+--- binutils-2.14.90.0.6/configure.in	2003-08-21 10:29:30.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure.in	2004-01-07 05:44:02.000000000 -0600
+@@ -178,6 +178,11 @@
+ fi
+ 
+ 
++case "$target" in
++  *-*-*-uclibc*)
++    build_modules=
++    ;;
++esac
+ ################################################################################
+ 
+ srcname="gnu development package"
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch b/openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch
new file mode 100644
index 0000000000..dc67d3c4e3
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.7/210-cflags.patch
@@ -0,0 +1,32 @@
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
+@@ -55,10 +55,10 @@
+ MKDOC = chew$(EXEEXT_FOR_BUILD)
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
+@@ -469,10 +469,10 @@
+ 
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
diff --git a/openwrt/toolchain/binutils/2.14.90.0.7/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.14.90.0.7/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.7/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.14.90.0.8/001-debian.patch b/openwrt/toolchain/binutils/2.14.90.0.8/001-debian.patch
new file mode 100644
index 0000000000..780823542a
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.8/001-debian.patch
@@ -0,0 +1,142 @@
+diff -urN binutils-2.14.90.0.8-dist/bfd/elf64-alpha.c binutils-2.14.90.0.8/bfd/elf64-alpha.c
+--- binutils-2.14.90.0.8-dist/bfd/elf64-alpha.c	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.14.90.0.8/bfd/elf64-alpha.c	2004-02-11 03:42:05.000000000 -0600
+@@ -4144,9 +4144,12 @@
+ 
+   loc = srel->contents;
+   loc += srel->reloc_count++ * sizeof (Elf64_External_Rela);
+-  bfd_elf64_swap_reloca_out (abfd, &outrel, loc);
+-  BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
+-	      <= srel->_cooked_size);
++  if (loc)
++    {
++      bfd_elf64_swap_reloca_out (abfd, &outrel, loc);
++      BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
++		  <= srel->_cooked_size);
++    }
+ }
+ 
+ /* Relocate an Alpha ELF section for a relocatable link.
+diff -urN binutils-2.14.90.0.8-dist/bfd/opncls.c binutils-2.14.90.0.8/bfd/opncls.c
+--- binutils-2.14.90.0.8-dist/bfd/opncls.c	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.14.90.0.8/bfd/opncls.c	2004-02-11 03:42:01.000000000 -0600
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
+diff -urN binutils-2.14.90.0.8-dist/gprof/gprof.texi binutils-2.14.90.0.8/gprof/gprof.texi
+--- binutils-2.14.90.0.8-dist/gprof/gprof.texi	2004-01-14 15:07:51.000000000 -0600
++++ binutils-2.14.90.0.8/gprof/gprof.texi	2004-02-11 03:42:01.000000000 -0600
+@@ -138,6 +138,10 @@
+ If more than one profile file is specified, the @code{gprof}
+ output shows the sum of the profile information in the given profile files.
+ 
++If you use gcc 2.95.x or 3.0 to compile your binaries, you may need
++to add the @samp{-fprofile-arcs} to the compile command line in order
++for the call graphs to be properly stored in gmon.out.
++
+ @code{Gprof} calculates the amount of time spent in each routine.
+ Next, these times are propagated along the edges of the call graph.
+ Cycles are discovered, and calls into a cycle are made to share the time
+@@ -182,7 +186,7 @@
+ @c man end
+ 
+ @c man begin SEEALSO
+-monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
++profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
+ 
+ ``An Execution Profiler for Modular Programs'',
+ by S. Graham, P. Kessler, M. McKusick;
+@@ -268,6 +272,11 @@
+ options.  The same option, @samp{-pg}, alters either compilation or linking
+ to do what is necessary for profiling.  Here are examples:
+ 
++If you use gcc 2.95.x or 3.0.x, you may need to add the
++@samp{-fprofile-arcs} option to the compile line along with @samp{-pg}
++in order to allow the call-graphs to be properly included in the gmon.out
++file.
++
+ @example
+ cc -g -c myprog.c utils.c -pg
+ cc -o myprog myprog.o utils.o -pg
+diff -urN binutils-2.14.90.0.8-dist/ld/Makefile.am binutils-2.14.90.0.8/ld/Makefile.am
+--- binutils-2.14.90.0.8-dist/ld/Makefile.am	2004-01-14 15:07:52.000000000 -0600
++++ binutils-2.14.90.0.8/ld/Makefile.am	2004-02-11 03:42:01.000000000 -0600
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urN binutils-2.14.90.0.8-dist/ld/Makefile.in binutils-2.14.90.0.8/ld/Makefile.in
+--- binutils-2.14.90.0.8-dist/ld/Makefile.in	2004-01-14 15:07:52.000000000 -0600
++++ binutils-2.14.90.0.8/ld/Makefile.in	2004-02-11 03:42:01.000000000 -0600
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urN binutils-2.14.90.0.8-dist/ld/emultempl/elf32.em binutils-2.14.90.0.8/ld/emultempl/elf32.em
+--- binutils-2.14.90.0.8-dist/ld/emultempl/elf32.em	2004-01-14 15:07:53.000000000 -0600
++++ binutils-2.14.90.0.8/ld/emultempl/elf32.em	2004-02-11 03:42:01.000000000 -0600
+@@ -671,6 +671,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, l->name,
+ 						      force))
+ 		break;
+@@ -850,6 +852,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf${ELFSIZE}_size_dynamic_sections
+ 	 (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
+diff -urN binutils-2.14.90.0.8-dist/ltmain.sh binutils-2.14.90.0.8/ltmain.sh
+--- binutils-2.14.90.0.8-dist/ltmain.sh	2002-03-22 16:06:16.000000000 -0600
++++ binutils-2.14.90.0.8/ltmain.sh	2004-02-11 03:42:05.000000000 -0600
+@@ -4413,6 +4413,10 @@
+       # LD_LIBRARY_PATH before the program is installed.
+       $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+       $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
++      if test -n "$linkname"; then
++        $show "(cd $output_objdir && $rm ../$linkname && $LN_S $output_objdir/$linkname ../$linkname)"
++        $run eval '(cd $output_objdir && $rm ../$linkname && $LN_S $output_objdir/$linkname ../$linkname)' || exit $?
++      fi
+       ;;
+     esac
+     exit 0
+diff -urN binutils-2.14.90.0.8-dist/opcodes/i386-dis.c binutils-2.14.90.0.8/opcodes/i386-dis.c
+--- binutils-2.14.90.0.8-dist/opcodes/i386-dis.c	2004-01-14 15:07:55.000000000 -0600
++++ binutils-2.14.90.0.8/opcodes/i386-dis.c	2004-02-11 03:42:01.000000000 -0600
+@@ -1879,7 +1879,7 @@
+  * The function returns the length of this instruction in bytes.
+  */
+ 
+-static char intel_syntax;
++static signed char intel_syntax;
+ static char open_char;
+ static char close_char;
+ static char separator_char;
diff --git a/openwrt/toolchain/binutils/2.14.90.0.8/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.14.90.0.8/100-uclibc-conf.patch
new file mode 100644
index 0000000000..5cb516cd21
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.8/100-uclibc-conf.patch
@@ -0,0 +1,630 @@
+diff -urN binutils-2.14.90.0.8-001-debian/bfd/config.bfd binutils-2.14.90.0.8/bfd/config.bfd
+--- binutils-2.14.90.0.8-001-debian/bfd/config.bfd	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.14.90.0.8/bfd/config.bfd	2004-02-12 14:18:14.000000000 -0600
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -208,7 +208,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -216,8 +216,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+-  arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+@@ -350,7 +350,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -361,7 +361,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -483,7 +483,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -497,7 +497,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -672,7 +672,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -952,7 +952,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -984,8 +985,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1141,7 +1142,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1188,7 +1189,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+diff -urN binutils-2.14.90.0.8-001-debian/bfd/configure binutils-2.14.90.0.8/bfd/configure
+--- binutils-2.14.90.0.8-001-debian/bfd/configure	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.14.90.0.8/bfd/configure	2004-02-12 14:09:10.000000000 -0600
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5388,7 +5393,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.8-001-debian/bfd/configure.in binutils-2.14.90.0.8/bfd/configure.in
+--- binutils-2.14.90.0.8-001-debian/bfd/configure.in	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.14.90.0.8/bfd/configure.in	2004-02-12 14:09:10.000000000 -0600
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -312,7 +312,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.8-001-debian/config.sub binutils-2.14.90.0.8/config.sub
+--- binutils-2.14.90.0.8-001-debian/config.sub	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.14.90.0.8/config.sub	2004-02-12 14:09:10.000000000 -0600
+@@ -118,7 +118,7 @@
+ # 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1131,7 +1131,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN binutils-2.14.90.0.8-001-debian/configure binutils-2.14.90.0.8/configure
+--- binutils-2.14.90.0.8-001-debian/configure	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.14.90.0.8/configure	2004-02-12 14:09:10.000000000 -0600
+@@ -1273,6 +1273,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.8-001-debian/configure.in binutils-2.14.90.0.8/configure.in
+--- binutils-2.14.90.0.8-001-debian/configure.in	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.14.90.0.8/configure.in	2004-02-12 14:50:56.000000000 -0600
+@@ -512,6 +512,18 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[[3456789]]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.8-001-debian/gas/configure binutils-2.14.90.0.8/gas/configure
+--- binutils-2.14.90.0.8-001-debian/gas/configure	2004-01-14 15:07:45.000000000 -0600
++++ binutils-2.14.90.0.8/gas/configure	2004-02-12 14:57:43.000000000 -0600
+@@ -3215,6 +3215,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4030,6 +4035,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4046,6 +4052,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4059,6 +4066,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4115,7 +4123,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4175,6 +4185,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4202,6 +4213,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4265,6 +4277,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4292,7 +4305,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4325,6 +4340,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.8-001-debian/gas/configure.in binutils-2.14.90.0.8/gas/configure.in
+--- binutils-2.14.90.0.8-001-debian/gas/configure.in	2004-01-14 15:07:45.000000000 -0600
++++ binutils-2.14.90.0.8/gas/configure.in	2004-02-12 14:21:06.000000000 -0600
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -279,7 +282,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -332,6 +337,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -359,6 +365,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -419,6 +426,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -439,7 +447,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -472,6 +482,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.8-001-debian/ld/configure binutils-2.14.90.0.8/ld/configure
+--- binutils-2.14.90.0.8-001-debian/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.14.90.0.8/ld/configure	2004-02-12 14:09:10.000000000 -0600
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.8-001-debian/ld/configure.tgt binutils-2.14.90.0.8/ld/configure.tgt
+--- binutils-2.14.90.0.8-001-debian/ld/configure.tgt	2004-01-14 15:07:52.000000000 -0600
++++ binutils-2.14.90.0.8/ld/configure.tgt	2004-02-12 14:14:12.000000000 -0600
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -128,7 +131,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -152,14 +155,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -259,10 +264,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -363,7 +371,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -380,9 +389,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -429,16 +438,20 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*) \
++			targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*) \
++			targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -461,6 +474,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.14.90.0.8-001-debian/libtool.m4 binutils-2.14.90.0.8/libtool.m4
+--- binutils-2.14.90.0.8-001-debian/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.14.90.0.8/libtool.m4	2004-02-12 14:09:10.000000000 -0600
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.14.90.0.8-001-debian/ltconfig binutils-2.14.90.0.8/ltconfig
+--- binutils-2.14.90.0.8-001-debian/ltconfig	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.14.90.0.8/ltconfig	2004-02-12 14:09:10.000000000 -0600
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/binutils/2.14.90.0.8/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.14.90.0.8/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.14.90.0.8/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.90.0.1.1/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.90.0.1.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..d47b6f0942
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.1.1/100-uclibc-conf.patch
@@ -0,0 +1,692 @@
+diff -urN binutils-2.15.90.0.1.1-dist/bfd/config.bfd binutils-2.15.90.0.1.1/bfd/config.bfd
+--- binutils-2.15.90.0.1.1-dist/bfd/config.bfd	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.15.90.0.1.1/bfd/config.bfd	2004-08-06 17:29:55.000000000 -0500
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -208,7 +208,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -350,7 +350,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -361,7 +361,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -483,7 +483,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -497,7 +497,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -672,7 +672,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -952,7 +952,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -984,8 +985,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1141,7 +1142,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1188,7 +1189,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1257,7 +1258,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.90.0.1.1-dist/bfd/configure binutils-2.15.90.0.1.1/bfd/configure
+--- binutils-2.15.90.0.1.1-dist/bfd/configure	2004-03-05 19:18:21.000000000 -0600
++++ binutils-2.15.90.0.1.1/bfd/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5388,7 +5393,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5489,7 +5494,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.1.1-dist/bfd/configure.in binutils-2.15.90.0.1.1/bfd/configure.in
+--- binutils-2.15.90.0.1.1-dist/bfd/configure.in	2004-03-05 19:18:21.000000000 -0600
++++ binutils-2.15.90.0.1.1/bfd/configure.in	2004-08-06 17:29:55.000000000 -0500
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -312,7 +312,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -397,7 +397,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.1.1-dist/binutils/configure binutils-2.15.90.0.1.1/binutils/configure
+--- binutils-2.15.90.0.1.1-dist/binutils/configure	2004-01-14 15:07:44.000000000 -0600
++++ binutils-2.15.90.0.1.1/binutils/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -1574,6 +1574,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.1.1-dist/configure binutils-2.15.90.0.1.1/configure
+--- binutils-2.15.90.0.1.1-dist/configure	2004-03-03 14:24:33.000000000 -0600
++++ binutils-2.15.90.0.1.1/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -1288,6 +1288,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.1.1-dist/configure.in binutils-2.15.90.0.1.1/configure.in
+--- binutils-2.15.90.0.1.1-dist/configure.in	2004-03-03 14:24:33.000000000 -0600
++++ binutils-2.15.90.0.1.1/configure.in	2004-08-06 17:29:55.000000000 -0500
+@@ -521,6 +521,18 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.1.1-dist/gas/configure binutils-2.15.90.0.1.1/gas/configure
+--- binutils-2.15.90.0.1.1-dist/gas/configure	2004-03-05 19:18:21.000000000 -0600
++++ binutils-2.15.90.0.1.1/gas/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -3401,6 +3401,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4226,6 +4231,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4242,6 +4248,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4255,6 +4262,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4311,7 +4319,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4371,6 +4381,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4398,6 +4409,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4461,6 +4473,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4488,7 +4501,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4521,6 +4536,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.1.1-dist/gas/configure.in binutils-2.15.90.0.1.1/gas/configure.in
+--- binutils-2.15.90.0.1.1-dist/gas/configure.in	2004-01-14 15:07:45.000000000 -0600
++++ binutils-2.15.90.0.1.1/gas/configure.in	2004-08-06 17:29:55.000000000 -0500
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -279,7 +282,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -332,6 +337,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -359,6 +365,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -419,6 +426,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -439,7 +447,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -472,6 +482,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.1.1-dist/gprof/configure binutils-2.15.90.0.1.1/gprof/configure
+--- binutils-2.15.90.0.1.1-dist/gprof/configure	2004-01-14 15:07:51.000000000 -0600
++++ binutils-2.15.90.0.1.1/gprof/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -1570,6 +1570,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.1.1-dist/ld/configure binutils-2.15.90.0.1.1/ld/configure
+--- binutils-2.15.90.0.1.1-dist/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.15.90.0.1.1/ld/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.1.1-dist/ld/configure.tgt binutils-2.15.90.0.1.1/ld/configure.tgt
+--- binutils-2.15.90.0.1.1-dist/ld/configure.tgt	2004-01-14 15:07:52.000000000 -0600
++++ binutils-2.15.90.0.1.1/ld/configure.tgt	2004-08-06 17:29:55.000000000 -0500
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -118,7 +121,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -128,7 +133,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -152,14 +157,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -259,10 +266,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -363,7 +373,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -380,9 +391,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -395,6 +406,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -429,16 +441,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -461,6 +473,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.90.0.1.1-dist/libtool.m4 binutils-2.15.90.0.1.1/libtool.m4
+--- binutils-2.15.90.0.1.1-dist/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.15.90.0.1.1/libtool.m4	2004-08-06 17:29:55.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.90.0.1.1-dist/ltconfig binutils-2.15.90.0.1.1/ltconfig
+--- binutils-2.15.90.0.1.1-dist/ltconfig	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.15.90.0.1.1/ltconfig	2004-08-06 17:29:55.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.90.0.1.1-dist/opcodes/configure binutils-2.15.90.0.1.1/opcodes/configure
+--- binutils-2.15.90.0.1.1-dist/opcodes/configure	2004-01-14 15:07:54.000000000 -0600
++++ binutils-2.15.90.0.1.1/opcodes/configure	2004-08-06 17:29:55.000000000 -0500
+@@ -1689,6 +1689,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.90.0.1.1/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.90.0.1.1/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.1.1/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.90.0.1/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.90.0.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..64aef4986e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.1/100-uclibc-conf.patch
@@ -0,0 +1,692 @@
+diff -urN binutils-2.15.90.0.1-dist/bfd/config.bfd binutils-2.15.90.0.1/bfd/config.bfd
+--- binutils-2.15.90.0.1-dist/bfd/config.bfd	2004-01-14 15:07:43.000000000 -0600
++++ binutils-2.15.90.0.1/bfd/config.bfd	2004-08-06 17:39:55.000000000 -0500
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -208,7 +208,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -350,7 +350,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -361,7 +361,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -483,7 +483,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -497,7 +497,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -672,7 +672,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -952,7 +952,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -984,8 +985,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1141,7 +1142,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1188,7 +1189,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1257,7 +1258,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.90.0.1-dist/bfd/configure binutils-2.15.90.0.1/bfd/configure
+--- binutils-2.15.90.0.1-dist/bfd/configure	2004-03-03 14:24:33.000000000 -0600
++++ binutils-2.15.90.0.1/bfd/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5388,7 +5393,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5489,7 +5494,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.1-dist/bfd/configure.in binutils-2.15.90.0.1/bfd/configure.in
+--- binutils-2.15.90.0.1-dist/bfd/configure.in	2004-03-03 14:24:33.000000000 -0600
++++ binutils-2.15.90.0.1/bfd/configure.in	2004-08-06 17:39:55.000000000 -0500
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -312,7 +312,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -397,7 +397,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.1-dist/binutils/configure binutils-2.15.90.0.1/binutils/configure
+--- binutils-2.15.90.0.1-dist/binutils/configure	2004-01-14 15:07:44.000000000 -0600
++++ binutils-2.15.90.0.1/binutils/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -1574,6 +1574,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.1-dist/configure binutils-2.15.90.0.1/configure
+--- binutils-2.15.90.0.1-dist/configure	2004-03-03 14:24:33.000000000 -0600
++++ binutils-2.15.90.0.1/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -1288,6 +1288,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.1-dist/configure.in binutils-2.15.90.0.1/configure.in
+--- binutils-2.15.90.0.1-dist/configure.in	2004-03-03 14:24:33.000000000 -0600
++++ binutils-2.15.90.0.1/configure.in	2004-08-06 17:39:55.000000000 -0500
+@@ -521,6 +521,18 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.1-dist/gas/configure binutils-2.15.90.0.1/gas/configure
+--- binutils-2.15.90.0.1-dist/gas/configure	2004-01-14 15:07:45.000000000 -0600
++++ binutils-2.15.90.0.1/gas/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -3215,6 +3215,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4030,6 +4035,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4046,6 +4052,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4059,6 +4066,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4115,7 +4123,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4175,6 +4185,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4202,6 +4213,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4265,6 +4277,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4292,7 +4305,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4325,6 +4340,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.1-dist/gas/configure.in binutils-2.15.90.0.1/gas/configure.in
+--- binutils-2.15.90.0.1-dist/gas/configure.in	2004-01-14 15:07:45.000000000 -0600
++++ binutils-2.15.90.0.1/gas/configure.in	2004-08-06 17:39:55.000000000 -0500
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -279,7 +282,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -332,6 +337,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -359,6 +365,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -419,6 +426,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -439,7 +447,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -472,6 +482,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.1-dist/gprof/configure binutils-2.15.90.0.1/gprof/configure
+--- binutils-2.15.90.0.1-dist/gprof/configure	2004-01-14 15:07:51.000000000 -0600
++++ binutils-2.15.90.0.1/gprof/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -1570,6 +1570,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.1-dist/ld/configure binutils-2.15.90.0.1/ld/configure
+--- binutils-2.15.90.0.1-dist/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.15.90.0.1/ld/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.1-dist/ld/configure.tgt binutils-2.15.90.0.1/ld/configure.tgt
+--- binutils-2.15.90.0.1-dist/ld/configure.tgt	2004-01-14 15:07:52.000000000 -0600
++++ binutils-2.15.90.0.1/ld/configure.tgt	2004-08-06 17:39:55.000000000 -0500
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -118,7 +121,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -128,7 +133,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -152,14 +157,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -259,10 +266,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -363,7 +373,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -380,9 +391,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -395,6 +406,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -429,16 +441,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -461,6 +473,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.90.0.1-dist/libtool.m4 binutils-2.15.90.0.1/libtool.m4
+--- binutils-2.15.90.0.1-dist/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.15.90.0.1/libtool.m4	2004-08-06 17:39:55.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.90.0.1-dist/ltconfig binutils-2.15.90.0.1/ltconfig
+--- binutils-2.15.90.0.1-dist/ltconfig	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.15.90.0.1/ltconfig	2004-08-06 17:39:55.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.90.0.1-dist/opcodes/configure binutils-2.15.90.0.1/opcodes/configure
+--- binutils-2.15.90.0.1-dist/opcodes/configure	2004-01-14 15:07:54.000000000 -0600
++++ binutils-2.15.90.0.1/opcodes/configure	2004-08-06 17:39:55.000000000 -0500
+@@ -1689,6 +1689,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.90.0.1/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.90.0.1/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.1/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.90.0.2/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.90.0.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..28c5017ed2
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.2/100-uclibc-conf.patch
@@ -0,0 +1,692 @@
+diff -urN binutils-2.15.90.0.3-dist/bfd/config.bfd binutils-2.15.90.0.3/bfd/config.bfd
+--- binutils-2.15.90.0.3-dist/bfd/config.bfd	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/config.bfd	2004-08-06 17:02:17.000000000 -0500
+@@ -126,7 +126,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -136,7 +136,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -213,7 +213,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -221,7 +221,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -360,7 +360,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -371,7 +371,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -494,7 +494,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -508,7 +508,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -683,7 +683,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -955,7 +955,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -987,8 +988,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1149,7 +1150,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1196,7 +1197,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1265,7 +1266,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.90.0.3-dist/bfd/configure binutils-2.15.90.0.3/bfd/configure
+--- binutils-2.15.90.0.3-dist/bfd/configure	2004-04-14 23:26:05.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5376,7 +5381,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5477,7 +5482,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.3-dist/bfd/configure.in binutils-2.15.90.0.3/bfd/configure.in
+--- binutils-2.15.90.0.3-dist/bfd/configure.in	2004-04-14 23:26:05.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/configure.in	2004-08-06 17:02:17.000000000 -0500
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -300,7 +300,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -385,7 +385,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.3-dist/binutils/configure binutils-2.15.90.0.3/binutils/configure
+--- binutils-2.15.90.0.3-dist/binutils/configure	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.90.0.3/binutils/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.3-dist/configure binutils-2.15.90.0.3/configure
+--- binutils-2.15.90.0.3-dist/configure	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1298,6 +1298,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.3-dist/configure.in binutils-2.15.90.0.3/configure.in
+--- binutils-2.15.90.0.3-dist/configure.in	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/configure.in	2004-08-06 17:02:17.000000000 -0500
+@@ -521,6 +521,18 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.3-dist/gas/configure binutils-2.15.90.0.3/gas/configure
+--- binutils-2.15.90.0.3-dist/gas/configure	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.90.0.3/gas/configure	2004-08-06 17:04:29.000000000 -0500
+@@ -3401,6 +3401,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4226,6 +4231,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4242,6 +4248,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4255,6 +4262,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4311,7 +4319,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4371,6 +4381,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4398,6 +4409,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4460,6 +4472,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4487,7 +4500,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4520,6 +4535,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.3-dist/gas/configure.in binutils-2.15.90.0.3/gas/configure.in
+--- binutils-2.15.90.0.3-dist/gas/configure.in	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.90.0.3/gas/configure.in	2004-08-06 17:04:27.000000000 -0500
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -279,7 +282,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -332,6 +337,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -359,6 +365,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -418,6 +425,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -438,7 +446,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -471,6 +481,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.3-dist/gprof/configure binutils-2.15.90.0.3/gprof/configure
+--- binutils-2.15.90.0.3-dist/gprof/configure	2004-01-14 15:07:51.000000000 -0600
++++ binutils-2.15.90.0.3/gprof/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1570,6 +1570,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.3-dist/ld/configure binutils-2.15.90.0.3/ld/configure
+--- binutils-2.15.90.0.3-dist/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.15.90.0.3/ld/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.3-dist/ld/configure.tgt binutils-2.15.90.0.3/ld/configure.tgt
+--- binutils-2.15.90.0.3-dist/ld/configure.tgt	2004-04-12 14:56:35.000000000 -0500
++++ binutils-2.15.90.0.3/ld/configure.tgt	2004-08-06 17:02:17.000000000 -0500
+@@ -31,6 +31,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -60,14 +61,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -119,7 +122,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -129,7 +134,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -153,14 +158,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -260,10 +267,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -365,7 +375,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -382,9 +393,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -397,6 +408,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -430,16 +442,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -462,6 +474,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.90.0.3-dist/libtool.m4 binutils-2.15.90.0.3/libtool.m4
+--- binutils-2.15.90.0.3-dist/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.15.90.0.3/libtool.m4	2004-08-06 17:02:17.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.90.0.3-dist/ltconfig binutils-2.15.90.0.3/ltconfig
+--- binutils-2.15.90.0.3-dist/ltconfig	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.15.90.0.3/ltconfig	2004-08-06 17:02:17.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.90.0.3-dist/opcodes/configure binutils-2.15.90.0.3/opcodes/configure
+--- binutils-2.15.90.0.3-dist/opcodes/configure	2004-04-12 14:56:38.000000000 -0500
++++ binutils-2.15.90.0.3/opcodes/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1690,6 +1690,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.90.0.2/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.90.0.2/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.2/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.90.0.3/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.90.0.3/100-uclibc-conf.patch
new file mode 100644
index 0000000000..28c5017ed2
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.3/100-uclibc-conf.patch
@@ -0,0 +1,692 @@
+diff -urN binutils-2.15.90.0.3-dist/bfd/config.bfd binutils-2.15.90.0.3/bfd/config.bfd
+--- binutils-2.15.90.0.3-dist/bfd/config.bfd	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/config.bfd	2004-08-06 17:02:17.000000000 -0500
+@@ -126,7 +126,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -136,7 +136,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -213,7 +213,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -221,7 +221,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -360,7 +360,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -371,7 +371,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -494,7 +494,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -508,7 +508,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -683,7 +683,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -955,7 +955,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -987,8 +988,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1149,7 +1150,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1196,7 +1197,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1265,7 +1266,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.90.0.3-dist/bfd/configure binutils-2.15.90.0.3/bfd/configure
+--- binutils-2.15.90.0.3-dist/bfd/configure	2004-04-14 23:26:05.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5376,7 +5381,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5477,7 +5482,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.3-dist/bfd/configure.in binutils-2.15.90.0.3/bfd/configure.in
+--- binutils-2.15.90.0.3-dist/bfd/configure.in	2004-04-14 23:26:05.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/configure.in	2004-08-06 17:02:17.000000000 -0500
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -300,7 +300,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -385,7 +385,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.90.0.3-dist/binutils/configure binutils-2.15.90.0.3/binutils/configure
+--- binutils-2.15.90.0.3-dist/binutils/configure	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.90.0.3/binutils/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.3-dist/configure binutils-2.15.90.0.3/configure
+--- binutils-2.15.90.0.3-dist/configure	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1298,6 +1298,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.3-dist/configure.in binutils-2.15.90.0.3/configure.in
+--- binutils-2.15.90.0.3-dist/configure.in	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/configure.in	2004-08-06 17:02:17.000000000 -0500
+@@ -521,6 +521,18 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.90.0.3-dist/gas/configure binutils-2.15.90.0.3/gas/configure
+--- binutils-2.15.90.0.3-dist/gas/configure	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.90.0.3/gas/configure	2004-08-06 17:04:29.000000000 -0500
+@@ -3401,6 +3401,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4226,6 +4231,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4242,6 +4248,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4255,6 +4262,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4311,7 +4319,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4371,6 +4381,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4398,6 +4409,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4460,6 +4472,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4487,7 +4500,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4520,6 +4535,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.3-dist/gas/configure.in binutils-2.15.90.0.3/gas/configure.in
+--- binutils-2.15.90.0.3-dist/gas/configure.in	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.90.0.3/gas/configure.in	2004-08-06 17:04:27.000000000 -0500
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -279,7 +282,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -332,6 +337,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -359,6 +365,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -418,6 +425,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -438,7 +446,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -471,6 +481,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.90.0.3-dist/gprof/configure binutils-2.15.90.0.3/gprof/configure
+--- binutils-2.15.90.0.3-dist/gprof/configure	2004-01-14 15:07:51.000000000 -0600
++++ binutils-2.15.90.0.3/gprof/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1570,6 +1570,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.3-dist/ld/configure binutils-2.15.90.0.3/ld/configure
+--- binutils-2.15.90.0.3-dist/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.15.90.0.3/ld/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.90.0.3-dist/ld/configure.tgt binutils-2.15.90.0.3/ld/configure.tgt
+--- binutils-2.15.90.0.3-dist/ld/configure.tgt	2004-04-12 14:56:35.000000000 -0500
++++ binutils-2.15.90.0.3/ld/configure.tgt	2004-08-06 17:02:17.000000000 -0500
+@@ -31,6 +31,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -60,14 +61,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -119,7 +122,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -129,7 +134,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -153,14 +158,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -260,10 +267,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -365,7 +375,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -382,9 +393,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -397,6 +408,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -430,16 +442,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -462,6 +474,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.90.0.3-dist/libtool.m4 binutils-2.15.90.0.3/libtool.m4
+--- binutils-2.15.90.0.3-dist/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.15.90.0.3/libtool.m4	2004-08-06 17:02:17.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.90.0.3-dist/ltconfig binutils-2.15.90.0.3/ltconfig
+--- binutils-2.15.90.0.3-dist/ltconfig	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.15.90.0.3/ltconfig	2004-08-06 17:02:17.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.90.0.3-dist/opcodes/configure binutils-2.15.90.0.3/opcodes/configure
+--- binutils-2.15.90.0.3-dist/opcodes/configure	2004-04-12 14:56:38.000000000 -0500
++++ binutils-2.15.90.0.3/opcodes/configure	2004-08-06 17:02:17.000000000 -0500
+@@ -1690,6 +1690,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch b/openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch
new file mode 100644
index 0000000000..29bb5c18db
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.3/210-cflags.patch
@@ -0,0 +1,32 @@
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
+@@ -55,10 +55,10 @@
+ MKDOC = chew$(EXEEXT_FOR_BUILD)
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
+@@ -472,10 +472,10 @@
+ 
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
diff --git a/openwrt/toolchain/binutils/2.15.90.0.3/500-branch-likely.patch b/openwrt/toolchain/binutils/2.15.90.0.3/500-branch-likely.patch
new file mode 100644
index 0000000000..0bb1a4b4f6
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.3/500-branch-likely.patch
@@ -0,0 +1,10 @@
+--- binutils-2.15.90.0.3/gas/config/tc-mips.c-dist	2004-08-19 12:56:20.000000000 -0500
++++ binutils-2.15.90.0.3/gas/config/tc-mips.c	2004-08-19 12:57:30.000000000 -0500
+@@ -2708,6 +2708,7 @@
+ 	  prev_insn_reloc_type[1] = BFD_RELOC_UNUSED;
+ 	  prev_insn_reloc_type[2] = BFD_RELOC_UNUSED;
+ 	  prev_insn_extended = 0;
++	  prev_insn_is_delay_slot = 1;
+ 	}
+       else
+ 	{
diff --git a/openwrt/toolchain/binutils/2.15.90.0.3/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.90.0.3/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.90.0.3/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.91.0.1/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.91.0.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..57b86abca1
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.1/100-uclibc-conf.patch
@@ -0,0 +1,692 @@
+diff -urN binutils-2.15.91.0.1-dist/bfd/config.bfd binutils-2.15.91.0.1/bfd/config.bfd
+--- binutils-2.15.91.0.1-dist/bfd/config.bfd	2004-05-27 13:26:01.000000000 -0500
++++ binutils-2.15.91.0.1/bfd/config.bfd	2004-07-16 14:57:21.000000000 -0500
+@@ -128,7 +128,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -138,7 +138,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -215,7 +215,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -223,7 +223,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -367,7 +367,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -378,7 +378,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -501,7 +501,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -515,7 +515,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -690,7 +690,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -966,7 +966,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1003,8 +1004,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1165,7 +1166,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1212,7 +1213,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1281,7 +1282,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.91.0.1-dist/bfd/configure binutils-2.15.91.0.1/bfd/configure
+--- binutils-2.15.91.0.1-dist/bfd/configure	2004-05-27 13:26:02.000000000 -0500
++++ binutils-2.15.91.0.1/bfd/configure	2004-07-16 14:57:21.000000000 -0500
+@@ -1687,6 +1687,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5266,7 +5271,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5326,7 +5331,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5364,7 +5369,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5468,7 +5473,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.91.0.1-dist/bfd/configure.in binutils-2.15.91.0.1/bfd/configure.in
+--- binutils-2.15.91.0.1-dist/bfd/configure.in	2004-05-27 13:26:02.000000000 -0500
++++ binutils-2.15.91.0.1/bfd/configure.in	2004-07-16 14:57:21.000000000 -0500
+@@ -164,7 +164,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -245,7 +245,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -286,7 +286,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -374,7 +374,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.91.0.1-dist/binutils/configure binutils-2.15.91.0.1/binutils/configure
+--- binutils-2.15.91.0.1-dist/binutils/configure	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.91.0.1/binutils/configure	2004-07-27 21:50:54.000000000 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.91.0.1-dist/configure binutils-2.15.91.0.1/configure
+--- binutils-2.15.91.0.1-dist/configure	2004-05-27 13:26:01.000000000 -0500
++++ binutils-2.15.91.0.1/configure	2004-07-16 14:57:21.000000000 -0500
+@@ -1365,6 +1365,18 @@
+   i[3456789]86-*-coff | i[3456789]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.91.0.1-dist/configure.in binutils-2.15.91.0.1/configure.in
+--- binutils-2.15.91.0.1-dist/configure.in	2004-05-27 13:26:01.000000000 -0500
++++ binutils-2.15.91.0.1/configure.in	2004-07-16 14:57:21.000000000 -0500
+@@ -551,6 +551,18 @@
+   i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.91.0.1-dist/gas/configure binutils-2.15.91.0.1/gas/configure
+--- binutils-2.15.91.0.1-dist/gas/configure	2004-05-27 13:26:03.000000000 -0500
++++ binutils-2.15.91.0.1/gas/configure	2004-07-16 14:57:21.000000000 -0500
+@@ -3408,6 +3408,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4233,6 +4238,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4249,6 +4255,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4262,6 +4269,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4319,7 +4327,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4379,6 +4389,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4406,6 +4417,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4468,6 +4480,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4496,7 +4509,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4529,6 +4544,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.91.0.1-dist/gas/configure.in binutils-2.15.91.0.1/gas/configure.in
+--- binutils-2.15.91.0.1-dist/gas/configure.in	2004-05-27 13:26:03.000000000 -0500
++++ binutils-2.15.91.0.1/gas/configure.in	2004-07-16 14:57:21.000000000 -0500
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -280,7 +283,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -333,6 +338,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -360,6 +366,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -419,6 +426,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -440,7 +448,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -473,6 +483,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.91.0.1-dist/gprof/configure binutils-2.15.91.0.1/gprof/configure
+--- binutils-2.15.91.0.1-dist/gprof/configure	2004-01-14 15:07:51.000000000 -0600
++++ binutils-2.15.91.0.1/gprof/configure	2004-07-27 21:53:11.000000000 -0500
+@@ -1570,6 +1570,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.91.0.1-dist/ld/configure binutils-2.15.91.0.1/ld/configure
+--- binutils-2.15.91.0.1-dist/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.15.91.0.1/ld/configure	2004-07-16 14:57:21.000000000 -0500
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.91.0.1-dist/ld/configure.tgt binutils-2.15.91.0.1/ld/configure.tgt
+--- binutils-2.15.91.0.1-dist/ld/configure.tgt	2004-05-27 13:26:04.000000000 -0500
++++ binutils-2.15.91.0.1/ld/configure.tgt	2004-07-16 14:57:21.000000000 -0500
+@@ -31,6 +31,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -60,14 +61,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -119,7 +122,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -129,7 +134,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -153,14 +158,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -260,10 +267,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -365,7 +375,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -382,9 +393,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -397,6 +408,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -430,16 +442,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -462,6 +474,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.91.0.1-dist/libtool.m4 binutils-2.15.91.0.1/libtool.m4
+--- binutils-2.15.91.0.1-dist/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.15.91.0.1/libtool.m4	2004-07-16 14:57:21.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.91.0.1-dist/ltconfig binutils-2.15.91.0.1/ltconfig
+--- binutils-2.15.91.0.1-dist/ltconfig	2004-01-14 15:07:42.000000000 -0600
++++ binutils-2.15.91.0.1/ltconfig	2004-07-16 14:57:21.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.91.0.1-dist/opcodes/configure binutils-2.15.91.0.1/opcodes/configure
+--- binutils-2.15.91.0.1-dist/opcodes/configure	2004-04-12 14:56:38.000000000 -0500
++++ binutils-2.15.91.0.1/opcodes/configure	2004-07-27 21:55:25.000000000 -0500
+@@ -1690,6 +1690,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.91.0.1/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.91.0.1/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.1/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.91.0.2/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.91.0.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..911bef4ff1
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.2/100-uclibc-conf.patch
@@ -0,0 +1,722 @@
+diff -urN binutils-2.15.91.0.2-dist/bfd/config.bfd binutils-2.15.91.0.2/bfd/config.bfd
+--- binutils-2.15.91.0.2-dist/bfd/config.bfd	2004-07-27 23:36:07.000000000 -0500
++++ binutils-2.15.91.0.2/bfd/config.bfd	2004-09-28 14:33:13.000000000 -0500
+@@ -129,7 +129,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -139,7 +139,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -224,7 +224,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -373,7 +373,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -384,7 +384,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -507,7 +507,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -521,7 +521,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -696,7 +696,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -972,7 +972,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1009,8 +1010,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1177,7 +1178,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1224,7 +1225,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1293,7 +1294,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.91.0.2-dist/bfd/configure binutils-2.15.91.0.2/bfd/configure
+--- binutils-2.15.91.0.2-dist/bfd/configure	2004-07-27 23:36:07.000000000 -0500
++++ binutils-2.15.91.0.2/bfd/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -1687,6 +1687,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5266,7 +5271,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5330,7 +5335,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5368,7 +5373,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5472,7 +5477,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.91.0.2-dist/bfd/configure.in binutils-2.15.91.0.2/bfd/configure.in
+--- binutils-2.15.91.0.2-dist/bfd/configure.in	2004-07-27 23:36:07.000000000 -0500
++++ binutils-2.15.91.0.2/bfd/configure.in	2004-09-28 14:33:13.000000000 -0500
+@@ -164,7 +164,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -249,7 +249,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -290,7 +290,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -378,7 +378,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.91.0.2-dist/binutils/configure binutils-2.15.91.0.2/binutils/configure
+--- binutils-2.15.91.0.2-dist/binutils/configure	2004-04-12 14:56:34.000000000 -0500
++++ binutils-2.15.91.0.2/binutils/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.91.0.2-dist/configure binutils-2.15.91.0.2/configure
+--- binutils-2.15.91.0.2-dist/configure	2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.15.91.0.2/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -1349,6 +1349,18 @@
+   i[3456789]86-*-coff | i[3456789]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.91.0.2-dist/configure.in binutils-2.15.91.0.2/configure.in
+--- binutils-2.15.91.0.2-dist/configure.in	2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.15.91.0.2/configure.in	2004-09-28 14:33:13.000000000 -0500
+@@ -569,6 +569,18 @@
+   i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.91.0.2-dist/gas/configure binutils-2.15.91.0.2/gas/configure
+--- binutils-2.15.91.0.2-dist/gas/configure	2004-07-27 23:36:09.000000000 -0500
++++ binutils-2.15.91.0.2/gas/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -3408,6 +3408,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4234,6 +4239,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4250,6 +4256,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4263,6 +4270,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -4322,7 +4330,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4382,6 +4392,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4409,6 +4420,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4471,6 +4483,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4498,7 +4511,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4538,6 +4553,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.91.0.2-dist/gas/configure.in binutils-2.15.91.0.2/gas/configure.in
+--- binutils-2.15.91.0.2-dist/gas/configure.in	2004-07-27 23:36:09.000000000 -0500
++++ binutils-2.15.91.0.2/gas/configure.in	2004-09-28 14:33:13.000000000 -0500
+@@ -195,6 +195,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -211,6 +212,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -224,6 +226,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -283,7 +286,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -336,6 +341,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -363,6 +369,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -422,6 +429,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -442,7 +450,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -478,6 +488,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.91.0.2-dist/gprof/configure binutils-2.15.91.0.2/gprof/configure
+--- binutils-2.15.91.0.2-dist/gprof/configure	2004-07-27 23:36:10.000000000 -0500
++++ binutils-2.15.91.0.2/gprof/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -3401,6 +3401,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.91.0.2-dist/ld/configure binutils-2.15.91.0.2/ld/configure
+--- binutils-2.15.91.0.2-dist/ld/configure	2004-07-27 23:36:11.000000000 -0500
++++ binutils-2.15.91.0.2/ld/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.91.0.2-dist/ld/configure.tgt binutils-2.15.91.0.2/ld/configure.tgt
+--- binutils-2.15.91.0.2-dist/ld/configure.tgt	2004-07-27 23:36:11.000000000 -0500
++++ binutils-2.15.91.0.2/ld/configure.tgt	2004-09-28 14:33:13.000000000 -0500
+@@ -31,6 +31,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -61,14 +62,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -120,7 +123,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -130,7 +135,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -154,14 +159,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -261,10 +268,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -369,7 +379,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -386,9 +397,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -401,6 +412,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -434,16 +446,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -466,6 +478,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.91.0.2-dist/ld/emultempl/elf32.em binutils-2.15.91.0.2/ld/emultempl/elf32.em
+--- binutils-2.15.91.0.2-dist/ld/emultempl/elf32.em	2004-07-27 23:36:11.000000000 -0500
++++ binutils-2.15.91.0.2/ld/emultempl/elf32.em	2004-09-28 14:33:54.000000000 -0500
+@@ -327,7 +327,7 @@
+ 
+ EOF
+ case ${target} in
+-  *-*-linux-gnu*)
++  *-*-linux-gnu* | *-*-linux-uclibc*)
+     cat >>e${EMULATION_NAME}.c <<EOF
+ 	  {
+ 	    struct bfd_link_needed_list *l;
+@@ -500,7 +500,7 @@
+ 
+ EOF
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ /* For a native linker, check the file /etc/ld.so.conf for directories
+    in which we may find shared libraries.  /etc/ld.so.conf is really
+@@ -784,7 +784,7 @@
+ EOF
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ 	  if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ 	    break;
+diff -urN binutils-2.15.91.0.2-dist/libtool.m4 binutils-2.15.91.0.2/libtool.m4
+--- binutils-2.15.91.0.2-dist/libtool.m4	2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.15.91.0.2/libtool.m4	2004-09-28 14:33:13.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.91.0.2-dist/ltconfig binutils-2.15.91.0.2/ltconfig
+--- binutils-2.15.91.0.2-dist/ltconfig	2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.15.91.0.2/ltconfig	2004-09-28 14:33:13.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1270,6 +1271,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.91.0.2-dist/opcodes/configure binutils-2.15.91.0.2/opcodes/configure
+--- binutils-2.15.91.0.2-dist/opcodes/configure	2004-07-27 23:36:11.000000000 -0500
++++ binutils-2.15.91.0.2/opcodes/configure	2004-09-28 14:33:13.000000000 -0500
+@@ -1690,6 +1690,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.91.0.2/500-branch-likely.patch b/openwrt/toolchain/binutils/2.15.91.0.2/500-branch-likely.patch
new file mode 100644
index 0000000000..0bb1a4b4f6
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.2/500-branch-likely.patch
@@ -0,0 +1,10 @@
+--- binutils-2.15.90.0.3/gas/config/tc-mips.c-dist	2004-08-19 12:56:20.000000000 -0500
++++ binutils-2.15.90.0.3/gas/config/tc-mips.c	2004-08-19 12:57:30.000000000 -0500
+@@ -2708,6 +2708,7 @@
+ 	  prev_insn_reloc_type[1] = BFD_RELOC_UNUSED;
+ 	  prev_insn_reloc_type[2] = BFD_RELOC_UNUSED;
+ 	  prev_insn_extended = 0;
++	  prev_insn_is_delay_slot = 1;
+ 	}
+       else
+ 	{
diff --git a/openwrt/toolchain/binutils/2.15.91.0.2/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.91.0.2/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.2/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.91.0.2/700-binutils-20040817-linkonce.patch b/openwrt/toolchain/binutils/2.15.91.0.2/700-binutils-20040817-linkonce.patch
new file mode 100644
index 0000000000..97fa6eed60
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.2/700-binutils-20040817-linkonce.patch
@@ -0,0 +1,118 @@
+From http://sources.redhat.com/ml/binutils/2004-08/msg00190.html
+
+Date: Tue, 17 Aug 2004 12:04:29 +0200
+From: Jakub Jelinek <jakub at redhat dot com>
+To: binutils at sources dot redhat dot com
+Subject: [PATCH] Fix `defined in discarded section' errors when building ia64 gcc
+Message-ID: <20040817100429.GL30497@sunsite.ms.mff.cuni.cz>
+Reply-To: Jakub Jelinek <jakub at redhat dot com>
+References: <20040817090201.GK30497@sunsite.ms.mff.cuni.cz>
+In-Reply-To: <20040817090201 dot GK30497 at sunsite dot ms dot mff dot cuni dot cz>
+
+On Tue, Aug 17, 2004 at 11:02:01AM +0200, Jakub Jelinek wrote:
+> Current gcc 3.4.x (at least gcc-3_4-rhl-branch) doesn't build with CVS
+> binutils (nor 2.15.91.0.2).
+> The problem is that libstdc++.so linking fails with:
+> `.gnu.linkonce.t._ZNSdD2Ev' referenced in section `.gnu.linkonce.ia64unw._ZNSdD2Ev' of .libs/sstream-inst.o: defined in discarded section `.gnu.linkonce.t._ZNSdD2Ev' of .libs/sstream-inst.o
+> The problem is that both io-inst.s and sstream-inst.s have
+> .gnu.linkonce.t._ZNSdD2Ev definition, but because io-inst.cc
+> also instantiates some templates sstream-inst.cc doesn't instantiate,
+> the inliner can do a better job in io-inst.cc.
+> The result is that _ZNSdD2Ev in io-inst.cc is a leaf routine, while
+> it is not in sstream-inst.cc (in assembly,
+> _ZNSdD2Ev in io-inst.s starts with .prologue and no .save directives,
+> while _ZNSdD2Ev] in sstream-inst.s has .prologue 12, 35 and some
+> .save directives.
+> IA-64 ABI allows leaf routines to have no unwind section at all,
+> which means .gnu.linkonce.ia64unw._ZNSdD2Ev is not created in
+> io-inst.o at all and as .gnu.linkonce.t._ZNSdD2Ev comes first
+> and wins, .gnu.linkonce.ia64unw._ZNSdD2Ev in sstream.o suddenly
+> references a discarded section.
+> 
+> Not sure what should be done here, but certainly the compiler
+> isn't at fault here, it is a binutils problem.
+> One fix could be to create empty .gnu.linkonce.ia64unw.* section
+> in assembler, another special case ia64 unwind sections in the linker.
+
+Here is a patch for the first possibility.
+It certainly makes libstdc++.so to link and even the unwind info looks
+good on brief skimming.
+
+2004-08-17  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/tc-ia64.c (start_unwind_section): Add linkonce_empty
+	argument, don't do anything if current section is not
+	.gnu.linkonce.t.* and linkonce_empty is set.
+	(generate_unwind_image, dot_endp): Adjust callers, call
+	start_unwind_section (*, 1) if nothing will be put into the
+	section.
+
+--- binutils/gas/config/tc-ia64.c.jj	2004-07-30 11:42:24.000000000 +0200
++++ binutils/gas/config/tc-ia64.c	2004-08-17 13:45:04.288173205 +0200
+@@ -1,5 +1,6 @@
+ /* tc-ia64.c -- Assembler for the HP/Intel IA-64 architecture.
+-   Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
++   Free Software Foundation, Inc.
+    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
+ 
+    This file is part of GAS, the GNU Assembler.
+@@ -3297,7 +3298,7 @@ static char *special_linkonce_name[] =
+   };
+ 
+ static void
+-start_unwind_section (const segT text_seg, int sec_index)
++start_unwind_section (const segT text_seg, int sec_index, int linkonce_empty)
+ {
+   /*
+     Use a slightly ugly scheme to derive the unwind section names from
+@@ -3359,6 +3360,8 @@ start_unwind_section (const segT text_se
+       prefix = special_linkonce_name [sec_index - SPECIAL_SECTION_UNWIND];
+       suffix += sizeof (".gnu.linkonce.t.") - 1;
+     }
++  else if (linkonce_empty)
++    return;
+ 
+   prefix_len = strlen (prefix);
+   suffix_len = strlen (suffix);
+@@ -3444,7 +3447,7 @@ generate_unwind_image (const segT text_s
+       expressionS exp;
+       bfd_reloc_code_real_type reloc;
+ 
+-      start_unwind_section (text_seg, SPECIAL_SECTION_UNWIND_INFO);
++      start_unwind_section (text_seg, SPECIAL_SECTION_UNWIND_INFO, 0);
+ 
+       /* Make sure the section has 4 byte alignment for ILP32 and
+ 	 8 byte alignment for LP64.  */
+@@ -3485,6 +3488,8 @@ generate_unwind_image (const segT text_s
+ 	  unwind.personality_routine = 0;
+ 	}
+     }
++  else
++    start_unwind_section (text_seg, SPECIAL_SECTION_UNWIND_INFO, 1);
+ 
+   free_saved_prologue_counts ();
+   unwind.list = unwind.tail = unwind.current_entry = NULL;
+@@ -4164,7 +4169,7 @@ dot_endp (dummy)
+       subseg_set (md.last_text_seg, 0);
+       unwind.proc_end = expr_build_dot ();
+ 
+-      start_unwind_section (saved_seg, SPECIAL_SECTION_UNWIND);
++      start_unwind_section (saved_seg, SPECIAL_SECTION_UNWIND, 0);
+ 
+       /* Make sure that section has 4 byte alignment for ILP32 and
+          8 byte alignment for LP64.  */
+@@ -4204,6 +4209,9 @@ dot_endp (dummy)
+ 			    bytes_per_address);
+ 
+     }
++  else
++    start_unwind_section (saved_seg, SPECIAL_SECTION_UNWIND, 1);
++
+   subseg_set (saved_seg, saved_subseg);
+ 
+   /* Parse names of main and alternate entry points and set symbol sizes.  */
+
+
+	Jakub
+
diff --git a/openwrt/toolchain/binutils/2.15.91.0.2/701-binutils-dup-sections.patch b/openwrt/toolchain/binutils/2.15.91.0.2/701-binutils-dup-sections.patch
new file mode 100644
index 0000000000..4e4934d8cf
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.2/701-binutils-dup-sections.patch
@@ -0,0 +1,68 @@
+See http://sources.redhat.com/ml/binutils/2004-08/msg00256.html
+
+Date: Fri, 20 Aug 2004 21:13:43 -0400
+From: Daniel Jacobowitz <drow at false dot org>
+To: binutils at sources dot redhat dot com
+Subject: Re: Handle SEC_LINK_DUPLICATES_SAME_CONTENTS for arm-linux
+Message-ID: <20040821011342.GA30319@nevyn.them.org>
+Mail-Followup-To: binutils at sources dot redhat dot com
+References: <20040818145518.GA9774@nevyn.them.org> <20040819055040.GA11820@lucon.org> <20040819080034.GE21716@bubble.modra.org> <20040820173240.GA17678@nevyn.them.org> <20040821003737.GB16016@bubble.modra.org>
+In-Reply-To: <20040821003737 dot GB16016 at bubble dot modra dot org>
+
+On Sat, Aug 21, 2004 at 10:07:38AM +0930, Alan Modra wrote:
+> On Fri, Aug 20, 2004 at 01:32:40PM -0400, Daniel Jacobowitz wrote:
+> > Thanks.  How's this?
+> 
+> As you might have guessed from my rather slack review of your previous
+> patch, I trust you enough to give the OK without proper review.  But
+> since you asked...  :)
+
+Checked in as so.
+
+-- 
+Daniel Jacobowitz
+
+[ rediffed against binutils-2.15.91.0.2, with some elbow grease ]
+
+2004-08-20  Daniel Jacobowitz  <dan@debian.org>
+
+	* elflink.c (_bfd_elf_section_already_linked): Handle
+	SEC_LINK_DUPLICATES_SAME_CONTENTS.
+--- binutils-2.15.91.0.2/bfd/elflink.c.old	2004-07-27 21:36:08.000000000 -0700
++++ binutils-2.15.91.0.2/bfd/elflink.c	2004-08-26 06:38:07.000000000 -0700
+@@ -9359,6 +9359,35 @@
+ 		  (_("%s: %s: warning: duplicate section `%s' has different size\n"),
+ 		   bfd_archive_filename (abfd), name);
+ 	      break;
++	    case SEC_LINK_DUPLICATES_SAME_CONTENTS:
++	      if (sec->size != l->sec->size)
++		(*_bfd_error_handler)
++		  (_("%B: duplicate section `%A' has different size\n"),
++		   bfd_archive_filename (abfd), sec);
++	      else if (sec->size != 0)
++		{
++		  bfd_byte *sec_contents, *l_sec_contents;
++
++		  if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents))
++		    (*_bfd_error_handler)
++		      (_("%B: warning: could not read contents of section `%A'\n"),
++		       bfd_archive_filename (abfd), sec);
++		  else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
++							&l_sec_contents))
++		    (*_bfd_error_handler)
++		      (_("%B: warning: could not read contents of section `%A'\n"),
++		       bfd_archive_filename(l->sec->owner), l->sec);
++		  else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
++		    (*_bfd_error_handler)
++		      (_("%B: warning: duplicate section `%A' has different contents\n"),
++		       bfd_archive_filename (abfd), sec);
++
++		  if (sec_contents)
++		    free (sec_contents);
++		  if (l_sec_contents)
++		    free (l_sec_contents);
++		}
++	      break;
+ 	    }
+ 
+ 	  /* Set the output_section field so that lang_add_section
diff --git a/openwrt/toolchain/binutils/2.15.91.0.2/702-binutils-skip-comments.patch b/openwrt/toolchain/binutils/2.15.91.0.2/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..804a17e006
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.91.0.2/702-binutils-skip-comments.patch
@@ -0,0 +1,101 @@
+Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html
+Fixes
+localealias.s:544: Error: junk at end of line, first unrecognized character is `,' 
+when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3
+
+Paths adjusted to match crosstool's patcher.
+
+Message-Id: m3n052qw2g.fsf@whitebox.m5r.de
+From: Andreas Schwab <schwab at suse dot de>
+To: Nathan Sidwell <nathan at codesourcery dot com>
+Cc: Ian Lance Taylor <ian at wasabisystems dot com>, binutils at sources dot redhat dot com
+Date: Fri, 23 Apr 2004 22:27:19 +0200
+Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line
+
+Nathan Sidwell <nathan@codesourcery.com> writes:
+
+> Index: read.c
+> ===================================================================
+> RCS file: /cvs/src/src/gas/read.c,v
+> retrieving revision 1.76
+> diff -c -3 -p -r1.76 read.c
+> *** read.c	12 Mar 2004 17:48:12 -0000	1.76
+> --- read.c	18 Mar 2004 09:56:05 -0000
+> *************** read_a_source_file (char *name)
+> *** 1053,1059 ****
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  ignore_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+> --- 1053,1059 ----
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  demand_empty_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+
+This means that the unknown character is no longer ignored, despite the
+comment.  As a side effect a line starting with a line comment character
+not followed by APP in NO_APP mode now triggers an error instead of just a
+warning, breaking builds of glibc on m68k-linux.  Earlier in
+read_a_source_file where #APP is handled there is another comment that
+claims that unknown comments are ignored, when in fact they aren't (only
+the initial line comment character is skipped).
+
+Note that the presence of #APP will mess up the line counters, but
+that appears to be difficult to fix.
+
+Andreas.
+
+2004-04-23  Andreas Schwab  <schwab@suse.de>
+
+	* read.c (read_a_source_file): Ignore unknown text after line
+	comment character.  Fix misleading comment.
+
+--- binutils/gas/read.c.~1.78.~	2004-04-23 08:58:23.000000000 +0200
++++ binutils/gas/read.c	2004-04-23 21:49:01.000000000 +0200
+@@ -1,6 +1,6 @@
+ /* read.c - read a source file -
+    Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+-   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GAS, the GNU Assembler.
+ 
+@@ -950,10 +950,14 @@ read_a_source_file (char *name)
+ 	      unsigned int new_length;
+ 	      char *tmp_buf = 0;
+ 
+-	      bump_line_counters ();
+ 	      s = input_line_pointer;
+ 	      if (strncmp (s, "APP\n", 4))
+-		continue;	/* We ignore it */
++		{
++		  /* We ignore it */
++		  ignore_rest_of_line ();
++		  continue;
++		}
++	      bump_line_counters ();
+ 	      s += 4;
+ 
+ 	      sb_new (&sbuf);
+@@ -1052,7 +1056,7 @@ read_a_source_file (char *name)
+ 	    continue;
+ #endif
+ 	  input_line_pointer--;
+-	  /* Report unknown char as ignored.  */
++	  /* Report unknown char as error.  */
+ 	  demand_empty_rest_of_line ();
+ 	}
+ 
+
+-- 
+Andreas Schwab, SuSE Labs, schwab@suse.de
+SuSE Linux AG, Maxfeldstra&#xC3;e 5, 90409 N&#xC3;rnberg, Germany
+Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
+"And now for something completely different."
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.92.0.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..7fcbd6227a
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/100-uclibc-conf.patch
@@ -0,0 +1,724 @@
+diff -urN binutils-2.15.92.0.2-dist/bfd/config.bfd binutils-2.15.92.0.2/bfd/config.bfd
+--- binutils-2.15.92.0.2-dist/bfd/config.bfd	2004-09-15 14:05:02.000000000 -0500
++++ binutils-2.15.92.0.2/bfd/config.bfd	2004-09-28 14:11:57.000000000 -0500
+@@ -129,7 +129,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -139,7 +139,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -224,8 +224,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+-  arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+   arm*-*-eabi* )
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -378,7 +378,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -389,7 +389,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -516,7 +516,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -530,7 +530,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -705,7 +705,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -981,7 +981,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1018,8 +1019,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1186,7 +1187,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1233,7 +1234,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1302,7 +1303,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15.92.0.2-dist/bfd/configure binutils-2.15.92.0.2/bfd/configure
+--- binutils-2.15.92.0.2-dist/bfd/configure	2004-09-27 15:46:06.000000000 -0500
++++ binutils-2.15.92.0.2/bfd/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -3583,6 +3583,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -9914,7 +9919,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -9978,7 +9983,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -10016,7 +10021,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -10150,7 +10155,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.92.0.2-dist/bfd/configure.in binutils-2.15.92.0.2/bfd/configure.in
+--- binutils-2.15.92.0.2-dist/bfd/configure.in	2004-09-27 15:46:06.000000000 -0500
++++ binutils-2.15.92.0.2/bfd/configure.in	2004-09-28 14:09:03.000000000 -0500
+@@ -163,7 +163,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -248,7 +248,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -289,7 +289,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -375,7 +375,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15.92.0.2-dist/binutils/configure binutils-2.15.92.0.2/binutils/configure
+--- binutils-2.15.92.0.2-dist/binutils/configure	2004-09-15 14:05:03.000000000 -0500
++++ binutils-2.15.92.0.2/binutils/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.92.0.2-dist/configure binutils-2.15.92.0.2/configure
+--- binutils-2.15.92.0.2-dist/configure	2004-09-27 15:46:06.000000000 -0500
++++ binutils-2.15.92.0.2/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -1334,6 +1334,18 @@
+   i[3456789]86-*-coff | i[3456789]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.92.0.2-dist/configure.in binutils-2.15.92.0.2/configure.in
+--- binutils-2.15.92.0.2-dist/configure.in	2004-09-27 15:46:06.000000000 -0500
++++ binutils-2.15.92.0.2/configure.in	2004-09-28 14:09:03.000000000 -0500
+@@ -556,6 +556,18 @@
+   i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15.92.0.2-dist/gas/configure binutils-2.15.92.0.2/gas/configure
+--- binutils-2.15.92.0.2-dist/gas/configure	2004-09-27 15:46:07.000000000 -0500
++++ binutils-2.15.92.0.2/gas/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -3420,6 +3420,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4248,6 +4253,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4263,6 +4269,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4276,6 +4283,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -4335,7 +4343,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4395,6 +4405,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4422,6 +4433,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4494,6 +4506,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4521,7 +4534,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4556,6 +4571,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.92.0.2-dist/gas/configure.in binutils-2.15.92.0.2/gas/configure.in
+--- binutils-2.15.92.0.2-dist/gas/configure.in	2004-09-15 14:05:03.000000000 -0500
++++ binutils-2.15.92.0.2/gas/configure.in	2004-09-28 14:09:03.000000000 -0500
+@@ -197,6 +197,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -212,6 +213,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -225,6 +227,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -284,7 +287,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -337,6 +342,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -364,6 +370,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -433,6 +440,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -453,7 +461,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -484,6 +494,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15.92.0.2-dist/gprof/configure binutils-2.15.92.0.2/gprof/configure
+--- binutils-2.15.92.0.2-dist/gprof/configure	2004-09-27 15:46:07.000000000 -0500
++++ binutils-2.15.92.0.2/gprof/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -3418,6 +3418,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.92.0.2-dist/ld/configure binutils-2.15.92.0.2/ld/configure
+--- binutils-2.15.92.0.2-dist/ld/configure	2004-09-27 15:46:07.000000000 -0500
++++ binutils-2.15.92.0.2/ld/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -1579,6 +1579,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15.92.0.2-dist/ld/configure.tgt binutils-2.15.92.0.2/ld/configure.tgt
+--- binutils-2.15.92.0.2-dist/ld/configure.tgt	2004-09-15 14:05:04.000000000 -0500
++++ binutils-2.15.92.0.2/ld/configure.tgt	2004-09-28 14:09:03.000000000 -0500
+@@ -31,6 +31,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -61,14 +62,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -120,7 +123,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -130,7 +135,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -154,14 +159,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -262,10 +269,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -370,7 +380,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -387,9 +398,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -402,6 +413,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -435,16 +447,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -467,6 +479,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15.92.0.2-dist/ld/emultempl/elf32.em binutils-2.15.92.0.2/ld/emultempl/elf32.em
+--- binutils-2.15.92.0.2-dist/ld/emultempl/elf32.em	2004-07-27 23:36:11.000000000 -0500
++++ binutils-2.15.92.0.2/ld/emultempl/elf32.em	2004-09-28 14:13:04.000000000 -0500
+@@ -327,7 +327,7 @@
+ 
+ EOF
+ case ${target} in
+-  *-*-linux-gnu*)
++  *-*-linux-gnu* | *-*-linux-uclibc*)
+     cat >>e${EMULATION_NAME}.c <<EOF
+ 	  {
+ 	    struct bfd_link_needed_list *l;
+@@ -500,7 +500,7 @@
+ 
+ EOF
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ /* For a native linker, check the file /etc/ld.so.conf for directories
+    in which we may find shared libraries.  /etc/ld.so.conf is really
+@@ -784,7 +784,7 @@
+ EOF
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ 	  if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ 	    break;
+diff -urN binutils-2.15.92.0.2-dist/libtool.m4 binutils-2.15.92.0.2/libtool.m4
+--- binutils-2.15.92.0.2-dist/libtool.m4	2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.15.92.0.2/libtool.m4	2004-09-28 14:09:03.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15.92.0.2-dist/ltconfig binutils-2.15.92.0.2/ltconfig
+--- binutils-2.15.92.0.2-dist/ltconfig	2004-07-27 23:36:06.000000000 -0500
++++ binutils-2.15.92.0.2/ltconfig	2004-09-28 14:09:03.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1270,6 +1271,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15.92.0.2-dist/opcodes/configure binutils-2.15.92.0.2/opcodes/configure
+--- binutils-2.15.92.0.2-dist/opcodes/configure	2004-09-27 15:46:08.000000000 -0500
++++ binutils-2.15.92.0.2/opcodes/configure	2004-09-28 14:09:03.000000000 -0500
+@@ -3587,6 +3587,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/300-001_ld_makefile_patch.patch b/openwrt/toolchain/binutils/2.15.92.0.2/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..b25d5b7e21
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/300-001_ld_makefile_patch.patch
@@ -0,0 +1,52 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am binutils-2.14.90.0.6/ld/Makefile.am
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.am	2003-09-10 23:12:09.000000000 +0100
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in binutils-2.14.90.0.6/ld/Makefile.in
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.in	2003-09-10 23:12:09.000000000 +0100
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/300-006_better_file_error.patch b/openwrt/toolchain/binutils/2.15.92.0.2/300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/300-006_better_file_error.patch
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c	2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c	2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/300-012_check_ldrunpath_length.patch b/openwrt/toolchain/binutils/2.15.92.0.2/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/300-012_check_ldrunpath_length.patch
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ 						      force))
+ 		break;
+@@ -871,6 +873,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf_size_dynamic_sections
+ 	 (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/300-117_mips_symbolic_link.patch b/openwrt/toolchain/binutils/2.15.92.0.2/300-117_mips_symbolic_link.patch
new file mode 100644
index 0000000000..f5a3199168
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/300-117_mips_symbolic_link.patch
@@ -0,0 +1,42 @@
+#! /bin/sh -e
+## 117_mips_symbolic_link.dpatch
+##
+## DP: Description: Handle symbolic multigot links. (#270619)
+## DP: Author: Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+## DP: Upstream status: Not submitted
+## DP: Date: 2004-09-08
+
+if [ $# -lt 1 ]; then
+    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+    -patch) patch -p1 ${patch_opts} < $0;;
+    -unpatch) patch -R -p1 ${patch_opts} < $0;;
+    *)
+        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+        exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urpN binutils-2.15.orig/bfd/elfxx-mips.c binutils-2.15/bfd/elfxx-mips.c
+--- binutils-2.15.orig/bfd/elfxx-mips.c	2004-05-17 21:36:03.000000000 +0200
++++ binutils-2.15/bfd/elfxx-mips.c	2004-08-29 08:48:22.000000000 +0200
+@@ -3909,10 +3910,7 @@ mips_elf_create_dynamic_relocation (bfd 
+       /* We must now calculate the dynamic symbol table index to use
+ 	 in the relocation.  */
+       if (h != NULL
+-	  && (! info->symbolic || !h->root.def_regular)
+-	  /* h->root.dynindx may be -1 if this symbol was marked to
+-	     become local.  */
+-	  && h->root.dynindx != -1)
++	  && (!h->root.def_regular || !h->root.forced_local))
+ 	{
+ 	  indx = h->root.dynindx;
+ 	  if (SGI_COMPAT (output_bfd))
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/300-120_mips_xgot_multigot_workaround.patch b/openwrt/toolchain/binutils/2.15.92.0.2/300-120_mips_xgot_multigot_workaround.patch
new file mode 100644
index 0000000000..ae2033d069
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/300-120_mips_xgot_multigot_workaround.patch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+## 120_mips_xgot_multigot_workaround.dpatch
+##
+## DP: Description: Make multigot/xgot handling mutually exclusive.
+## DP: Author: Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+## DP: Upstream status: Not submitted
+## DP: Date: 2004-09-17
+
+if [ $# -lt 1 ]; then
+    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+    -patch) patch -p1 ${patch_opts} < $0;;
+    -unpatch) patch -R -p1 ${patch_opts} < $0;;
+    *)
+        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+        exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c binutils-2.15/bfd/elfxx-mips.c
+--- /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:41:37.156466673 +0100
++++ binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:42:15.998362861 +0100
+@@ -5883,6 +5883,8 @@
+   s->size += i * MIPS_ELF_GOT_SIZE (output_bfd);
+ 
+   if (s->size > MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++      && g->global_gotno <= (MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++                            / MIPS_ELF_GOT_SIZE (output_bfd))
+       && ! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
+     return FALSE;
+ 
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15.92.0.2/600-arm-textrel.patch
new file mode 100644
index 0000000000..d234181608
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/600-arm-textrel.patch
@@ -0,0 +1,54 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/2.15.92.0.2/702-binutils-skip-comments.patch b/openwrt/toolchain/binutils/2.15.92.0.2/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..804a17e006
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.92.0.2/702-binutils-skip-comments.patch
@@ -0,0 +1,101 @@
+Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html
+Fixes
+localealias.s:544: Error: junk at end of line, first unrecognized character is `,' 
+when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3
+
+Paths adjusted to match crosstool's patcher.
+
+Message-Id: m3n052qw2g.fsf@whitebox.m5r.de
+From: Andreas Schwab <schwab at suse dot de>
+To: Nathan Sidwell <nathan at codesourcery dot com>
+Cc: Ian Lance Taylor <ian at wasabisystems dot com>, binutils at sources dot redhat dot com
+Date: Fri, 23 Apr 2004 22:27:19 +0200
+Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line
+
+Nathan Sidwell <nathan@codesourcery.com> writes:
+
+> Index: read.c
+> ===================================================================
+> RCS file: /cvs/src/src/gas/read.c,v
+> retrieving revision 1.76
+> diff -c -3 -p -r1.76 read.c
+> *** read.c	12 Mar 2004 17:48:12 -0000	1.76
+> --- read.c	18 Mar 2004 09:56:05 -0000
+> *************** read_a_source_file (char *name)
+> *** 1053,1059 ****
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  ignore_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+> --- 1053,1059 ----
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  demand_empty_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+
+This means that the unknown character is no longer ignored, despite the
+comment.  As a side effect a line starting with a line comment character
+not followed by APP in NO_APP mode now triggers an error instead of just a
+warning, breaking builds of glibc on m68k-linux.  Earlier in
+read_a_source_file where #APP is handled there is another comment that
+claims that unknown comments are ignored, when in fact they aren't (only
+the initial line comment character is skipped).
+
+Note that the presence of #APP will mess up the line counters, but
+that appears to be difficult to fix.
+
+Andreas.
+
+2004-04-23  Andreas Schwab  <schwab@suse.de>
+
+	* read.c (read_a_source_file): Ignore unknown text after line
+	comment character.  Fix misleading comment.
+
+--- binutils/gas/read.c.~1.78.~	2004-04-23 08:58:23.000000000 +0200
++++ binutils/gas/read.c	2004-04-23 21:49:01.000000000 +0200
+@@ -1,6 +1,6 @@
+ /* read.c - read a source file -
+    Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+-   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GAS, the GNU Assembler.
+ 
+@@ -950,10 +950,14 @@ read_a_source_file (char *name)
+ 	      unsigned int new_length;
+ 	      char *tmp_buf = 0;
+ 
+-	      bump_line_counters ();
+ 	      s = input_line_pointer;
+ 	      if (strncmp (s, "APP\n", 4))
+-		continue;	/* We ignore it */
++		{
++		  /* We ignore it */
++		  ignore_rest_of_line ();
++		  continue;
++		}
++	      bump_line_counters ();
+ 	      s += 4;
+ 
+ 	      sb_new (&sbuf);
+@@ -1052,7 +1056,7 @@ read_a_source_file (char *name)
+ 	    continue;
+ #endif
+ 	  input_line_pointer--;
+-	  /* Report unknown char as ignored.  */
++	  /* Report unknown char as error.  */
+ 	  demand_empty_rest_of_line ();
+ 	}
+ 
+
+-- 
+Andreas Schwab, SuSE Labs, schwab@suse.de
+SuSE Linux AG, Maxfeldstra&#xC3;e 5, 90409 N&#xC3;rnberg, Germany
+Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
+"And now for something completely different."
diff --git a/openwrt/toolchain/binutils/2.15.94.0.1/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.94.0.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..dda2b4ffa2
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.1/100-uclibc-conf.patch
@@ -0,0 +1,734 @@
+diff -ur binutils-2.15.94.0.1.orig/bfd/config.bfd binutils-2.15.94.0.1/bfd/config.bfd
+--- binutils-2.15.94.0.1.orig/bfd/config.bfd	2004-11-22 21:29:57.791886144 -0500
++++ binutils-2.15.94.0.1/bfd/config.bfd	2004-11-22 21:30:53.195463520 -0500
+@@ -140,7 +140,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -150,7 +150,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -227,7 +227,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -235,8 +235,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+-  arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+   arm*-*-eabi* )
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -381,7 +381,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -392,7 +392,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -525,7 +525,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -539,7 +539,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -715,7 +715,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -1001,7 +1001,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1038,8 +1039,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1206,7 +1207,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1253,7 +1254,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1322,7 +1323,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -ur binutils-2.15.94.0.1.orig/bfd/configure binutils-2.15.94.0.1/bfd/configure
+--- binutils-2.15.94.0.1.orig/bfd/configure	2004-11-22 21:29:57.794885688 -0500
++++ binutils-2.15.94.0.1/bfd/configure	2004-11-22 21:31:10.011907032 -0500
+@@ -3583,6 +3583,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -9914,7 +9919,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -9978,7 +9983,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -10016,7 +10021,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -10150,7 +10155,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -ur binutils-2.15.94.0.1.orig/bfd/configure.in binutils-2.15.94.0.1/bfd/configure.in
+--- binutils-2.15.94.0.1.orig/bfd/configure.in	2004-11-22 21:29:57.794885688 -0500
++++ binutils-2.15.94.0.1/bfd/configure.in	2004-11-22 21:31:23.225898200 -0500
+@@ -163,7 +163,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -248,7 +248,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -289,7 +289,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -375,7 +375,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -ur binutils-2.15.94.0.1.orig/binutils/configure binutils-2.15.94.0.1/binutils/configure
+--- binutils-2.15.94.0.1.orig/binutils/configure	2004-11-22 21:29:57.923866080 -0500
++++ binutils-2.15.94.0.1/binutils/configure	2004-11-22 21:31:47.597193200 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.1.orig/configure binutils-2.15.94.0.1/configure
+--- binutils-2.15.94.0.1.orig/configure	2004-11-22 21:29:57.902869272 -0500
++++ binutils-2.15.94.0.1/configure	2004-11-22 21:31:47.601192592 -0500
+@@ -1341,6 +1341,18 @@
+   i[3456789]86-*-coff | i[3456789]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -ur binutils-2.15.94.0.1.orig/configure.in binutils-2.15.94.0.1/configure.in
+--- binutils-2.15.94.0.1.orig/configure.in	2004-11-22 21:29:57.902869272 -0500
++++ binutils-2.15.94.0.1/configure.in	2004-11-22 21:31:47.606191832 -0500
+@@ -563,6 +563,18 @@
+   i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -ur binutils-2.15.94.0.1.orig/gas/configure binutils-2.15.94.0.1/gas/configure
+--- binutils-2.15.94.0.1.orig/gas/configure	2004-11-22 21:29:58.078842520 -0500
++++ binutils-2.15.94.0.1/gas/configure	2004-11-22 21:34:12.759125232 -0500
+@@ -3420,6 +3420,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4256,6 +4261,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4271,6 +4277,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4284,6 +4291,7 @@
+ 
+       cris-*-linux-gnu* | crisv32-*-linux-gnu*)
+ 					fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-* | crisv32-*-*)		fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -4343,7 +4351,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4403,6 +4413,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4430,6 +4441,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4504,6 +4516,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4531,7 +4544,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4566,6 +4581,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -ur binutils-2.15.94.0.1.orig/gas/configure.in binutils-2.15.94.0.1/gas/configure.in
+--- binutils-2.15.94.0.1.orig/gas/configure.in	2004-11-22 21:29:58.079842368 -0500
++++ binutils-2.15.94.0.1/gas/configure.in	2004-11-22 21:34:12.763124624 -0500
+@@ -202,6 +202,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -217,6 +218,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -230,6 +232,7 @@
+ 
+       cris-*-linux-gnu* | crisv32-*-linux-gnu*)
+ 					fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-* | crisv32-*-*)		fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -289,7 +292,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -342,6 +347,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -369,6 +375,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -440,6 +447,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -460,7 +468,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -491,6 +501,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -ur binutils-2.15.94.0.1.orig/gprof/configure binutils-2.15.94.0.1/gprof/configure
+--- binutils-2.15.94.0.1.orig/gprof/configure	2004-11-22 21:29:58.628758920 -0500
++++ binutils-2.15.94.0.1/gprof/configure	2004-11-22 21:34:12.777122496 -0500
+@@ -3418,6 +3418,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.1.orig/ld/configure binutils-2.15.94.0.1/ld/configure
+--- binutils-2.15.94.0.1.orig/ld/configure	2004-11-22 21:29:58.752740072 -0500
++++ binutils-2.15.94.0.1/ld/configure	2004-11-22 21:34:12.784121432 -0500
+@@ -1579,6 +1579,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.1.orig/ld/configure.tgt binutils-2.15.94.0.1/ld/configure.tgt
+--- binutils-2.15.94.0.1.orig/ld/configure.tgt	2004-11-22 21:29:58.753739920 -0500
++++ binutils-2.15.94.0.1/ld/configure.tgt	2004-11-22 21:38:50.336926992 -0500
+@@ -32,6 +32,7 @@
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu* | cris-*-linux-gnu*)
+ 			targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-* | crisv32-*-*)	targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -62,14 +63,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -121,7 +124,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -132,7 +137,7 @@
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ maxq-*-coff)            targ_emul=maxqcoff;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -156,14 +161,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -263,11 +270,14 @@
+ arm-*-kaos*)		targ_emul=armelf ;;
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnueabi)	targ_emul=armelf_linux_eabi ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -371,7 +381,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -388,9 +399,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -403,6 +414,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -436,16 +448,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -468,6 +480,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -ur binutils-2.15.94.0.1.orig/ld/emultempl/elf32.em binutils-2.15.94.0.1/ld/emultempl/elf32.em
+--- binutils-2.15.94.0.1.orig/ld/emultempl/elf32.em	2004-11-22 21:29:58.763738400 -0500
++++ binutils-2.15.94.0.1/ld/emultempl/elf32.em	2004-11-22 21:38:50.338926688 -0500
+@@ -65,7 +65,7 @@
+ 
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+   cat >>e${EMULATION_NAME}.c <<EOF
+ #include <glob.h>
+ EOF
+@@ -337,7 +337,7 @@
+ 
+ EOF
+ case ${target} in
+-  *-*-linux-gnu*)
++  *-*-linux-gnu* | *-*-linux-uclibc*)
+     cat >>e${EMULATION_NAME}.c <<EOF
+ 	  {
+ 	    struct bfd_link_needed_list *l;
+@@ -510,7 +510,7 @@
+ 
+ EOF
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ /* For a native linker, check the file /etc/ld.so.conf for directories
+    in which we may find shared libraries.  /etc/ld.so.conf is really
+@@ -894,7 +894,7 @@
+ EOF
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ 	  if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ 	    break;
+diff -ur binutils-2.15.94.0.1.orig/libtool.m4 binutils-2.15.94.0.1/libtool.m4
+--- binutils-2.15.94.0.1.orig/libtool.m4	2004-11-22 21:29:57.000000000 -0500
++++ binutils-2.15.94.0.1/libtool.m4	2004-11-22 21:38:50.339926536 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -ur binutils-2.15.94.0.1.orig/ltconfig binutils-2.15.94.0.1/ltconfig
+--- binutils-2.15.94.0.1.orig/ltconfig	2004-11-22 21:29:57.000000000 -0500
++++ binutils-2.15.94.0.1/ltconfig	2004-11-22 21:38:50.341926232 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1270,6 +1271,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -ur binutils-2.15.94.0.1.orig/opcodes/configure binutils-2.15.94.0.1/opcodes/configure
+--- binutils-2.15.94.0.1.orig/opcodes/configure	2004-11-22 21:29:59.114685048 -0500
++++ binutils-2.15.94.0.1/opcodes/configure	2004-11-22 21:38:50.354924256 -0500
+@@ -3587,6 +3587,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.94.0.1/300-001_ld_makefile_patch.patch b/openwrt/toolchain/binutils/2.15.94.0.1/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..b25d5b7e21
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.1/300-001_ld_makefile_patch.patch
@@ -0,0 +1,52 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am binutils-2.14.90.0.6/ld/Makefile.am
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.am	2003-09-10 23:12:09.000000000 +0100
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in binutils-2.14.90.0.6/ld/Makefile.in
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.in	2003-09-10 23:12:09.000000000 +0100
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
diff --git a/openwrt/toolchain/binutils/2.15.94.0.1/300-006_better_file_error.patch b/openwrt/toolchain/binutils/2.15.94.0.1/300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.1/300-006_better_file_error.patch
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c	2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c	2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
diff --git a/openwrt/toolchain/binutils/2.15.94.0.1/300-012_check_ldrunpath_length.patch b/openwrt/toolchain/binutils/2.15.94.0.1/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.1/300-012_check_ldrunpath_length.patch
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ 						      force))
+ 		break;
+@@ -871,6 +873,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf_size_dynamic_sections
+ 	 (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
diff --git a/openwrt/toolchain/binutils/2.15.94.0.1/300-120_mips_xgot_multigot_workaround.patch b/openwrt/toolchain/binutils/2.15.94.0.1/300-120_mips_xgot_multigot_workaround.patch
new file mode 100644
index 0000000000..ae2033d069
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.1/300-120_mips_xgot_multigot_workaround.patch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+## 120_mips_xgot_multigot_workaround.dpatch
+##
+## DP: Description: Make multigot/xgot handling mutually exclusive.
+## DP: Author: Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+## DP: Upstream status: Not submitted
+## DP: Date: 2004-09-17
+
+if [ $# -lt 1 ]; then
+    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+    -patch) patch -p1 ${patch_opts} < $0;;
+    -unpatch) patch -R -p1 ${patch_opts} < $0;;
+    *)
+        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+        exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c binutils-2.15/bfd/elfxx-mips.c
+--- /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:41:37.156466673 +0100
++++ binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:42:15.998362861 +0100
+@@ -5883,6 +5883,8 @@
+   s->size += i * MIPS_ELF_GOT_SIZE (output_bfd);
+ 
+   if (s->size > MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++      && g->global_gotno <= (MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++                            / MIPS_ELF_GOT_SIZE (output_bfd))
+       && ! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
+     return FALSE;
+ 
diff --git a/openwrt/toolchain/binutils/2.15.94.0.1/702-binutils-skip-comments.patch b/openwrt/toolchain/binutils/2.15.94.0.1/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..804a17e006
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.1/702-binutils-skip-comments.patch
@@ -0,0 +1,101 @@
+Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html
+Fixes
+localealias.s:544: Error: junk at end of line, first unrecognized character is `,' 
+when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3
+
+Paths adjusted to match crosstool's patcher.
+
+Message-Id: m3n052qw2g.fsf@whitebox.m5r.de
+From: Andreas Schwab <schwab at suse dot de>
+To: Nathan Sidwell <nathan at codesourcery dot com>
+Cc: Ian Lance Taylor <ian at wasabisystems dot com>, binutils at sources dot redhat dot com
+Date: Fri, 23 Apr 2004 22:27:19 +0200
+Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line
+
+Nathan Sidwell <nathan@codesourcery.com> writes:
+
+> Index: read.c
+> ===================================================================
+> RCS file: /cvs/src/src/gas/read.c,v
+> retrieving revision 1.76
+> diff -c -3 -p -r1.76 read.c
+> *** read.c	12 Mar 2004 17:48:12 -0000	1.76
+> --- read.c	18 Mar 2004 09:56:05 -0000
+> *************** read_a_source_file (char *name)
+> *** 1053,1059 ****
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  ignore_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+> --- 1053,1059 ----
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  demand_empty_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+
+This means that the unknown character is no longer ignored, despite the
+comment.  As a side effect a line starting with a line comment character
+not followed by APP in NO_APP mode now triggers an error instead of just a
+warning, breaking builds of glibc on m68k-linux.  Earlier in
+read_a_source_file where #APP is handled there is another comment that
+claims that unknown comments are ignored, when in fact they aren't (only
+the initial line comment character is skipped).
+
+Note that the presence of #APP will mess up the line counters, but
+that appears to be difficult to fix.
+
+Andreas.
+
+2004-04-23  Andreas Schwab  <schwab@suse.de>
+
+	* read.c (read_a_source_file): Ignore unknown text after line
+	comment character.  Fix misleading comment.
+
+--- binutils/gas/read.c.~1.78.~	2004-04-23 08:58:23.000000000 +0200
++++ binutils/gas/read.c	2004-04-23 21:49:01.000000000 +0200
+@@ -1,6 +1,6 @@
+ /* read.c - read a source file -
+    Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+-   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GAS, the GNU Assembler.
+ 
+@@ -950,10 +950,14 @@ read_a_source_file (char *name)
+ 	      unsigned int new_length;
+ 	      char *tmp_buf = 0;
+ 
+-	      bump_line_counters ();
+ 	      s = input_line_pointer;
+ 	      if (strncmp (s, "APP\n", 4))
+-		continue;	/* We ignore it */
++		{
++		  /* We ignore it */
++		  ignore_rest_of_line ();
++		  continue;
++		}
++	      bump_line_counters ();
+ 	      s += 4;
+ 
+ 	      sb_new (&sbuf);
+@@ -1052,7 +1056,7 @@ read_a_source_file (char *name)
+ 	    continue;
+ #endif
+ 	  input_line_pointer--;
+-	  /* Report unknown char as ignored.  */
++	  /* Report unknown char as error.  */
+ 	  demand_empty_rest_of_line ();
+ 	}
+ 
+
+-- 
+Andreas Schwab, SuSE Labs, schwab@suse.de
+SuSE Linux AG, Maxfeldstra&#xC3;e 5, 90409 N&#xC3;rnberg, Germany
+Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
+"And now for something completely different."
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15.94.0.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..dc21386f42
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2/100-uclibc-conf.patch
@@ -0,0 +1,749 @@
+diff -ur binutils-2.15.94.0.2.orig/bfd/config.bfd binutils-2.15.94.0.2/bfd/config.bfd
+--- binutils-2.15.94.0.2.orig/bfd/config.bfd	2004-12-22 15:00:57.219024360 -0500
++++ binutils-2.15.94.0.2/bfd/config.bfd	2004-12-22 15:01:18.982715776 -0500
+@@ -140,7 +140,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -150,7 +150,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -227,7 +227,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -235,8 +235,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
+-  arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks | \
+   arm*-*-eabi* )
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -381,7 +381,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -392,7 +392,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -525,7 +525,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -539,7 +539,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -715,7 +715,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -1001,7 +1001,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -1038,8 +1039,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1209,7 +1210,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1256,7 +1257,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1325,7 +1326,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -ur binutils-2.15.94.0.2.orig/bfd/configure binutils-2.15.94.0.2/bfd/configure
+--- binutils-2.15.94.0.2.orig/bfd/configure	2004-12-22 15:00:57.221024056 -0500
++++ binutils-2.15.94.0.2/bfd/configure	2004-12-22 15:01:18.996713648 -0500
+@@ -3583,6 +3583,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -9914,7 +9919,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -9978,7 +9983,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -10016,7 +10021,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -10150,7 +10155,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -ur binutils-2.15.94.0.2.orig/bfd/configure.in binutils-2.15.94.0.2/bfd/configure.in
+--- binutils-2.15.94.0.2.orig/bfd/configure.in	2004-12-22 15:00:57.223023752 -0500
++++ binutils-2.15.94.0.2/bfd/configure.in	2004-12-22 15:01:18.998713344 -0500
+@@ -163,7 +163,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -248,7 +248,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -289,7 +289,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -375,7 +375,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -ur binutils-2.15.94.0.2.orig/binutils/configure binutils-2.15.94.0.2/binutils/configure
+--- binutils-2.15.94.0.2.orig/binutils/configure	2004-12-22 15:00:57.351004296 -0500
++++ binutils-2.15.94.0.2/binutils/configure	2004-12-22 15:01:19.002712736 -0500
+@@ -1575,6 +1575,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/configure binutils-2.15.94.0.2/configure
+--- binutils-2.15.94.0.2.orig/configure	2004-12-22 15:00:57.321008856 -0500
++++ binutils-2.15.94.0.2/configure	2004-12-22 15:01:19.007711976 -0500
+@@ -1352,6 +1352,18 @@
+   i[3456789]86-*-coff | i[3456789]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -ur binutils-2.15.94.0.2.orig/configure.in binutils-2.15.94.0.2/configure.in
+--- binutils-2.15.94.0.2.orig/configure.in	2004-12-22 15:00:57.321008856 -0500
++++ binutils-2.15.94.0.2/configure.in	2004-12-22 15:01:19.010711520 -0500
+@@ -561,6 +561,18 @@
+   i[[3456789]]86-*-coff | i[[3456789]]86-*-elf)
+     noconfigdirs="$noconfigdirs ${libgcj}"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -ur binutils-2.15.94.0.2.orig/gas/configure binutils-2.15.94.0.2/gas/configure
+--- binutils-2.15.94.0.2.orig/gas/configure	2004-12-22 15:00:57.461987424 -0500
++++ binutils-2.15.94.0.2/gas/configure	2004-12-22 15:01:19.019710152 -0500
+@@ -3420,6 +3420,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4256,6 +4261,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4272,6 +4278,7 @@
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnueabi*)		fmt=elf  em=armlinuxeabi ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4285,6 +4292,7 @@
+ 
+       cris-*-linux-gnu* | crisv32-*-linux-gnu*)
+ 					fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-* | crisv32-*-*)		fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -4344,7 +4352,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4404,6 +4414,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4431,6 +4442,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4505,6 +4517,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4532,7 +4545,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-tpf*)			fmt=elf ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+@@ -4568,6 +4583,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -ur binutils-2.15.94.0.2.orig/gas/configure.in binutils-2.15.94.0.2/gas/configure.in
+--- binutils-2.15.94.0.2.orig/gas/configure.in	2004-12-22 15:00:57.461987424 -0500
++++ binutils-2.15.94.0.2/gas/configure.in	2004-12-22 15:01:19.022709696 -0500
+@@ -202,6 +202,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -218,6 +219,7 @@
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnueabi*)		fmt=elf  em=armlinuxeabi ;;	 
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -231,6 +233,7 @@
+ 
+       cris-*-linux-gnu* | crisv32-*-linux-gnu*)
+ 					fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-* | crisv32-*-*)		fmt=multi bfd_gas=yes ;;
+ 
+       crx-*-elf*)	    		fmt=elf ;;
+@@ -290,7 +293,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -343,6 +348,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -370,6 +376,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -441,6 +448,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -461,7 +469,9 @@
+       ppc-*-lynxos*)			fmt=elf em=lynx bfd_gas=yes ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-tpf*)			fmt=elf ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+@@ -493,6 +503,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -ur binutils-2.15.94.0.2.orig/gprof/configure binutils-2.15.94.0.2/gprof/configure
+--- binutils-2.15.94.0.2.orig/gprof/configure	2004-12-22 15:00:57.949913248 -0500
++++ binutils-2.15.94.0.2/gprof/configure	2004-12-22 15:01:19.030708480 -0500
+@@ -3418,6 +3418,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/ld/configure binutils-2.15.94.0.2/ld/configure
+--- binutils-2.15.94.0.2.orig/ld/configure	2004-12-22 15:00:58.032900632 -0500
++++ binutils-2.15.94.0.2/ld/configure	2004-12-22 15:01:19.035707720 -0500
+@@ -1579,6 +1579,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/ld/configure.tgt binutils-2.15.94.0.2/ld/configure.tgt
+--- binutils-2.15.94.0.2.orig/ld/configure.tgt	2004-12-22 15:00:58.033900480 -0500
++++ binutils-2.15.94.0.2/ld/configure.tgt	2004-12-22 15:01:19.036707568 -0500
+@@ -32,6 +32,7 @@
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu* | cris-*-linux-gnu*)
+ 			targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-* | crisv32-*-*)	targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -62,14 +63,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -121,7 +124,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -132,7 +137,7 @@
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ maxq-*-coff)            targ_emul=maxqcoff;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -156,14 +161,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -263,11 +270,14 @@
+ arm-*-kaos*)		targ_emul=armelf ;;
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnueabi)	targ_emul=armelf_linux_eabi ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -371,7 +381,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -388,9 +399,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -403,6 +414,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -436,16 +448,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -468,6 +480,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -ur binutils-2.15.94.0.2.orig/ld/emultempl/elf32.em binutils-2.15.94.0.2/ld/emultempl/elf32.em
+--- binutils-2.15.94.0.2.orig/ld/emultempl/elf32.em	2004-12-22 15:00:58.044898808 -0500
++++ binutils-2.15.94.0.2/ld/emultempl/elf32.em	2004-12-22 15:01:19.038707264 -0500
+@@ -65,7 +65,7 @@
+ 
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+   cat >>e${EMULATION_NAME}.c <<EOF
+ #include <glob.h>
+ EOF
+@@ -337,7 +337,7 @@
+ 
+ EOF
+ case ${target} in
+-  *-*-linux-gnu*)
++  *-*-linux-gnu* | *-*-linux-uclibc*)
+     cat >>e${EMULATION_NAME}.c <<EOF
+ 	  {
+ 	    struct bfd_link_needed_list *l;
+@@ -510,7 +510,7 @@
+ 
+ EOF
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ /* For a native linker, check the file /etc/ld.so.conf for directories
+    in which we may find shared libraries.  /etc/ld.so.conf is really
+@@ -894,7 +894,7 @@
+ EOF
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-gnu*)
++    *-*-linux-gnu* | *-*-linux-uclibc*)
+       cat >>e${EMULATION_NAME}.c <<EOF
+ 	  if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ 	    break;
+diff -ur binutils-2.15.94.0.2.orig/libiberty/configure binutils-2.15.94.0.2/libiberty/configure
+--- binutils-2.15.94.0.2.orig/libiberty/configure	2004-12-22 15:00:59.263713520 -0500
++++ binutils-2.15.94.0.2/libiberty/configure	2004-12-22 15:03:55.744884304 -0500
+@@ -3682,6 +3682,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -ur binutils-2.15.94.0.2.orig/libtool.m4 binutils-2.15.94.0.2/libtool.m4
+--- binutils-2.15.94.0.2.orig/libtool.m4	2004-12-22 15:00:57.329007640 -0500
++++ binutils-2.15.94.0.2/libtool.m4	2004-12-22 15:01:19.039707112 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -ur binutils-2.15.94.0.2.orig/ltconfig binutils-2.15.94.0.2/ltconfig
+--- binutils-2.15.94.0.2.orig/ltconfig	2004-12-22 15:00:57.330007488 -0500
++++ binutils-2.15.94.0.2/ltconfig	2004-12-22 15:01:19.041706808 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1270,6 +1271,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -ur binutils-2.15.94.0.2.orig/opcodes/configure binutils-2.15.94.0.2/opcodes/configure
+--- binutils-2.15.94.0.2.orig/opcodes/configure	2004-12-22 15:00:59.334702728 -0500
++++ binutils-2.15.94.0.2/opcodes/configure	2004-12-22 15:01:19.053704984 -0500
+@@ -3587,6 +3587,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2/300-001_ld_makefile_patch.patch b/openwrt/toolchain/binutils/2.15.94.0.2/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..b25d5b7e21
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2/300-001_ld_makefile_patch.patch
@@ -0,0 +1,52 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am binutils-2.14.90.0.6/ld/Makefile.am
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.am	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.am	2003-09-10 23:12:09.000000000 +0100
+@@ -19,7 +19,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in binutils-2.14.90.0.6/ld/Makefile.in
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/ld/Makefile.in	2003-08-21 16:28:48.000000000 +0100
++++ binutils-2.14.90.0.6/ld/Makefile.in	2003-09-10 23:12:09.000000000 +0100
+@@ -128,7 +128,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2/300-006_better_file_error.patch b/openwrt/toolchain/binutils/2.15.94.0.2/300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2/300-006_better_file_error.patch
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c	2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c	2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2/300-012_check_ldrunpath_length.patch b/openwrt/toolchain/binutils/2.15.94.0.2/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2/300-012_check_ldrunpath_length.patch
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		  lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ 						      force))
+ 		break;
+@@ -871,6 +873,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf_size_dynamic_sections
+ 	 (output_bfd, command_line.soname, rpath,
+ 	  command_line.filter_shlib,
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2/300-120_mips_xgot_multigot_workaround.patch b/openwrt/toolchain/binutils/2.15.94.0.2/300-120_mips_xgot_multigot_workaround.patch
new file mode 100644
index 0000000000..ae2033d069
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2/300-120_mips_xgot_multigot_workaround.patch
@@ -0,0 +1,39 @@
+#! /bin/sh -e
+## 120_mips_xgot_multigot_workaround.dpatch
+##
+## DP: Description: Make multigot/xgot handling mutually exclusive.
+## DP: Author: Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+## DP: Upstream status: Not submitted
+## DP: Date: 2004-09-17
+
+if [ $# -lt 1 ]; then
+    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+    -patch) patch -p1 ${patch_opts} < $0;;
+    -unpatch) patch -R -p1 ${patch_opts} < $0;;
+    *)
+        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+        exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c binutils-2.15/bfd/elfxx-mips.c
+--- /home/james/debian/packages/binutils/binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:41:37.156466673 +0100
++++ binutils-2.15/bfd/elfxx-mips.c	2004-09-23 22:42:15.998362861 +0100
+@@ -5883,6 +5883,8 @@
+   s->size += i * MIPS_ELF_GOT_SIZE (output_bfd);
+ 
+   if (s->size > MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++      && g->global_gotno <= (MIPS_ELF_GOT_MAX_SIZE (output_bfd)
++                            / MIPS_ELF_GOT_SIZE (output_bfd))
+       && ! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
+     return FALSE;
+ 
diff --git a/openwrt/toolchain/binutils/2.15.94.0.2/702-binutils-skip-comments.patch b/openwrt/toolchain/binutils/2.15.94.0.2/702-binutils-skip-comments.patch
new file mode 100644
index 0000000000..804a17e006
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15.94.0.2/702-binutils-skip-comments.patch
@@ -0,0 +1,101 @@
+Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html
+Fixes
+localealias.s:544: Error: junk at end of line, first unrecognized character is `,' 
+when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3
+
+Paths adjusted to match crosstool's patcher.
+
+Message-Id: m3n052qw2g.fsf@whitebox.m5r.de
+From: Andreas Schwab <schwab at suse dot de>
+To: Nathan Sidwell <nathan at codesourcery dot com>
+Cc: Ian Lance Taylor <ian at wasabisystems dot com>, binutils at sources dot redhat dot com
+Date: Fri, 23 Apr 2004 22:27:19 +0200
+Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line
+
+Nathan Sidwell <nathan@codesourcery.com> writes:
+
+> Index: read.c
+> ===================================================================
+> RCS file: /cvs/src/src/gas/read.c,v
+> retrieving revision 1.76
+> diff -c -3 -p -r1.76 read.c
+> *** read.c	12 Mar 2004 17:48:12 -0000	1.76
+> --- read.c	18 Mar 2004 09:56:05 -0000
+> *************** read_a_source_file (char *name)
+> *** 1053,1059 ****
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  ignore_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+> --- 1053,1059 ----
+>   #endif
+>   	  input_line_pointer--;
+>   	  /* Report unknown char as ignored.  */
+> ! 	  demand_empty_rest_of_line ();
+>   	}
+>   
+>   #ifdef md_after_pass_hook
+
+This means that the unknown character is no longer ignored, despite the
+comment.  As a side effect a line starting with a line comment character
+not followed by APP in NO_APP mode now triggers an error instead of just a
+warning, breaking builds of glibc on m68k-linux.  Earlier in
+read_a_source_file where #APP is handled there is another comment that
+claims that unknown comments are ignored, when in fact they aren't (only
+the initial line comment character is skipped).
+
+Note that the presence of #APP will mess up the line counters, but
+that appears to be difficult to fix.
+
+Andreas.
+
+2004-04-23  Andreas Schwab  <schwab@suse.de>
+
+	* read.c (read_a_source_file): Ignore unknown text after line
+	comment character.  Fix misleading comment.
+
+--- binutils/gas/read.c.~1.78.~	2004-04-23 08:58:23.000000000 +0200
++++ binutils/gas/read.c	2004-04-23 21:49:01.000000000 +0200
+@@ -1,6 +1,6 @@
+ /* read.c - read a source file -
+    Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+-   1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 
+ This file is part of GAS, the GNU Assembler.
+ 
+@@ -950,10 +950,14 @@ read_a_source_file (char *name)
+ 	      unsigned int new_length;
+ 	      char *tmp_buf = 0;
+ 
+-	      bump_line_counters ();
+ 	      s = input_line_pointer;
+ 	      if (strncmp (s, "APP\n", 4))
+-		continue;	/* We ignore it */
++		{
++		  /* We ignore it */
++		  ignore_rest_of_line ();
++		  continue;
++		}
++	      bump_line_counters ();
+ 	      s += 4;
+ 
+ 	      sb_new (&sbuf);
+@@ -1052,7 +1056,7 @@ read_a_source_file (char *name)
+ 	    continue;
+ #endif
+ 	  input_line_pointer--;
+-	  /* Report unknown char as ignored.  */
++	  /* Report unknown char as error.  */
+ 	  demand_empty_rest_of_line ();
+ 	}
+ 
+
+-- 
+Andreas Schwab, SuSE Labs, schwab@suse.de
+SuSE Linux AG, Maxfeldstra&#xC3;e 5, 90409 N&#xC3;rnberg, Germany
+Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
+"And now for something completely different."
diff --git a/openwrt/toolchain/binutils/2.15/100-uclibc-conf.patch b/openwrt/toolchain/binutils/2.15/100-uclibc-conf.patch
new file mode 100644
index 0000000000..1c7fa4a400
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15/100-uclibc-conf.patch
@@ -0,0 +1,692 @@
+diff -urN binutils-2.15-dist/bfd/config.bfd binutils-2.15/bfd/config.bfd
+--- binutils-2.15-dist/bfd/config.bfd	2004-05-17 14:35:56.000000000 -0500
++++ binutils-2.15/bfd/config.bfd	2004-08-04 12:01:44.000000000 -0500
+@@ -126,7 +126,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -136,7 +136,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-linux-uclibc* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -213,7 +213,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -221,7 +221,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -360,7 +360,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -371,7 +371,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc* | hppa*-*-netbsd*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -494,7 +494,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -508,7 +508,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -683,7 +683,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -955,7 +955,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -987,8 +988,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1149,7 +1150,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1196,7 +1197,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1265,7 +1266,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN binutils-2.15-dist/bfd/configure binutils-2.15/bfd/configure
+--- binutils-2.15-dist/bfd/configure	2004-05-17 14:35:57.000000000 -0500
++++ binutils-2.15/bfd/configure	2004-08-04 12:01:44.000000000 -0500
+@@ -1699,6 +1699,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5278,7 +5283,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5338,7 +5343,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5376,7 +5381,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5477,7 +5482,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15-dist/bfd/configure.in binutils-2.15/bfd/configure.in
+--- binutils-2.15-dist/bfd/configure.in	2004-05-17 14:35:57.000000000 -0500
++++ binutils-2.15/bfd/configure.in	2004-08-04 12:01:44.000000000 -0500
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -300,7 +300,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -385,7 +385,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN binutils-2.15-dist/binutils/configure binutils-2.15/binutils/configure
+--- binutils-2.15-dist/binutils/configure	2004-01-02 11:08:04.000000000 -0600
++++ binutils-2.15/binutils/configure	2004-08-04 12:01:44.000000000 -0500
+@@ -1585,6 +1585,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15-dist/configure binutils-2.15/configure
+--- binutils-2.15-dist/configure	2004-05-17 14:36:20.000000000 -0500
++++ binutils-2.15/configure	2004-08-04 12:01:44.000000000 -0500
+@@ -1288,6 +1288,18 @@
+   i[3456789]86-*-freebsd* | i[3456789]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15-dist/configure.in binutils-2.15/configure.in
+--- binutils-2.15-dist/configure.in	2004-05-17 14:40:54.000000000 -0500
++++ binutils-2.15/configure.in	2004-08-04 12:01:44.000000000 -0500
+@@ -521,6 +521,18 @@
+   i[[3456789]]86-*-freebsd* | i[[3456789]]86-*-kfreebsd*-gnu)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[[3456789]]86-*-linux-uclibc*)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.15-dist/gas/configure binutils-2.15/gas/configure
+--- binutils-2.15-dist/gas/configure	2004-05-17 14:36:07.000000000 -0500
++++ binutils-2.15/gas/configure	2004-08-04 12:07:50.000000000 -0500
+@@ -3400,6 +3400,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -4224,6 +4229,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -4240,6 +4246,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -4253,6 +4260,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -4310,7 +4318,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -4370,6 +4380,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -4397,6 +4408,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -4459,6 +4471,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -4486,7 +4499,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -4519,6 +4534,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15-dist/gas/configure.in binutils-2.15/gas/configure.in
+--- binutils-2.15-dist/gas/configure.in	2004-05-17 14:36:07.000000000 -0500
++++ binutils-2.15/gas/configure.in	2004-08-04 12:07:21.000000000 -0500
+@@ -194,6 +194,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -210,6 +211,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -223,6 +225,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -280,7 +283,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -333,6 +338,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -360,6 +366,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-uclinux*)			fmt=elf ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+@@ -419,6 +426,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf em=linux
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -439,7 +447,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -472,6 +482,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.15-dist/gprof/configure binutils-2.15/gprof/configure
+--- binutils-2.15-dist/gprof/configure	2003-08-26 12:19:19.000000000 -0500
++++ binutils-2.15/gprof/configure	2004-08-04 12:01:45.000000000 -0500
+@@ -1581,6 +1581,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15-dist/ld/configure binutils-2.15/ld/configure
+--- binutils-2.15-dist/ld/configure	2003-04-24 07:36:07.000000000 -0500
++++ binutils-2.15/ld/configure	2004-08-04 12:01:45.000000000 -0500
+@@ -1589,6 +1589,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.15-dist/ld/configure.tgt binutils-2.15/ld/configure.tgt
+--- binutils-2.15-dist/ld/configure.tgt	2004-05-17 14:36:15.000000000 -0500
++++ binutils-2.15/ld/configure.tgt	2004-08-04 12:01:45.000000000 -0500
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -118,7 +121,9 @@
+ m32r*le-*-elf*)         targ_emul=m32rlelf ;;
+ m32r*-*-elf*)           targ_emul=m32relf ;;
+ m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
++m32r*le-*-linux-uclibc*) targ_emul=m32rlelf_linux ;;
+ m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
++m32r*-*-linux-uclibc*)  targ_emul=m32relf_linux ;;
+ m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
+ 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
+ m68hc12-*-*|m6812-*-*)	targ_emul=m68hc12elf 
+@@ -128,7 +133,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -152,14 +157,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -259,10 +266,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -364,7 +374,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -381,9 +392,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -396,6 +407,7 @@
+ 			targ_emul=vaxnbsd
+ 			targ_extra_emuls=elf32vax ;;
+ vax-*-linux-gnu*)	targ_emul=elf32vax ;;
++vax-*-linux-uclibc*)	targ_emul=elf32vax ;;
+ mips*-*-pe)		targ_emul=mipspe ;
+ 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+ mips*-dec-ultrix*)	targ_emul=mipslit ;;
+@@ -429,16 +441,16 @@
+ mips*-*-vxworks*)	targ_emul=elf32ebmip
+ 		        targ_extra_emuls="elf32elmip" ;;
+ mips*-*-windiss)	targ_emul=elf32mipswindiss ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*)	targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*)	targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*)	targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*)	targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -461,6 +473,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.15-dist/libtool.m4 binutils-2.15/libtool.m4
+--- binutils-2.15-dist/libtool.m4	2003-04-10 22:58:39.000000000 -0500
++++ binutils-2.15/libtool.m4	2004-08-04 12:01:45.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.15-dist/ltconfig binutils-2.15/ltconfig
+--- binutils-2.15-dist/ltconfig	2003-10-03 23:54:47.000000000 -0500
++++ binutils-2.15/ltconfig	2004-08-04 12:01:45.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN binutils-2.15-dist/opcodes/configure binutils-2.15/opcodes/configure
+--- binutils-2.15-dist/opcodes/configure	2003-08-05 04:39:31.000000000 -0500
++++ binutils-2.15/opcodes/configure	2004-08-04 12:01:45.000000000 -0500
+@@ -1700,6 +1700,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/binutils/2.15/600-arm-textrel.patch b/openwrt/toolchain/binutils/2.15/600-arm-textrel.patch
new file mode 100644
index 0000000000..73d5b9df8e
--- /dev/null
+++ b/openwrt/toolchain/binutils/2.15/600-arm-textrel.patch
@@ -0,0 +1,63 @@
+http://sources.redhat.com/ml/binutils/2004-06/msg00010.html
+--- binutils-2.15.90.0.3-old/bfd/elf32-arm.h	2004-04-12 14:56:33.000000000 -0500
++++ binutils-2.15.90.0.3/bfd/elf32-arm.h	2004-09-03 06:56:40.000000000 -0500
+@@ -87,6 +87,8 @@
+ #endif
+ static bfd_boolean allocate_dynrelocs 
+   PARAMS ((struct elf_link_hash_entry *h, PTR inf));
++static bfd_boolean elf32_arm_readonly_dynrelocs
++  PARAMS ((struct elf_link_hash_entry *, PTR));
+ static bfd_boolean create_got_section 
+   PARAMS ((bfd * dynobj, struct bfd_link_info * info));
+ static bfd_boolean elf32_arm_create_dynamic_sections 
+@@ -3531,6 +3533,37 @@
+   return TRUE;
+ }
+ 
++/* Find any dynamic relocs that apply to read-only sections.  */
++
++static bfd_boolean
++elf32_arm_readonly_dynrelocs (h, inf)
++     struct elf_link_hash_entry *h;
++     PTR inf;
++{
++  struct elf32_arm_link_hash_entry *eh;
++  struct elf32_arm_relocs_copied *p;
++
++  if (h->root.type == bfd_link_hash_warning)
++    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++
++  eh = (struct elf32_arm_link_hash_entry *) h;
++  for (p = eh->relocs_copied; p != NULL; p = p->next)
++    {
++      asection *s = p->section;
++
++      if (s != NULL && (s->flags & SEC_READONLY) != 0)
++       {
++         struct bfd_link_info *info = (struct bfd_link_info *) inf;
++
++         info->flags |= DF_TEXTREL;
++
++         /* Not an error, just cut short the traversal.  */
++         return FALSE;
++       }
++    }
++  return TRUE;
++}
++
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+@@ -3740,6 +3773,12 @@
+ 	    return FALSE;
+ 	}
+ 
++      /* If any dynamic relocs apply to a read-only section,
++         then we need a DT_TEXTREL entry.  */
++      if ((info->flags & DF_TEXTREL) == 0)
++        elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs,
++                                (PTR) info);
++
+       if ((info->flags & DF_TEXTREL) != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
diff --git a/openwrt/toolchain/binutils/Config.in b/openwrt/toolchain/binutils/Config.in
new file mode 100644
index 0000000000..d1d62955d8
--- /dev/null
+++ b/openwrt/toolchain/binutils/Config.in
@@ -0,0 +1,66 @@
+# Choose binutils version.
+
+comment "Binutils Options"
+
+choice
+	prompt "Binutils Version"
+	default BR2_BINUTILS_VERSION_2_15_91_0_2
+	help
+	  Select the version of binutils you wish to use.
+
+	config BR2_BINUTILS_VERSION_2_14_90_0_6
+		bool "binutils 2.14.90.0.6"
+
+	config BR2_BINUTILS_VERSION_2_14_90_0_7
+		bool "binutils 2.14.90.0.7"
+
+	config BR2_BINUTILS_VERSION_2_14_90_0_8
+		bool "binutils 2.14.90.0.8"
+
+	config BR2_BINUTILS_VERSION_2_15
+		bool "binutils 2.15"
+
+	config BR2_BINUTILS_VERSION_2_15_90_0_1
+		bool "binutils 2.15.90.0.1"
+
+	config BR2_BINUTILS_VERSION_2_15_90_0_1_1
+		bool "binutils 2.15.90.0.1.1"
+
+	config BR2_BINUTILS_VERSION_2_15_90_0_2
+		bool "binutils 2.15.90.0.2"
+
+	config BR2_BINUTILS_VERSION_2_15_90_0_3
+		bool "binutils 2.15.90.0.3"
+
+	config BR2_BINUTILS_VERSION_2_15_91_0_1
+		bool "binutils 2.15.91.0.1"
+
+	config BR2_BINUTILS_VERSION_2_15_91_0_2
+		bool "binutils 2.15.91.0.2"
+
+	config BR2_BINUTILS_VERSION_2_15_92_0_2
+		bool "binutils 2.15.92.0.2"
+
+	config BR2_BINUTILS_VERSION_2_15_94_0_1
+		bool "binutils 2.15.94.0.1"
+
+	config BR2_BINUTILS_VERSION_2_15_94_0_2
+		bool "binutils 2.15.94.0.2"
+
+endchoice
+
+config BR2_BINUTILS_VERSION
+	string
+	default "2.14.90.0.6"     if BR2_BINUTILS_VERSION_2_14_90_0_6
+	default "2.14.90.0.7"     if BR2_BINUTILS_VERSION_2_14_90_0_7
+	default "2.14.90.0.8"     if BR2_BINUTILS_VERSION_2_14_90_0_8
+	default "2.15"            if BR2_BINUTILS_VERSION_2_15
+	default "2.15.90.0.1"     if BR2_BINUTILS_VERSION_2_15_90_0_1
+	default "2.15.90.0.0.1.1" if BR2_BINUTILS_VERSION_2_15_90_0_1_1
+	default "2.15.90.0.2"     if BR2_BINUTILS_VERSION_2_15_90_0_2
+	default "2.15.90.0.3"     if BR2_BINUTILS_VERSION_2_15_90_0_3
+	default "2.15.91.0.1"     if BR2_BINUTILS_VERSION_2_15_91_0_1
+	default "2.15.91.0.2"     if BR2_BINUTILS_VERSION_2_15_91_0_2
+	default "2.15.92.0.2"     if BR2_BINUTILS_VERSION_2_15_92_0_2
+	default "2.15.94.0.1"     if BR2_BINUTILS_VERSION_2_15_94_0_1
+	default "2.15.94.0.2"     if BR2_BINUTILS_VERSION_2_15_94_0_2
diff --git a/openwrt/toolchain/binutils/Makefile.in b/openwrt/toolchain/binutils/Makefile.in
new file mode 100644
index 0000000000..c6838bb053
--- /dev/null
+++ b/openwrt/toolchain/binutils/Makefile.in
@@ -0,0 +1 @@
+BINUTILS_VERSION:=$(strip $(subst ",, $(BR2_BINUTILS_VERSION)))
diff --git a/openwrt/toolchain/binutils/binutils.mk b/openwrt/toolchain/binutils/binutils.mk
new file mode 100644
index 0000000000..afbb63ac3e
--- /dev/null
+++ b/openwrt/toolchain/binutils/binutils.mk
@@ -0,0 +1,134 @@
+#############################################################
+#
+# build binutils for use on the host system
+#
+#############################################################
+BINUTILS_VERSION:=$(strip $(BINUTILS_VERSION))
+
+BINUTILS_SITE:=http://ftp.kernel.org/pub/linux/devel/binutils
+ifeq ($(BINUTILS_VERSION),2.15)
+BINUTILS_SITE:=http://ftp.gnu.org/gnu/binutils/
+endif
+ifeq ($(BINUTILS_VERSION),2.14)
+BINUTILS_SITE:=http://ftp.gnu.org/gnu/binutils/
+endif
+ifeq ($(BINUTILS_VERSION),2.13)
+BINUTILS_SITE:=http://ftp.gnu.org/gnu/binutils/
+endif
+
+BINUTILS_SOURCE:=binutils-$(BINUTILS_VERSION).tar.bz2
+BINUTILS_DIR:=$(TOOL_BUILD_DIR)/binutils-$(BINUTILS_VERSION)
+BINUTILS_CAT:=bzcat
+
+BINUTILS_DIR1:=$(TOOL_BUILD_DIR)/binutils-$(BINUTILS_VERSION)-build
+
+$(DL_DIR)/$(BINUTILS_SOURCE):
+	mkdir -p $(DL_DIR)
+	$(WGET) -P $(DL_DIR) $(BINUTILS_SITE)/$(BINUTILS_SOURCE)
+
+$(BINUTILS_DIR)/.unpacked: $(DL_DIR)/$(BINUTILS_SOURCE)
+	mkdir -p $(TOOL_BUILD_DIR)
+	$(BINUTILS_CAT) $(DL_DIR)/$(BINUTILS_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(BINUTILS_DIR)/.unpacked
+
+$(BINUTILS_DIR)/.patched: $(BINUTILS_DIR)/.unpacked
+	# Apply appropriate binutils patches.
+	toolchain/patch-kernel.sh $(BINUTILS_DIR) toolchain/binutils/$(BINUTILS_VERSION) \*.patch
+	touch $(BINUTILS_DIR)/.patched
+
+$(BINUTILS_DIR1)/.configured: $(BINUTILS_DIR)/.patched
+	mkdir -p $(BINUTILS_DIR1)
+	(cd $(BINUTILS_DIR1); \
+		$(BINUTILS_DIR)/configure \
+		--prefix=$(STAGING_DIR) \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) );
+	touch $(BINUTILS_DIR1)/.configured
+
+$(BINUTILS_DIR1)/binutils/objdump: $(BINUTILS_DIR1)/.configured
+	$(MAKE) -C $(BINUTILS_DIR1) all
+
+# Make install will put gettext data in staging_dir/share/locale.
+# Unfortunatey, it isn't configureable.
+$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/bin/ld: $(BINUTILS_DIR1)/binutils/objdump
+	$(MAKE) -C $(BINUTILS_DIR1) install
+
+binutils-dependancies:
+	@if ! which bison > /dev/null ; then \
+		echo -e "\n\nYou must install 'bison' on your build machine\n"; \
+		exit 1; \
+	fi;
+	@if ! which flex > /dev/null ; then \
+		echo -e "\n\nYou must install 'flex' on your build machine\n"; \
+		exit 1; \
+	fi;
+	@if ! which msgfmt > /dev/null ; then \
+		echo -e "\n\nYou must install 'gettext' on your build machine\n"; \
+		exit 1; \
+	fi;
+
+binutils: binutils-dependancies $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/bin/ld
+
+binutils-source: $(DL_DIR)/$(BINUTILS_SOURCE)
+
+binutils-clean:
+	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+	-$(MAKE) -C $(BINUTILS_DIR1) clean
+
+binutils-dirclean:
+	rm -rf $(BINUTILS_DIR1)
+
+
+
+#############################################################
+#
+# build binutils for use on the target system
+#
+#############################################################
+BINUTILS_DIR2:=$(BUILD_DIR)/binutils-$(BINUTILS_VERSION)-target
+$(BINUTILS_DIR2)/.configured: $(BINUTILS_DIR)/.patched
+	mkdir -p $(BINUTILS_DIR2)
+	(cd $(BINUTILS_DIR2); \
+		PATH=$(TARGET_PATH) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		CFLAGS_FOR_BUILD="-O2 -g" \
+		$(BINUTILS_DIR)/configure \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(REAL_GNU_TARGET_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) );
+	touch $(BINUTILS_DIR2)/.configured
+
+$(BINUTILS_DIR2)/binutils/objdump: $(BINUTILS_DIR2)/.configured
+	PATH=$(TARGET_PATH) \
+	$(MAKE) -C $(BINUTILS_DIR2) all
+
+$(TARGET_DIR)/usr/bin/ld: $(BINUTILS_DIR2)/binutils/objdump
+	PATH=$(TARGET_PATH) \
+	$(MAKE) DESTDIR=$(TARGET_DIR) \
+		tooldir=/usr build_tooldir=/usr \
+		-C $(BINUTILS_DIR2) install
+	#rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
+	#	$(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
+	-$(STRIP) $(TARGET_DIR)/usr/$(REAL_GNU_TARGET_NAME)/bin/* > /dev/null 2>&1
+	-$(STRIP) $(TARGET_DIR)/usr/bin/* > /dev/null 2>&1
+
+binutils_target: $(GCC_DEPENDANCY) $(TARGET_DIR)/usr/bin/ld
+
+binutils_target-clean:
+	(cd $(TARGET_DIR)/usr/bin; \
+		rm -f addr2line ar as gprof ld nm objcopy \
+		      objdump ranlib readelf size strings strip)
+	rm -f $(TARGET_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+	-$(MAKE) -C $(BINUTILS_DIR2) clean
+
+binutils_target-dirclean:
+	rm -rf $(BINUTILS_DIR2)
diff --git a/openwrt/toolchain/ccache/Config.in b/openwrt/toolchain/ccache/Config.in
new file mode 100644
index 0000000000..a265375c40
--- /dev/null
+++ b/openwrt/toolchain/ccache/Config.in
@@ -0,0 +1,10 @@
+#
+
+comment "Ccache Options"
+
+config BR2_CCACHE
+	bool "Enable ccache support?"
+	default y
+	help
+	    Enable ccache support?
+
diff --git a/openwrt/toolchain/ccache/Config.in.2 b/openwrt/toolchain/ccache/Config.in.2
new file mode 100644
index 0000000000..7130374610
--- /dev/null
+++ b/openwrt/toolchain/ccache/Config.in.2
@@ -0,0 +1,8 @@
+#
+
+config BR2_PACKAGE_CCACHE_TARGET
+	bool"ccache support in the target filesystem"
+	default n
+	help
+	  Add help text here.
+
diff --git a/openwrt/toolchain/ccache/Makefile.in b/openwrt/toolchain/ccache/Makefile.in
new file mode 100644
index 0000000000..fe859da303
--- /dev/null
+++ b/openwrt/toolchain/ccache/Makefile.in
@@ -0,0 +1,6 @@
+ifeq ($(strip $(BR2_CCACHE)),y)
+TARGETS+=ccache
+endif
+ifeq ($(strip $(BR2_PACKAGE_CCACHE_TARGET)),y)
+TARGETS+=ccache_target
+endif
diff --git a/openwrt/toolchain/ccache/ccache.mk b/openwrt/toolchain/ccache/ccache.mk
new file mode 100644
index 0000000000..e2fdd71cc1
--- /dev/null
+++ b/openwrt/toolchain/ccache/ccache.mk
@@ -0,0 +1,151 @@
+#############################################################
+#
+# build ccache to make recompiles faster on the build system
+#
+#############################################################
+CCACHE_VER:=2.3
+CCACHE_SITE:=http://ccache.samba.org/ftp/ccache
+CCACHE_SOURCE:=ccache-$(CCACHE_VER).tar.gz
+CCACHE_DIR1:=$(TOOL_BUILD_DIR)/ccache-$(CCACHE_VER)
+CCACHE_DIR2:=$(BUILD_DIR)/ccache-$(CCACHE_VER)
+CCACHE_CAT:=zcat
+CCACHE_BINARY:=ccache
+CCACHE_TARGET_BINARY:=usr/bin/ccache
+
+$(DL_DIR)/$(CCACHE_SOURCE):
+	$(WGET) -P $(DL_DIR) $(CCACHE_SITE)/$(CCACHE_SOURCE)
+
+$(CCACHE_DIR1)/.unpacked: $(DL_DIR)/$(CCACHE_SOURCE)
+	$(CCACHE_CAT) $(DL_DIR)/$(CCACHE_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(CCACHE_DIR1)/.unpacked
+
+$(CCACHE_DIR1)/.patched: $(CCACHE_DIR1)/.unpacked
+	# WARNING - this will break if the toolchain is moved.
+	# Should probably patch things to use a relative path.
+	$(SED) "s,getenv(\"CCACHE_PATH\"),\"$(STAGING_DIR)/bin-ccache\",g" \
+		$(CCACHE_DIR1)/execute.c
+	# WARNING - this will break if the toolchain build dir is deleted.
+	$(SED) "s,getenv(\"CCACHE_DIR\"),\"$(CCACHE_DIR1)/cache\",g" \
+		$(CCACHE_DIR1)/ccache.c
+	mkdir -p $(CCACHE_DIR1)/cache
+	touch $(CCACHE_DIR1)/.patched
+
+$(CCACHE_DIR1)/.configured: $(CCACHE_DIR1)/.patched
+	mkdir -p $(CCACHE_DIR1)
+	(cd $(CCACHE_DIR1); rm -rf config.cache; \
+		CC=$(HOSTCC) \
+		$(CCACHE_DIR1)/configure \
+		--target=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+	);
+	touch $(CCACHE_DIR1)/.configured
+
+$(CCACHE_DIR1)/$(CCACHE_BINARY): $(CCACHE_DIR1)/.configured
+	$(MAKE) CC=$(HOSTCC) -C $(CCACHE_DIR1)
+
+$(STAGING_DIR)/$(CCACHE_TARGET_BINARY): $(CCACHE_DIR1)/$(CCACHE_BINARY)
+	mkdir -p $(STAGING_DIR)/usr/bin;
+	cp $(CCACHE_DIR1)/ccache $(STAGING_DIR)/usr/bin
+	# Keep the actual toolchain binaries in a directory at the same level.
+	# Otherwise, relative paths for include dirs break.
+	mkdir -p $(STAGING_DIR)/bin-ccache;
+	(cd $(STAGING_DIR)/bin-ccache; \
+		ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-gcc; \
+		ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-cc; \
+		ln -fs $(REAL_GNU_TARGET_NAME)-gcc $(REAL_GNU_TARGET_NAME)-cc);
+	[ -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc ] && \
+		mv $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc $(STAGING_DIR)/bin-ccache/
+	(cd $(STAGING_DIR)/bin; \
+		ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-cc; \
+		ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-gcc; \
+		ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-cc; \
+		ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-gcc);
+ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
+	[ -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c++ ] && \
+		mv $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c++ $(STAGING_DIR)/bin-ccache/
+	[ -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-g++ ] && \
+		mv $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-g++  $(STAGING_DIR)/bin-ccache/
+	(cd $(STAGING_DIR)/bin; \
+		ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-c++; \
+		ln -fs ../usr/bin/ccache $(GNU_TARGET_NAME)-g++;\
+		ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-c++; \
+		ln -fs ../usr/bin/ccache $(REAL_GNU_TARGET_NAME)-g++);
+	(cd $(STAGING_DIR)/bin-ccache; \
+		ln -fs $(REAL_GNU_TARGET_NAME)-c++ $(GNU_TARGET_NAME)-c++; \
+		ln -fs $(REAL_GNU_TARGET_NAME)-g++ $(GNU_TARGET_NAME)-g++);
+endif
+
+ccache: gcc $(STAGING_DIR)/$(CCACHE_TARGET_BINARY)
+
+ccache-clean:
+	$(MAKE) -C $(CCACHE_DIR1) uninstall
+	-$(MAKE) -C $(CCACHE_DIR1) clean
+
+ccache-dirclean:
+	rm -rf $(CCACHE_DIR1)
+
+
+
+
+#############################################################
+#
+# build ccache for use on the target system
+#
+#############################################################
+
+$(CCACHE_DIR2)/.unpacked: $(DL_DIR)/$(CCACHE_SOURCE)
+	$(CCACHE_CAT) $(DL_DIR)/$(CCACHE_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(CCACHE_DIR2)/.unpacked
+
+$(CCACHE_DIR2)/.patched: $(CCACHE_DIR2)/.unpacked
+	touch $(CCACHE_DIR2)/.patched
+
+$(CCACHE_DIR2)/.configured: $(CCACHE_DIR2)/.patched
+	mkdir -p $(CCACHE_DIR2)
+	(cd $(CCACHE_DIR2); rm -rf config.cache; \
+		$(TARGET_CONFIGURE_OPTS) \
+		$(CCACHE_DIR2)/configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--libexecdir=/usr/lib \
+		--sysconfdir=/etc \
+		--datadir=/usr/share \
+		--localstatedir=/var \
+		--mandir=/usr/man \
+		--infodir=/usr/info \
+		$(DISABLE_NLS) \
+	);
+	touch $(CCACHE_DIR2)/.configured
+
+$(CCACHE_DIR2)/$(CCACHE_BINARY): $(CCACHE_DIR2)/.configured
+	$(MAKE) -C $(CCACHE_DIR2) CFLAGS="$(TARGET_CFLAGS)"
+
+$(TARGET_DIR)/$(CCACHE_TARGET_BINARY): $(CCACHE_DIR2)/$(CCACHE_BINARY)
+	$(MAKE) DESTDIR=$(TARGET_DIR) -C $(CCACHE_DIR2) install
+	rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
+		$(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
+	# put a bunch of symlinks into /bin, since that is earlier
+	# in the default PATH than /usr/bin where gcc lives
+	(cd $(TARGET_DIR)/bin; \
+		ln -fs /usr/bin/ccache cc; \
+		ln -fs /usr/bin/ccache gcc; \
+		ln -fs /usr/bin/ccache c++; \
+		ln -fs /usr/bin/ccache g++;)
+
+ccache_target: uclibc $(TARGET_DIR)/$(CCACHE_TARGET_BINARY)
+
+ccache_target-sources: $(DL_DIR)/$(CCACHE_SOURCE)
+
+ccache_target-clean:
+	rm -f $(TARGET_DIR)/$(CCACHE_TARGET_BINARY)
+	-$(MAKE) -C $(CCACHE_DIR2) clean
+
+ccache_target-dirclean:
+	rm -rf $(CCACHE_DIR2)
diff --git a/openwrt/toolchain/gcc/2.95/050-debian-subset.patch.bz2 b/openwrt/toolchain/gcc/2.95/050-debian-subset.patch.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..6c2d518273b201e21e3dccc36e42e9aba09ab877
GIT binary patch
literal 125295
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
UNB!fukN^0)k}1N3fu_0tsCBsZH~;_u

literal 0
HcmV?d00001

diff --git a/openwrt/toolchain/gcc/2.95/100-uclibc-conf.patch b/openwrt/toolchain/gcc/2.95/100-uclibc-conf.patch
new file mode 100644
index 0000000000..f244387cc9
--- /dev/null
+++ b/openwrt/toolchain/gcc/2.95/100-uclibc-conf.patch
@@ -0,0 +1,291 @@
+Warning!  The powerpc patch (rs6000/linux.h) is hack-ish and would
+definitely need to be improved to be acceptable upstream.  Also,
+this patch isn't complete as it only supports i386, arm, mips, and
+powerpc (rs6000).
+diff -urN gcc-20011006/config.sub gcc-20011006-new/config.sub
+--- gcc-20011006/config.sub	2004-01-13 06:15:28.000000000 -0600
++++ gcc-20011006-new/config.sub	2004-01-10 11:09:35.000000000 -0600
+@@ -68,7 +68,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+-  linux-gnu*)
++  linux-gnu* | linux-uclibc*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -936,7 +936,8 @@
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* )
+ 	# Remember, each alternative MUST END IN *, to match a version number.
+ 		;;
+diff -urN gcc-20011006/gcc/config/arm/linux-elf.h gcc-20011006-new/gcc/config/arm/linux-elf.h
+--- gcc-20011006/gcc/config/arm/linux-elf.h	2004-01-13 06:15:28.000000000 -0600
++++ gcc-20011006-new/gcc/config/arm/linux-elf.h	2004-01-10 11:12:11.000000000 -0600
+@@ -90,6 +90,18 @@
+ #define ENDFILE_SPEC \
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -100,6 +112,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #undef  CPP_PREDEFINES
+ #define CPP_PREDEFINES \
+diff -urN gcc-20011006/gcc/config/i386/linux.h gcc-20011006-new/gcc/config/i386/linux.h
+--- gcc-20011006/gcc/config/i386/linux.h	2001-04-03 17:38:59.000000000 -0500
++++ gcc-20011006-new/gcc/config/i386/linux.h	2004-01-10 11:15:38.000000000 -0600
+@@ -199,6 +199,15 @@
+ 	%{static:-static}}}"
+ #endif
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -207,6 +216,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* Get perform_* macros to build libgcc.a.  */
+ #include "i386/perform.h"
+diff -urN gcc-20011006/gcc/config/mips/linux.h gcc-20011006-new/gcc/config/mips/linux.h
+--- gcc-20011006/gcc/config/mips/linux.h	2004-01-13 06:15:28.000000000 -0600
++++ gcc-20011006-new/gcc/config/mips/linux.h	2004-01-10 11:16:39.000000000 -0600
+@@ -154,6 +154,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -163,6 +174,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ 
+ #undef SUBTARGET_ASM_SPEC
+diff -urN old/gcc-20011006/gcc/config/mips/t-linux-uclibc gcc-20011006/gcc/config/mips/t-linux-uclibc
+--- old/gcc-20011006/gcc/config/mips/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-20011006/gcc/config/mips/t-linux-uclibc	2004-01-14 02:51:10.000000000 -0600
+@@ -0,0 +1 @@
++T_CFLAGS = -DUSE_UCLIBC
+diff -urN gcc-20011006/gcc/config/rs6000/linux.h gcc-20011006-new/gcc/config/rs6000/linux.h
+--- gcc-20011006/gcc/config/rs6000/linux.h	2001-04-03 17:38:59.000000000 -0500
++++ gcc-20011006-new/gcc/config/rs6000/linux.h	2004-01-10 11:15:38.000000000 -0600
+@@ -36,12 +36,21 @@
+ #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
+ 
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "-m elf32ppclinux %{G*} %{shared:-shared} \
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++    %{static:-static}}"
++#else
+ #define LINK_SPEC "-m elf32ppclinux %{G*} %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+       %{rdynamic:-export-dynamic} \
+       %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+     %{static:-static}}"
++#endif
+ 
+ #undef	LIB_DEFAULT_SPEC
+ #define LIB_DEFAULT_SPEC "%(lib_linux)"
+diff -urN gcc-20011006/gcc/config/t-linux-uclibc gcc-20011006-new/gcc/config/t-linux-uclibc
+--- gcc-20011006/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-20011006-new/gcc/config/t-linux-uclibc	2004-01-10 11:18:46.000000000 -0600
+@@ -0,0 +1,18 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++# Don't install "assert.h" in gcc. We use the one in glibc.
++INSTALL_ASSERT_H =
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Do not build libgcc1. Let gcc generate those functions. The GNU/Linux
++# C library can handle them.
++LIBGCC1 = 
++CROSS_LIBGCC1 =
++LIBGCC1_TEST =
+diff -urN gcc-20011006/gcc/configure gcc-20011006-new/gcc/configure
+--- gcc-20011006/gcc/configure	2004-01-13 06:15:28.000000000 -0600
++++ gcc-20011006-new/gcc/configure	2004-01-10 11:28:54.000000000 -0600
+@@ -3219,6 +3219,24 @@
+ 			;;
+ 		esac
+ 		;;
++	arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++		xm_file=arm/xm-linux.h
++		xmake_file=x-linux
++		tm_file="arm/linux-elf.h"
++		case $machine in
++		armv2*-*-*)
++			tm_file="arm/linux-elf26.h $tm_file"
++			;;
++		esac
++		tmake_file="t-linux-uclibc arm/t-linux"
++		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++		gnu_ld=yes
++		case x${enable_threads} in
++		x | xyes | xpthreads | xposix)
++			thread_file='posix'
++			;;
++		esac
++		;;
+ 	arm*-*-aout)
+ 		tm_file=arm/aout.h
+ 		tmake_file=arm/t-bare
+@@ -3631,6 +3649,18 @@
+  			thread_file='single'
+  		fi
+ 		;;
++	i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++					# with ELF format using uClibc
++		xmake_file=x-linux
++		tm_file=i386/linux.h
++		tmake_file="t-linux-uclibc i386/t-crtstuff"
++		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++		gnu_ld=yes
++		float_format=i386
++ 		if test x$enable_threads = xyes; then
++ 			thread_file='posix'
++ 		fi
++		;;
+ 	i[34567]86-*-linux-gnu*)	# Intel 80386's running GNU/Linux
+ 					# aka GNU/Linux C library 6
+ 		xmake_file=x-linux
+@@ -4696,7 +4726,19 @@
+ 		# On NetBSD, the headers are already okay, except for math.h.
+ 		tmake_file=t-netbsd
+ 		;;
+-       mips*-*-linux*)                         # Linux MIPS, either endian.
++	mips*-*-linux-uclibc*)          # Linux (uclibc) MIPS, either endian.
++		tmake_file=mips/t-linux-uclibc
++		xmake_file=x-linux
++		xm_file="xm-siglist.h ${xm_file}"
++               case $machine in
++                       mipsel-*)  tm_file="mips/elfl.h mips/linux.h" ;;
++                       *)         tm_file="mips/elf.h mips/linux.h" ;;
++               esac
++		extra_parts="crtbegin.o crtend.o"
++		gnu_ld=yes
++		gas=yes
++		;;
++	mips*-*-linux*)                         # Linux MIPS, either endian.
+ 		xmake_file=x-linux
+ 		xm_file="xm-siglist.h ${xm_file}"
+                case $machine in
+@@ -5159,6 +5201,24 @@
+ 			thread_file='posix'
+ 		fi
+ 		;;
++	powerpc-*-linux-uclibc*)
++		tm_file=rs6000/linux.h
++		xm_file="xm-siglist.h rs6000/xm-sysv4.h"
++		xm_defines="USG ${xm_defines}"
++		out_file=rs6000/rs6000.c
++		if test x$gas = xyes
++		then
++			tmake_file="rs6000/t-ppcos t-linux-uclibc rs6000/t-ppccomm"
++		else
++			tmake_file="rs6000/t-ppc t-linux-uclibc rs6000/t-ppccomm"
++		fi
++		xmake_file=x-linux
++		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++		extra_headers=ppc-asm.h
++		if test x$enable_threads = xyes; then
++			thread_file='posix'
++		fi
++		;;
+         powerpc-wrs-vxworks*)
+                 cpu_type=rs6000
+ 		xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+diff -urN gcc-20011006/ltconfig gcc-20011006-new/ltconfig
+--- gcc-20011006/ltconfig	1999-06-21 21:35:12.000000000 -0500
++++ gcc-20011006-new/ltconfig	2004-01-10 11:34:23.000000000 -0600
+@@ -436,6 +436,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case "$host_os" in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1773,6 +1774,22 @@
+   fi
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++  file_magic_cmd=/usr/bin/file
++  file_magic_test_file=`echo /lib/libuClibc-*.so`
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   version_type=sunos
+   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
diff --git a/openwrt/toolchain/gcc/2.95/STLport-4.5.3.patch b/openwrt/toolchain/gcc/2.95/STLport-4.5.3.patch
new file mode 100644
index 0000000000..fee65f9200
--- /dev/null
+++ b/openwrt/toolchain/gcc/2.95/STLport-4.5.3.patch
@@ -0,0 +1,407 @@
+diff -urN STLport-4.5.3/Makefile STLport-4.5.3-devel/Makefile
+--- STLport-4.5.3/Makefile	Wed Dec 31 17:00:00 1969
++++ STLport-4.5.3-devel/Makefile	Tue Jan  7 15:28:08 2003
+@@ -0,0 +1,44 @@
++# Makefile to compile stlport with uClibc
++#
++# Copyright (C) 2002 Erik Andersen <andersen@codepoet.org>
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You 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
++
++ARCH:=i386
++PREFIX:=/usr/$(ARCH)-linux-uclibc
++CROSS:= $(PREFIX)/../bin/$(ARCH)-linux-uclibc-
++CC=$(CROSS)gcc
++CXX=$(CROSS)g++
++AR = $(CROSS)ar
++STRIP = $(CROSS)strip --remove-section=.comment --remove-section=.note --strip-unneeded
++.EXPORT_ALL_VARIABLES:
++
++all:
++	rm -f lib/lib*
++	make -C src -f gcc-uClibc.mak all
++	(cd lib; rm -f libstdc++_debug.so; \
++	ln -fs libstdc++.so.4.5 libstdc++.so; \
++	ln -fs libstdc++.so.4.5 libstdc++.so.0;)
++	$(STRIP) lib/libstdc++.so.4.5; 
++
++clean:
++	make -C src -f gcc-uClibc.mak clean
++	rm -rf lib/*
++
++install:
++	(cd lib; \
++	cp -a libstdc++.a $(PREFIX)/lib; \
++	cp -a libstdc++.so libstdc++.so.0 libstdc++.so.4.5 $(PREFIX)/lib;)
++	cp -a stlport $(PREFIX)/include/c++
+diff -urN STLport-4.5.3/src/dll_main.cpp STLport-4.5.3-devel/src/dll_main.cpp
+--- STLport-4.5.3/src/dll_main.cpp	Sat Feb  2 16:11:56 2002
++++ STLport-4.5.3-devel/src/dll_main.cpp	Tue Jan  7 15:28:08 2003
+@@ -52,7 +52,7 @@
+ #  include <locale>
+ # endif
+ 
+-# if defined (_STLP_UNIX)
++# if defined (_STLP_UNIX) && defined (_STLP_PTHREADS) && ! defined (_STLP_USE_UCLIBC)
+ #  define _STLP_HAS_PERTHREAD_ALLOCATOR
+ # include <stl/_pthread_alloc.h>
+ # endif
+diff -urN STLport-4.5.3/src/gcc-uClibc.mak STLport-4.5.3-devel/src/gcc-uClibc.mak
+--- STLport-4.5.3/src/gcc-uClibc.mak	Wed Dec 31 17:00:00 1969
++++ STLport-4.5.3-devel/src/gcc-uClibc.mak	Tue Jan  7 15:28:08 2003
+@@ -0,0 +1,61 @@
++#
++# Basename for libraries
++#
++LIB_BASENAME:=libstdc++
++LIB_SHAREDNAME:=$(LIB_BASENAME).so
++LIB_SHAREDNAME_FULL:=$(LIB_SHAREDNAME).0
++
++#
++# guts for common stuff
++#
++#
++LINK:=$(AR) -cr
++#DYN_LINK:=$(CC) -fno-exceptions -lpthread -lm -shared -Wl,-soname=$(LIB_SHAREDNAME_FULL) -o
++DYN_LINK:=$(CC) -fno-exceptions -shared -Wl,-soname=$(LIB_SHAREDNAME_FULL) -o
++
++OBJEXT=o
++DYNEXT=so
++STEXT=a
++RM=rm -rf
++PATH_SEP=/
++MKDIR=mkdir -p
++COMP=GCC$(ARCH)
++INSTALL_STEP = install_unix 
++
++all: release_dynamic release_static
++#all: all_dynamic all_static symbolic_links 
++
++include common_macros.mak
++STLDEBUG_NAME:=$(LIB_BASENAME).debug
++
++# Lets disable exception support, since this saves over 200k...
++DEFINE_FLAGS:= -fno-exceptions
++#DEFINE_FLAGS:= -D_STLP_NO_EXCEPTIONS -fno-exceptions -DSTL_NO_EXCEPTIONS
++
++#DEFINE_FLAGS+= -D_STLP_USE_UCLIBC -D_STLP_NO_WCHAR_T \
++#	-DUSE_SPRINTF_INSTEAD -D_ISOC99_SOURCE
++
++WARNING_FLAGS:= -W -Wno-sign-compare -Wno-unused -Wno-uninitialized
++INCLUDE_FLAGS = -I${STLPORT_DIR}
++CXXFLAGS_COMMON = $(WARNING_FLAGS)  $(DEFINE_FLAGS) $(INCLUDE_FLAGS)
++
++CXXFLAGS_RELEASE_static = $(CXXFLAGS_COMMON) -Os
++CXXFLAGS_RELEASE_dynamic = $(CXXFLAGS_COMMON) -Os -fPIC
++
++CXXFLAGS_DEBUG_static = $(CXXFLAGS_COMMON) -O -g
++CXXFLAGS_DEBUG_dynamic = $(CXXFLAGS_COMMON) -O -g -fPIC
++
++CXXFLAGS_STLDEBUG_static = $(CXXFLAGS_DEBUG_static) -D_STLP_DEBUG
++CXXFLAGS_STLDEBUG_dynamic = $(CXXFLAGS_DEBUG_dynamic) -D_STLP_DEBUG -fPIC
++
++include common_percent_rules.mak
++include common_rules.mak
++
++
++#install: all
++#	cp -p $(LIB_TARGET) ${D_LIB_TARGET} ../lib
++
++#%.s: %.cpp
++#	$(CXX) $(CXXFLAGS) -O4 -S -pto $<  -o $@
++
++
+diff -urN STLport-4.5.3/src/num_put_float.cpp STLport-4.5.3-devel/src/num_put_float.cpp
+--- STLport-4.5.3/src/num_put_float.cpp	Fri Jan 18 15:06:52 2002
++++ STLport-4.5.3-devel/src/num_put_float.cpp	Tue Jan  7 15:28:08 2003
+@@ -65,6 +65,12 @@
+ 
+ # endif
+ 
++#  if defined(_STLP_USE_UCLIBC)
++#    define __USE_ISOC99 1
++#    include <math.h>
++#    include <float.h>
++#  endif
++
+ # include <cstdlib>
+ 
+ #if defined (_MSC_VER) || defined (__MINGW32__) || defined (__BORLANDC__) || defined (__DJGPP)  || defined (_STLP_SCO_OPENSERVER) || defined (__NCR_SVR)
+@@ -209,7 +215,7 @@
+ 
+ #ifdef USE_SPRINTF_INSTEAD
+ 
+-#elif defined (__hpux) || defined (__DJGPP) || ( defined(_STLP_USE_GLIBC) && ! defined (__MSL__) )
++#elif defined (__hpux) || defined (__DJGPP) || ( defined(_STLP_USE_GLIBC) && ! defined (__MSL__) ) || defined (_STLP_USE_UCLIBC)
+ #  if defined (isfinite) 
+ inline bool _Stl_is_nan_or_inf(double x) { return !isfinite(x); }
+ #  else
+@@ -238,7 +244,7 @@
+ }
+ inline bool _Stl_is_neg_inf(double x)    { return _fpclass(x) == _FPCLASS_NINF; }
+ inline bool _Stl_is_neg_nan(double x)    { return _isnan(x) && _copysign(1., x) < 0 ; } 
+-#elif defined(__MRC__) || defined(__SC__)		//*TY 02/24/2000 - added support for MPW
++#elif defined(__MRC__) || defined(__SC__)
+ bool _Stl_is_nan_or_inf(double x) { return isnan(x) || !isfinite(x); }
+ bool _Stl_is_inf(double x)        { return !isfinite(x); }
+ bool _Stl_is_neg_inf(double x)    { return !isfinite(x) && signbit(x); }
+@@ -280,7 +286,7 @@
+   inline char* _Stl_qfcvtR(long double x, int n, int* pt, int* sign, char* buf)
+     { return fcvtbuf(x, n, pt, sign, buf); }
+ # endif
+-#elif defined (_STLP_USE_GLIBC)
++#elif defined (_STLP_USE_GLIBC) || defined(_STLP_USE_UCLIBC)
+   inline char* _Stl_ecvtR(double x, int n, int* pt, int* sign, char* buf)
+     { return buf + ecvt_r(x, n, pt, sign, buf, NDIG+2); }
+   inline char* _Stl_fcvtR(double x, int n, int* pt, int* sign, char* buf)
+diff -urN STLport-4.5.3/src/stdio_streambuf.cpp STLport-4.5.3-devel/src/stdio_streambuf.cpp
+--- STLport-4.5.3/src/stdio_streambuf.cpp	Thu Jan 10 11:41:52 2002
++++ STLport-4.5.3-devel/src/stdio_streambuf.cpp	Tue Jan  7 15:28:08 2003
+@@ -82,7 +82,7 @@
+     _STLP_VENDOR_CSTD::fgetpos(_M_file, &pos);
+     // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead
+     // of a primitive type
+-#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
++#if defined(_STLP_USE_UCLIBC) || (defined(__GLIBC__) && defined(_STLP_USE_GLIBC) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
+     return pos_type((streamoff)pos.__pos);
+ #elif defined(__ISCPP__) || defined(__MVS__) || (__OS400__)
+      return pos_type(pos.__fpos_elem[ 0 ]);
+@@ -101,13 +101,16 @@
+ 
+   // added 21 june 00 mdb,rjf,wjs: glibc 2.2 changed fpos_t to be a struct instead
+   // of a primitive type
+-#if (defined(__GLIBC__) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
++#if (defined(__GLIBC__) && defined(_STLP_USE_GLIBC) && ( (__GLIBC__ > 2) || ( (__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 2) ) ) )
+   fpos_t p;
+   p.__pos = pos;
+   memset( &(p.__state), 0, sizeof(p.__state) );
+ #elif defined(__MVS__) || (__OS400__)
+   fpos_t p;
+   p.__fpos_elem[0] = pos;
++#elif defined(_STLP_USE_UCLIBC)
++  fpos_t p;
++  p.__pos = pos;
+ #else
+   fpos_t p(pos);
+ #endif
+diff -urN STLport-4.5.3/stlport/config/_prolog.h STLport-4.5.3-devel/stlport/config/_prolog.h
+--- STLport-4.5.3/stlport/config/_prolog.h	Sun Oct 28 13:26:44 2001
++++ STLport-4.5.3-devel/stlport/config/_prolog.h	Tue Jan  7 15:28:08 2003
+@@ -1,3 +1,8 @@
++/* Evil hack to make sure everything behaves itself */
++#define _STLP_USE_UCLIBC
++//#define _STLP_NO_WCHAR_T
++//#define _ISOC99_SOURCE
++//#define USE_SPRINTF_INSTEAD
+ 
+ #if defined (_STLP_MSVC) || defined (__ICL) || defined (__BORLANDC__)
+ 
+diff -urN STLport-4.5.3/stlport/config/stl_gcc.h STLport-4.5.3-devel/stlport/config/stl_gcc.h
+--- STLport-4.5.3/stlport/config/stl_gcc.h	Thu Jan 10 11:41:58 2002
++++ STLport-4.5.3-devel/stlport/config/stl_gcc.h	Tue Jan  7 15:28:08 2003
+@@ -3,7 +3,7 @@
+  */
+ 
+ /* Systems having GLIBC installed have different traits */
+-#if ! defined (_STLP_USE_GLIBC) && ( defined (__linux__) || defined (__CYGWIN__) )
++#if ! defined (_STLP_USE_GLIBC)  && ! defined (_STLP_USE_UCLIBC) && ( defined (__linux__) || defined (__CYGWIN__) )
+ # define _STLP_USE_GLIBC
+ #endif
+ 
+diff -urN STLport-4.5.3/stlport/cstdlib STLport-4.5.3-devel/stlport/cstdlib
+--- STLport-4.5.3/stlport/cstdlib	Thu Aug 23 15:51:54 2001
++++ STLport-4.5.3-devel/stlport/cstdlib	Tue Jan  7 15:28:08 2003
+@@ -55,9 +55,11 @@
+ using _STLP_VENDOR_CSTD::atof;
+ using _STLP_VENDOR_CSTD::atoi;
+ using _STLP_VENDOR_CSTD::atol;
++# ifndef _STLP_USE_UCLIBC
+ using _STLP_VENDOR_CSTD::mblen;
+ using _STLP_VENDOR_CSTD::mbstowcs;
+ using _STLP_VENDOR_CSTD::mbtowc;
++# endif
+ using _STLP_VENDOR_CSTD::strtod;
+ using _STLP_VENDOR_CSTD::strtol;
+ using _STLP_VENDOR_CSTD::strtoul;
+diff -urN STLport-4.5.3/stlport/stl/_config.h STLport-4.5.3-devel/stlport/stl/_config.h
+--- STLport-4.5.3/stlport/stl/_config.h	Fri Jan 18 15:08:36 2002
++++ STLport-4.5.3-devel/stlport/stl/_config.h	Tue Jan  7 15:28:08 2003
+@@ -26,6 +26,16 @@
+ #ifndef _STLP_CONFIG_H
+ # define _STLP_CONFIG_H
+ 
++/* Make the STLport headers provide uClibc support by default */
++#define _STLP_NO_EXCEPTIONS		1
++#define STL_NO_EXCEPTIONS		1
++#define _STLP_USE_UCLIBC		1
++//#define _STLP_NO_WCHAR_T		1
++#define _STLP_NO_LONG_DOUBLE		1
++#define USE_SPRINTF_INSTEAD		1
++#define _ISOC99_SOURCE			1
++#define _STLP_NO_ANACHRONISMS		1
++
+ /*
+  * Purpose of this file :
+  *
+@@ -164,7 +174,7 @@
+ /* Operating system recognition (basic) */
+ # if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX)  || defined (__NetBSD__) || defined (__Lynx__)
+ #  define _STLP_UNIX 1
+-#  if defined (__linux__) && ! defined (_STLP_USE_GLIBC)
++#  if defined (__linux__) && ! defined (_STLP_USE_GLIBC) && ! defined (_STLP_USE_UCLIBC)
+ #   define _STLP_USE_GLIBC 1
+ #  endif
+ # elif defined(macintosh) || defined (_MAC)
+diff -urN STLport-4.5.3/stlport/stl/_stdio_file.h STLport-4.5.3-devel/stlport/stl/_stdio_file.h
+--- STLport-4.5.3/stlport/stl/_stdio_file.h	Fri Jan 18 15:07:00 2002
++++ STLport-4.5.3-devel/stlport/stl/_stdio_file.h	Tue Jan  7 15:28:08 2003
+@@ -634,6 +634,112 @@
+ }
+ # define _STLP_FILE_I_O_IDENTICAL
+ 
++#elif defined(_STLP_USE_UCLIBC)
++
++#if defined(__MASK_READING)
++
++inline int   _FILE_fd(const FILE *__f) { return __f->__filedes; }
++
++//       Returns a pointer to the beginning of the buffer.
++inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->__bufstart; }
++
++//       Returns the current read/write position within the buffer.
++inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->__bufpos; }
++
++//       Returns a pointer immediately past the end of the buffer.
++inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->__bufend; }
++
++//       Returns the number of characters remaining in the buffer, i.e.
++//       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
++inline ptrdiff_t _FILE_I_avail(const FILE *__f) 
++  { return __f->__bufgetc_u - __f->__bufpos; }
++
++//       Increments the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_preincr(FILE *__f)  { return *(char*)(++__f->__bufpos); }
++
++//       Increments the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_postincr(FILE *__f)  { return *(char*)(__f->__bufpos++); }
++
++//       Decrements the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_predecr(FILE *__f)  { return *(char*)(--__f->__bufpos); }
++
++//       Decrements the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_postdecr(FILE *__f)  { return *(char*)(__f->__bufpos--); }
++
++//       Increments the current read/write position by __n.
++inline void  _FILE_I_bump(FILE *__f, int __n) { __f->__bufpos += __n; }
++
++//       Sets the beginning of the bufer to __begin, the current read/write
++//       position to __next, and the buffer's past-the-end pointer to __end.
++//       If any of those pointers is null, then all of them must be null.
++inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end)
++{
++	__f->__bufstart = (unsigned char*)__begin;
++	__f->__bufpos  =  (unsigned char*)__next;
++	__f->__bufend  =  (unsigned char*)__end;
++	__f->__bufgetc_u = (unsigned char*)__begin;
++	__f->__bufputc_u = (unsigned char*)__end;
++}
++
++# define _STLP_FILE_I_O_IDENTICAL
++
++#else    // Support old stdio for a little while.
++
++inline int   _FILE_fd(const FILE *__f) { return __f->filedes; }
++
++//       Returns a pointer to the beginning of the buffer.
++inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->bufstart; }
++
++//       Returns the current read/write position within the buffer.
++inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->bufpos; }
++
++//       Returns a pointer immediately past the end of the buffer.
++inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->bufend; }
++
++//       Returns the number of characters remaining in the buffer, i.e.
++//       _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f).
++inline ptrdiff_t _FILE_I_avail(const FILE *__f) 
++  { return __f->bufgetc - __f->bufpos; }
++
++//       Increments the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_preincr(FILE *__f)  { return *(char*)(++__f->bufpos); }
++
++//       Increments the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_postincr(FILE *__f)  { return *(char*)(__f->bufpos++); }
++
++//       Decrements the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_predecr(FILE *__f)  { return *(char*)(--__f->bufpos); }
++
++//       Decrements the current read/write position by 1, returning the 
++//       character at the old position.
++inline char& _FILE_I_postdecr(FILE *__f)  { return *(char*)(__f->bufpos--); }
++
++//       Increments the current read/write position by __n.
++inline void  _FILE_I_bump(FILE *__f, int __n) { __f->bufpos += __n; }
++
++//       Sets the beginning of the bufer to __begin, the current read/write
++//       position to __next, and the buffer's past-the-end pointer to __end.
++//       If any of those pointers is null, then all of them must be null.
++inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end)
++{
++	__f->bufstart = (unsigned char*)__begin;
++	__f->bufpos  =  (unsigned char*)__next;
++	__f->bufend  =  (unsigned char*)__end;
++	__f->bufgetc = (unsigned char*)__begin;
++	__f->bufputc = (unsigned char*)__end;
++}
++
++# define _STLP_FILE_I_O_IDENTICAL
++
++#endif
++
+ #else  /* A C library that we don't have an implementation for. */
+ 
+ # error The C++ I/O library is not configured for this compiler
+diff -urN STLport-4.5.3/stlport/stl/c_locale.h STLport-4.5.3-devel/stlport/stl/c_locale.h
+--- STLport-4.5.3/stlport/stl/c_locale.h	Fri Jan 18 15:07:00 2002
++++ STLport-4.5.3-devel/stlport/stl/c_locale.h	Wed Jan  8 10:58:10 2003
+@@ -401,6 +401,21 @@
+ #  define _Locale_SPACE _S
+ #  define _Locale_PRINT (_P | _U | _L | _N | _B)
+ #  define _Locale_ALPHA (_U | _L)
++
++# elif defined(_STLP_USE_UCLIBC) /* linux, using the gnu compiler */
++
++#  define _Locale_CNTRL  _IScntrl
++#  define _Locale_UPPER  _ISupper
++#  define _Locale_LOWER  _ISlower
++#  define _Locale_DIGIT  _ISdigit
++#  define _Locale_XDIGIT _ISxdigit
++#  define _Locale_PUNCT  _ISpunct
++#  define _Locale_SPACE  _ISspace
++#  define _Locale_PRINT  _ISprint
++#  define _Locale_ALPHA  _ISalpha
++
++#else
++#  error Unknown Locale
+ #endif
+ 
+ # endif /* _STLP_C_LOCALE_H */
diff --git a/openwrt/toolchain/gcc/3.3.3/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.3.3/100-uclibc-conf.patch
new file mode 100644
index 0000000000..4bbe21b7aa
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.3/100-uclibc-conf.patch
@@ -0,0 +1,1635 @@
+diff -urN gcc-3.3.3-dist/boehm-gc/config.sub gcc-3.3.3/boehm-gc/config.sub
+--- gcc-3.3.3-dist/boehm-gc/config.sub	2002-02-11 22:37:53.000000000 -0600
++++ gcc-3.3.3/boehm-gc/config.sub	2004-08-12 04:47:51.000000000 -0500
+@@ -118,7 +118,7 @@
+ # 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* | storm-chaos* | os2-emx* | windows32-*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | storm-chaos* | os2-emx* | windows32-*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1089,7 +1089,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3-dist/boehm-gc/configure gcc-3.3.3/boehm-gc/configure
+--- gcc-3.3.3-dist/boehm-gc/configure	2004-02-14 14:34:20.000000000 -0600
++++ gcc-3.3.3/boehm-gc/configure	2004-08-12 04:47:51.000000000 -0500
+@@ -1940,6 +1940,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.3.3-dist/config.sub gcc-3.3.3/config.sub
+--- gcc-3.3.3-dist/config.sub	2003-01-30 17:25:36.000000000 -0600
++++ gcc-3.3.3/config.sub	2004-08-12 04:47:51.000000000 -0500
+@@ -118,7 +118,7 @@
+ # 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1112,7 +1112,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3-dist/gcc/config/arm/linux-elf.h gcc-3.3.3/gcc/config/arm/linux-elf.h
+--- gcc-3.3.3-dist/gcc/config/arm/linux-elf.h	2003-09-16 10:39:23.000000000 -0500
++++ gcc-3.3.3/gcc/config/arm/linux-elf.h	2004-08-12 04:47:51.000000000 -0500
+@@ -78,6 +78,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -88,6 +100,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS()		\
+     do {					\
+diff -urN gcc-3.3.3-dist/gcc/config/cris/linux.h gcc-3.3.3/gcc/config/cris/linux.h
+--- gcc-3.3.3-dist/gcc/config/cris/linux.h	2003-03-10 21:01:35.000000000 -0600
++++ gcc-3.3.3/gcc/config/cris/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -81,6 +81,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -95,6 +114,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.3.3-dist/gcc/config/cris/t-linux-uclibc gcc-3.3.3/gcc/config/cris/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/cris/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.3.3-dist/gcc/config/i386/linux.h gcc-3.3.3/gcc/config/i386/linux.h
+--- gcc-3.3.3-dist/gcc/config/i386/linux.h	2003-11-14 00:46:12.000000000 -0600
++++ gcc-3.3.3/gcc/config/i386/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -136,6 +136,15 @@
+ 	%{static:-static}}}"
+ #endif
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -144,6 +153,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.3.3-dist/gcc/config/mips/linux.h gcc-3.3.3/gcc/config/mips/linux.h
+--- gcc-3.3.3-dist/gcc/config/mips/linux.h	2003-12-23 02:58:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/mips/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -175,6 +175,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -184,6 +195,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.3.3-dist/gcc/config/sh/linux.h gcc-3.3.3/gcc/config/sh/linux.h
+--- gcc-3.3.3-dist/gcc/config/sh/linux.h	2003-11-06 17:13:33.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -44,12 +44,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ /* The GNU C++ standard library requires that these macros be defined.  */
+ #undef CPLUSPLUS_CPP_SPEC
+diff -urN gcc-3.3.3-dist/gcc/config/sh/t-linux-uclibc gcc-3.3.3/gcc/config/sh/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,16 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++TARGET_LIBGCC2_CFLAGS = -fpic
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
+diff -urN gcc-3.3.3-dist/gcc/config/sh/t-sh64-uclibc gcc-3.3.3/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.3.3-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/t-sh64-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.3.3-dist/gcc/config/t-linux-uclibc gcc-3.3.3/gcc/config/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,23 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde-glibc
++#LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
++#  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++#LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.3.3-dist/gcc/config.gcc gcc-3.3.3/gcc/config.gcc
+--- gcc-3.3.3-dist/gcc/config.gcc	2004-01-21 00:06:00.000000000 -0600
++++ gcc-3.3.3/gcc/config.gcc	2004-08-12 04:47:51.000000000 -0500
+@@ -697,6 +697,17 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	case x${enable_threads} in
++	x | xyes | xpthreads | xposix)
++		thread_file='posix'
++		;;
++	esac
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -772,6 +783,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -1173,6 +1188,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1883,6 +1903,16 @@
+ 	tm_file="elfos.h ${tm_file} mips/netbsd.h"
+ 	tmake_file="${tmake_file} mips/t-netbsd"
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case $machine in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc mips/t-linux"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case $machine in
+@@ -2129,6 +2159,11 @@
+ 	out_file=rs6000/rs6000.c
+ 	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	out_file=rs6000/rs6000.c
++	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	out_file=rs6000/rs6000.c
+@@ -2313,10 +2348,18 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case $machine in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	gas=yes gnu_ld=yes
+ 	case $machine in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.3.3-dist/libstdc++-v3/aclocal.m4 gcc-3.3.3/libstdc++-v3/aclocal.m4
+--- gcc-3.3.3-dist/libstdc++-v3/aclocal.m4	2004-01-12 10:18:44.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/aclocal.m4	2004-08-12 04:47:51.000000000 -0500
+@@ -1216,6 +1216,9 @@
+   dnl Default to "generic"
+   if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	AC_EGREP_CPP([_GLIBCPP_ok], [
+         #include <features.h>
+@@ -1339,6 +1342,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcpp_MOFILES)
++      AC_SUBST(glibcpp_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure gcc-3.3.3/libstdc++-v3/configure
+--- gcc-3.3.3-dist/libstdc++-v3/configure	2004-01-12 10:18:45.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/configure	2004-08-12 04:49:13.000000000 -0500
+@@ -2010,6 +2010,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -2996,6 +3001,9 @@
+ 
+       if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	cat > conftest.$ac_ext <<EOF
+ #line 3002 "configure"
+@@ -3182,6 +3190,70 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      echo "$ac_t""uclibc" 1>&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
++echo "configure:3117: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_check_msgfmt'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      ac_cv_prog_check_msgfmt="yes"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt="$ac_cv_prog_check_msgfmt"
++if test -n "$check_msgfmt"; then
++  echo "$ac_t""$check_msgfmt" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      
++      
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+@@ -4212,6 +4284,968 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4224: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4229 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++fi
++done
++
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      
++      
++  # If we're not using GNU ld, then there's no point in even trying these
++  # tests.  Check for that first.  We should have already tested for gld
++  # by now (in libtool), but require it now just to be safe...
++  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
++  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
++  
++
++  # The name set by libtool depends on the version of libtool.  Shame on us
++  # for depending on an impl detail, but c'est la vie.  Older versions used
++  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
++  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
++  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
++  # set (hence we're using an older libtool), then set it.
++  if test x${with_gnu_ld+set} != xset; then
++    if test x${ac_cv_prog_gnu_ld+set} != xset; then
++      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
++      with_gnu_ld=no
++    else
++      with_gnu_ld=$ac_cv_prog_gnu_ld
++    fi
++  fi
++
++  # Start by getting the version number.  I think the libtool test already
++  # does some of this, but throws away the result.
++  
++  ldver=`$LD --version 2>/dev/null | head -1 | \
++         sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
++  
++  glibcpp_gnu_ld_version=`echo $ldver | \
++         $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
++
++  # Set --gc-sections.
++  if test "$with_gnu_ld" = "notbroken"; then
++    # GNU ld it is!  Joy and bunny rabbits!
++
++    # All these tests are for C++; save the language and the compiler flags.
++    # Need to do this so that g++ won't try to link in libstdc++
++    ac_test_CFLAGS="${CFLAGS+set}"
++    ac_save_CFLAGS="$CFLAGS"
++    CFLAGS='-x c++  -Wl,--gc-sections'
++
++    # Check for -Wl,--gc-sections
++    # XXX This test is broken at the moment, as symbols required for
++    # linking are now in libsupc++ (not built yet.....). In addition, 
++    # this test has cored on solaris in the past. In addition,
++    # --gc-sections doesn't really work at the moment (keeps on discarding
++    # used sections, first .eh_frame and now some of the glibc sections for
++    # iconv). Bzzzzt. Thanks for playing, maybe next time.
++    echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
++echo "configure:4312: checking for ld that supports -Wl,--gc-sections" >&5
++    if test "$cross_compiling" = yes; then
++  ac_sectionLDflags=yes
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4317 "configure"
++#include "confdefs.h"
++
++     int main(void) 
++     {
++       try { throw 1; }
++       catch (...) { };
++       return 0;
++     }
++    
++EOF
++if { (eval echo configure:4328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++  ac_sectionLDflags=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -fr conftest*
++  ac_sectionLDflags=no
++fi
++rm -fr conftest*
++fi
++
++    if test "$ac_test_CFLAGS" = set; then
++      CFLAGS="$ac_save_CFLAGS"
++    else
++      # this is the suspicious part
++      CFLAGS=''
++    fi
++    if test "$ac_sectionLDflags" = "yes"; then
++      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
++    fi
++    echo "$ac_t""$ac_sectionLDflags" 1>&6
++  fi
++
++  # Set linker optimization flags.
++  if test x"$with_gnu_ld" = x"yes"; then
++    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
++  fi
++
++  
++  
++
++      
++    echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
++echo "configure:4362: checking for main in -lm" >&5
++ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lm  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 4370 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lm $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++  for ac_func in nan copysignf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4407: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4412 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"
++fi
++done
++
++
++    for ac_func in __signbit
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4464: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4469 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbit.lo"
++fi
++done
++
++  for ac_func in __signbitf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4520: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4525 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"
++fi
++done
++
++
++          if test x$ac_cv_func_copysignl = x"yes"; then
++    for ac_func in __signbitl
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4578: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4583 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"
++fi
++done
++
++  fi
++
++  if test -n "$LIBMATHOBJS"; then
++    need_libmath=yes
++  fi
++  
++  
++
++if test "$need_libmath" = yes; then
++  GLIBCPP_BUILD_LIBMATH_TRUE=
++  GLIBCPP_BUILD_LIBMATH_FALSE='#'
++else
++  GLIBCPP_BUILD_LIBMATH_TRUE='#'
++  GLIBCPP_BUILD_LIBMATH_FALSE=
++fi
++
++      
++    enable_wchar_t=no
++
++      echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
++echo "configure:4651: checking for mbstate_t" >&5
++  cat > conftest.$ac_ext <<EOF
++#line 4653 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++mbstate_t teststate;
++; return 0; }
++EOF
++if { (eval echo configure:4660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  have_mbstate_t=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  have_mbstate_t=no
++fi
++rm -f conftest*
++  echo "$ac_t""$have_mbstate_t" 1>&6
++  if test x"$have_mbstate_t" = xyes; then
++    cat >> confdefs.h <<\EOF
++#define HAVE_MBSTATE_T 1
++EOF
++
++  fi
++
++    for ac_hdr in wchar.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4682: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4687 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wchar_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wchar_h=no
++fi
++done
++
++  for ac_hdr in wctype.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4723: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4728 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wctype_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wctype_h=no
++fi
++done
++
++  
++    if test x"$ac_has_wchar_h" = xyes &&
++     test x"$ac_has_wctype_h" = xyes &&
++     test x"$enable_c_mbchar" != xno; then
++      
++            echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
++echo "configure:4766: checking for WCHAR_MIN and WCHAR_MAX" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4768 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++int i = WCHAR_MIN; int j = WCHAR_MAX;
++; return 0; }
++EOF
++if { (eval echo configure:4775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_wchar_minmax=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_wchar_minmax=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_wchar_minmax" 1>&6
++    
++            echo $ac_n "checking for WEOF""... $ac_c" 1>&6
++echo "configure:4788: checking for WEOF" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4790 "configure"
++#include "confdefs.h"
++
++      #include <wchar.h>
++      #include <stddef.h>
++int main() {
++wint_t i = WEOF;
++; return 0; }
++EOF
++if { (eval echo configure:4799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_weof=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_weof=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_weof" 1>&6
++  
++        ac_wfuncs=yes
++    for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4815: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4820 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++  
++        for ac_func in btowc wctob fgetwc fgetws fputwc fputws fwide \
++    fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
++    vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
++    mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
++    wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
++    wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4878: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4883 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++
++    echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
++echo "configure:4934: checking for ISO C99 wchar_t support" >&5
++    if test x"$has_weof" = xyes &&
++       test x"$has_wchar_minmax" = xyes &&
++       test x"$ac_wfuncs" = xyes; then
++      ac_isoC99_wchar_t=yes
++    else
++      ac_isoC99_wchar_t=no
++    fi
++    echo "$ac_t""$ac_isoC99_wchar_t" 1>&6
++  
++            ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
++echo "configure:4946: checking for iconv.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4951 "configure"
++#include "confdefs.h"
++#include <iconv.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_iconv_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_iconv_h=no
++fi
++
++    ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
++echo "configure:4980: checking for langinfo.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4985 "configure"
++#include "confdefs.h"
++#include <langinfo.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4990: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_langinfo_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_langinfo_h=no
++fi
++
++
++        echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
++echo "configure:5014: checking for iconv in -liconv" >&5
++ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-liconv  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 5022 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char iconv();
++
++int main() {
++iconv()
++; return 0; }
++EOF
++if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  libiconv="-liconv"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    ac_save_LIBS="$LIBS"
++    LIBS="$LIBS $libiconv"
++
++    for ac_func in iconv_open iconv_close iconv nl_langinfo
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:5059: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 5064 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ \
++    ac_XPG2funcs=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_XPG2funcs=no
++fi
++done
++
++  
++    LIBS="$ac_save_LIBS"
++
++    echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
++echo "configure:5117: checking for XPG2 wchar_t support" >&5
++    if test x"$ac_has_iconv_h" = xyes &&
++       test x"$ac_has_langinfo_h" = xyes &&
++       test x"$ac_XPG2funcs" = xyes; then
++      ac_XPG2_wchar_t=yes
++    else
++      ac_XPG2_wchar_t=no
++    fi
++    echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
++  
++            if test x"$ac_isoC99_wchar_t" = xyes &&
++       test x"$ac_XPG2_wchar_t" = xyes; then
++       cat >> confdefs.h <<\EOF
++#define _GLIBCPP_USE_WCHAR_T 1
++EOF
++
++       enable_wchar_t=yes 
++    fi
++  fi
++  echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
++echo "configure:5137: checking for enabled wchar_t specializations" >&5
++  echo "$ac_t""$enable_wchar_t" 1>&6	
++  
++
++if test "$enable_wchar_t" = yes; then
++  GLIBCPP_TEST_WCHAR_T_TRUE=
++  GLIBCPP_TEST_WCHAR_T_FALSE='#'
++else
++  GLIBCPP_TEST_WCHAR_T_TRUE='#'
++  GLIBCPP_TEST_WCHAR_T_FALSE=
++fi	
++
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_COPYSIGN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITE 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITEF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINFF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNAN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNANF 1
++EOF
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure.in gcc-3.3.3/libstdc++-v3/configure.in
+--- gcc-3.3.3-dist/libstdc++-v3/configure.in	2004-01-12 10:19:22.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/configure.in	2004-08-12 04:47:51.000000000 -0500
+@@ -117,6 +117,36 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h])
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      AC_SUBST(SECTION_FLAGS)
++      GLIBCPP_CHECK_LINKER_FEATURES
++      GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
++      GLIBCPP_CHECK_WCHAR_T_SUPPORT
++
++      AC_DEFINE(HAVE_COPYSIGN)
++      #AC_DEFINE(HAVE_COPYSIGNF)
++      AC_DEFINE(HAVE_FINITE)
++      AC_DEFINE(HAVE_FINITEF)
++      #AC_DEFINE(HAVE_FREXPF)
++      #AC_DEFINE(HAVE_HYPOTF)
++      AC_DEFINE(HAVE_ISINF)
++      AC_DEFINE(HAVE_ISINFF)
++      AC_DEFINE(HAVE_ISNAN)
++      AC_DEFINE(HAVE_ISNANF)
++      #AC_DEFINE(HAVE_SINCOS)
++      #AC_DEFINE(HAVE_SINCOSF)
++      #if test x"long_double_math_on_this_cpu" = x"yes"; then
++        #AC_DEFINE(HAVE_FINITEL)
++        #AC_DEFINE(HAVE_HYPOTL)
++        #AC_DEFINE(HAVE_ISINFL)
++        #AC_DEFINE(HAVE_ISNANL)
++      #fi
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure.target gcc-3.3.3/libstdc++-v3/configure.target
+--- gcc-3.3.3-dist/libstdc++-v3/configure.target	2003-10-01 14:07:07.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/configure.target	2004-08-12 04:47:51.000000000 -0500
+@@ -133,6 +133,9 @@
+   freebsd*)
+     os_include_dir="os/bsd/freebsd"
+     ;;
++  linux-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
+   gnu* | linux*)
+     os_include_dir="os/gnu-linux"
+     ;;
+diff -urN gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cstdlib.h gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h
+--- gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cstdlib.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h	2004-08-12 04:47:51.000000000 -0500
+@@ -101,9 +101,11 @@
+   using ::labs;
+   using ::ldiv;
+   using ::malloc;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::mblen;
+   using ::mbstowcs;
+   using ::mbtowc;
++#endif
+   using ::qsort;
+   using ::rand;
+   using ::realloc;
+@@ -112,8 +114,10 @@
+   using ::strtol;
+   using ::strtoul;
+   using ::system;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::wcstombs;
+   using ::wctomb;
++#endif
+ 
+   inline long 
+   abs(long __i) { return labs(__i); }
+diff -urN gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cwchar.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h	2004-08-12 04:47:51.000000000 -0500
+@@ -165,7 +165,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#ifdef HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
+diff -urN gcc-3.3.3-dist/libtool.m4 gcc-3.3.3/libtool.m4
+--- gcc-3.3.3-dist/libtool.m4	2003-09-09 03:04:17.000000000 -0500
++++ gcc-3.3.3/libtool.m4	2004-08-12 04:47:51.000000000 -0500
+@@ -687,6 +687,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.3.3-dist/ltconfig gcc-3.3.3/ltconfig
+--- gcc-3.3.3-dist/ltconfig	2003-02-19 20:10:02.000000000 -0600
++++ gcc-3.3.3/ltconfig	2004-08-12 04:47:51.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1247,6 +1248,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.3.3/110-uclibc-conf.patch b/openwrt/toolchain/gcc/3.3.3/110-uclibc-conf.patch
new file mode 100644
index 0000000000..f297c3283f
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.3/110-uclibc-conf.patch
@@ -0,0 +1,55 @@
+Use the patch by Carl Miller <chaz@energoncube.net> for powerpc, with
+some minor modifications.  Changed *os_uclibc to *os_linux_uclibc since
+at some point we might support other platforms.  Also updated to 3.3.3.
+diff -urN gcc-3.3.3/gcc/config/rs6000/linux.h gcc-3.3.3-new/gcc/config/rs6000/linux.h
+--- gcc-3.3.3/gcc/config/rs6000/linux.h	2003-11-14 00:46:10.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/linux.h	2004-02-16 21:13:40.000000000 -0600
+@@ -64,7 +64,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)");
+diff -urN gcc-3.3.3/gcc/config/rs6000/sysv4.h gcc-3.3.3-new/gcc/config/rs6000/sysv4.h
+--- gcc-3.3.3/gcc/config/rs6000/sysv4.h	2003-10-28 13:55:41.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/sysv4.h	2004-02-16 21:13:40.000000000 -0600
+@@ -968,9 +968,11 @@
+ %{mcall-linux: %(link_os_linux) } \
+ %{mcall-gnu: %(link_os_gnu) } \
+ %{mcall-netbsd: %(link_os_netbsd) } \
++%{mcall-uclibc: %(link_os_linux_uclibc) } \
+ %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \
+          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \
+-         %{!mcall-netbsd: %(link_os_default) }}}}}}}}}"
++         %{!mcall-netbsd: %{!mcall-uclibc: \
++         %(link_os_default) }}}}}}}}}}"
+ 
+ #define LINK_OS_DEFAULT_SPEC ""
+ 
+@@ -1307,6 +1309,12 @@
+ 
+ #define LINK_OS_WINDISS_SPEC ""
+ 
++/* uClibc support for Linux. */
++
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ /* Define any extra SPECS that the compiler needs to generate.  */
+ /* Override rs6000.h definition.  */
+ #undef	SUBTARGET_EXTRA_SPECS
+@@ -1372,6 +1380,7 @@
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_vxworks",		LINK_OS_VXWORKS_SPEC },			\
+   { "link_os_windiss",		LINK_OS_WINDISS_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_default",		LINK_OS_DEFAULT_SPEC },			\
+   { "cc1_endian_big",		CC1_ENDIAN_BIG_SPEC },			\
+   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
diff --git a/openwrt/toolchain/gcc/3.3.3/120-softfloat.patch b/openwrt/toolchain/gcc/3.3.3/120-softfloat.patch
new file mode 100644
index 0000000000..f2431896cf
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.3/120-softfloat.patch
@@ -0,0 +1,14 @@
+--- gcc-3.3.2-old/configure.in	2003-08-09 01:57:21.000000000 -0500
++++ gcc-3.3.2/configure.in	2004-01-15 12:46:29.000000000 -0600
+@@ -1418,6 +1418,11 @@
+ fi
+ 
+ FLAGS_FOR_TARGET=
++case " $targargs " in
++ *" --nfp "* | *" --without-float "*)
++    FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -msoft-float'
++    ;;
++esac
+ case " $target_configdirs " in
+  *" newlib "*)
+   case " $targargs " in
diff --git a/openwrt/toolchain/gcc/3.3.3/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.3.3/200-uclibc-locale.patch
new file mode 100644
index 0000000000..5880d834b4
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.3/200-uclibc-locale.patch
@@ -0,0 +1,3021 @@
+Warning!  This patch is not finished.  The wide char time-related stuff
+is broken or non-functional.  But it serves as a starting point to get
+things building while I continue to work on the uClibc locale internals.
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-01-09 07:55:02.000000000 -0600
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strtol_l) __strtol_l;
++extern "C" __typeof(strtoll_l) __strtoll_l;
++extern "C" __typeof(strtoul_l) __strtoul_l;
++extern "C" __typeof(strtoull_l) __strtoull_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-01-09 08:37:55.000000000 -0600
+@@ -0,0 +1,231 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++      {
++	char* __sanity;
++	errno = 0;
++	long __l = __strtol_l(__s, &__sanity, __base, __cloc);
++	if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	  __v = __l;
++	else
++	  __err |= ios_base::failbit;
++      }
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ul;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++#ifdef _GLIBCPP_USE_LONG_LONG
++  template<>
++    void
++    __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ll;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{      
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long long __ull = __strtoull_l(__s, &__sanity, __base, 
++						  __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ull;
++	  else
++	    __err |= ios_base::failbit;
++	}  
++    }
++#endif
++
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error("attempt to create locale from unknown name");
++      }
++#else
++    __cloc = NULL;
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (_S_c_locale != __cloc)
++      __freelocale(__cloc); 
++#else
++    __cloc = NULL;
++#endif
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++#ifdef __UCLIBC_HAS_XLOCALE__
++  { return __duplocale(__cloc); }
++#else
++  { return __c_locale(); }
++#endif
++
++  const char* locale::_S_categories[_S_categories_size 
++				    + _S_extra_categories_size] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES"
++#if _GLIBCPP_NUM_CATEGORIES != 0
++      , 
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}  // namespace std
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-01-09 07:51:06.000000000 -0600
+@@ -0,0 +1,118 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _CPP_BITS_C_LOCALE_H
++#define _CPP_BITS_C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCPP_C_LOCALE_GNU for
++#endif
++#define _GLIBCPP_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCPP_NUM_CATEGORIES 6
++#define _GLIBCPP_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec = -1)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec = -1)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = setlocale(LC_ALL, NULL);
++      char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
++      if (__sav)
++        strcpy(__sav, __old);
++      setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      int __ret;
++      if (__prec >= 0)
++        __ret = snprintf(__out, __size, __fmt, __prec, __v);
++      else
++        __ret = snprintf(__out, __size, __fmt, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      setlocale(LC_ALL, __sav);
++      free(__sav);
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-01-09 04:04:34.000000000 -0600
+@@ -0,0 +1,113 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCPP_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = wcsrtombs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = mbsrtowcs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	2004-01-09 01:53:51.000000000 -0600
+@@ -0,0 +1,461 @@
++// Locale support (codecvt) -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 Template class codecvt
++//
++
++// Warning: this file is not meant for user inclusion.  Use <locale>.
++
++// Written by Benjamin Kosnik <bkoz@cygnus.com>
++
++  // XXX
++  // Define this here to codecvt.cc can have _S_max_size definition.
++#define _GLIBCPP_USE___ENC_TRAITS 1
++
++  // Extension to use icov for dealing with character encodings,
++  // including conversions and comparisons between various character
++  // sets.  This object encapsulates data that may need to be shared between
++  // char_traits, codecvt and ctype.
++  class __enc_traits
++  {
++  public:
++    // Types: 
++    // NB: A conversion descriptor subsumes and enhances the
++    // functionality of a simple state type such as mbstate_t.
++    typedef iconv_t	__desc_type;
++    
++  protected:
++    // Data Members:
++    // Max size of charset encoding name
++    static const int 	_S_max_size = 32;
++    // Name of internal character set encoding.
++    char	       	_M_int_enc[_S_max_size];
++    // Name of external character set encoding.
++    char  	       	_M_ext_enc[_S_max_size];
++
++    // Conversion descriptor between external encoding to internal encoding.
++    __desc_type		_M_in_desc;
++    // Conversion descriptor between internal encoding to external encoding.
++    __desc_type		_M_out_desc;
++
++    // Details the byte-order marker for the external encoding, if necessary.
++    int			_M_ext_bom;
++
++    // Details the byte-order marker for the internal encoding, if necessary.
++    int			_M_int_bom;
++
++  public:
++    explicit __enc_traits() 
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) 
++    {
++      memset(_M_int_enc, 0, _S_max_size);
++      memset(_M_ext_enc, 0, _S_max_size);
++    }
++
++    explicit __enc_traits(const char* __int, const char* __ext, 
++			  int __ibom = 0, int __ebom = 0)
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
++    {
++      strncpy(_M_int_enc, __int, _S_max_size);
++      strncpy(_M_ext_enc, __ext, _S_max_size);
++    }
++
++    // 21.1.2 traits typedefs
++    // p4
++    // typedef STATE_T state_type
++    // requires: state_type shall meet the requirements of
++    // CopyConstructible types (20.1.3)
++    __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++    }
++
++    // Need assignment operator as well.
++    __enc_traits&
++    operator=(const __enc_traits& __obj)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_in_desc = 0;
++      _M_out_desc = 0;
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++      return *this;
++    }
++
++    ~__enc_traits()
++    {
++      __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (_M_in_desc && _M_in_desc != __err) 
++	iconv_close(_M_in_desc);
++      if (_M_out_desc && _M_out_desc != __err) 
++	iconv_close(_M_out_desc);
++    } 
++
++    void
++    _M_init()
++    {
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (!_M_in_desc)
++	{
++	  _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
++	  if (_M_in_desc == __err)
++	    __throw_runtime_error("creating iconv input descriptor failed.");
++	}
++      if (!_M_out_desc)
++	{
++	  _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
++	  if (_M_out_desc == __err)
++	    __throw_runtime_error("creating iconv output descriptor failed.");
++	}
++    }
++
++    bool
++    _M_good()
++    { 
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      bool __test = _M_in_desc && _M_in_desc != __err; 
++      __test &=  _M_out_desc && _M_out_desc != __err;
++      return __test;
++    }
++
++    const __desc_type* 
++    _M_get_in_descriptor()
++    { return &_M_in_desc; }
++
++    const __desc_type* 
++    _M_get_out_descriptor()
++    { return &_M_out_desc; }
++
++    int 
++    _M_get_external_bom()
++    { return _M_ext_bom; }
++
++    int 
++    _M_get_internal_bom()
++    { return _M_int_bom; }
++
++    const char* 
++    _M_get_internal_enc()
++    { return _M_int_enc; }
++
++    const char* 
++    _M_get_external_enc()
++    { return _M_ext_enc; }
++  };
++
++  // Partial specialization
++  // This specialization takes advantage of iconv to provide code
++  // conversions between a large number of character encodings.
++  template<typename _InternT, typename _ExternT>
++    class codecvt<_InternT, _ExternT, __enc_traits>
++    : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
++    {
++    public:      
++      // Types:
++      typedef codecvt_base::result			result;
++      typedef _InternT 					intern_type;
++      typedef _ExternT 					extern_type;
++      typedef __enc_traits 				state_type;
++      typedef __enc_traits::__desc_type 		__desc_type;
++      typedef __enc_traits				__enc_type;
++
++      // Data Members:
++      static locale::id 		id;
++
++      explicit 
++      codecvt(size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++      explicit 
++      codecvt(__enc_type* __enc, size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++    protected:
++      virtual 
++      ~codecvt() { }
++
++      virtual result
++      do_out(state_type& __state, const intern_type* __from, 
++	     const intern_type* __from_end, const intern_type*& __from_next,
++	     extern_type* __to, extern_type* __to_end,
++	     extern_type*& __to_next) const;
++
++      virtual result
++      do_unshift(state_type& __state, extern_type* __to, 
++		 extern_type* __to_end, extern_type*& __to_next) const;
++
++      virtual result
++      do_in(state_type& __state, const extern_type* __from, 
++	    const extern_type* __from_end, const extern_type*& __from_next,
++	    intern_type* __to, intern_type* __to_end, 
++	    intern_type*& __to_next) const;
++
++      virtual int 
++      do_encoding() const throw();
++
++      virtual bool 
++      do_always_noconv() const throw();
++
++      virtual int 
++      do_length(const state_type&, const extern_type* __from, 
++		const extern_type* __end, size_t __max) const;
++
++      virtual int 
++      do_max_length() const throw();
++    };
++
++  template<typename _InternT, typename _ExternT>
++    locale::id 
++    codecvt<_InternT, _ExternT, __enc_traits>::id;
++
++  // This adaptor works around the signature problems of the second
++  // argument to iconv():  SUSv2 and others use 'const char**', but glibc 2.2
++  // uses 'char**', which matches the POSIX 1003.1-2001 standard.
++  // Using this adaptor, g++ will do the work for us.
++  template<typename _T>
++    inline size_t
++    __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
++                    iconv_t __cd, char** __inbuf, size_t* __inbytes,
++                    char** __outbuf, size_t* __outbytes)
++    { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_out(state_type& __state, const intern_type* __from, 
++	   const intern_type* __from_end, const intern_type*& __from_next,
++	   extern_type* __to, extern_type* __to_end,
++	   extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_out_descriptor();
++	  const size_t __fmultiple = sizeof(intern_type);
++	  size_t __fbytes = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(extern_type);
++	  size_t __tbytes = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __int_bom = __state._M_get_internal_bom();
++	  if (__int_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<intern_type>(__int_bom);
++	      char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                        &__fbytes, &__cto, &__tbytes); 
++	    }
++	  else
++	    {
++	      intern_type* __cfixed = const_cast<intern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes, 
++				       &__cto, &__tbytes); 
++	    }
++
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__fbytes < __fmultiple * (__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<extern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_unshift(state_type& __state, extern_type* __to, 
++	       extern_type* __to_end, extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
++                                          &__cto, &__tlen); 
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      if (__tlen == __tmultiple * (__to_end - __to))
++		__ret = codecvt_base::noconv;
++	      else if (__tlen == 0)
++		__ret = codecvt_base::ok;
++	      else
++		__ret = codecvt_base::partial;
++	    }
++	  else 
++	    __ret = codecvt_base::error;
++	}
++      return __ret; 
++    }
++   
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_in(state_type& __state, const extern_type* __from, 
++	  const extern_type* __from_end, const extern_type*& __from_next,
++	  intern_type* __to, intern_type* __to_end, 
++	  intern_type*& __to_next) const
++    { 
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __fmultiple = sizeof(extern_type);
++	  size_t __flen = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __ext_bom = __state._M_get_external_bom();
++	  if (__ext_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      extern_type* __cfixed =  static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<extern_type>(__ext_bom);
++	      char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++	  else
++	    {
++	      extern_type* __cfixed = const_cast<extern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<intern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__flen < static_cast<size_t>(__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<intern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_encoding() const throw()
++    {
++      int __ret = 0;
++      if (sizeof(_ExternT) <= sizeof(_InternT))
++	__ret = sizeof(_InternT)/sizeof(_ExternT);
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    bool 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_always_noconv() const throw()
++    { return false; }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_length(const state_type&, const extern_type* __from, 
++	      const extern_type* __end, size_t __max) const
++    { return min(__max, static_cast<size_t>(__end - __from)); }
++
++#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
++// 74.  Garbled text for codecvt::do_max_length
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_max_length() const throw()
++    { return 1; }
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-01-09 08:06:24.000000000 -0600
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-01-09 08:15:41.000000000 -0600
+@@ -0,0 +1,274 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 	
++      _S_destroy_c_locale(_M_c_locale_ctype);
++      _S_create_c_locale(_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++      _M_toupper = _M_c_locale_ctype->__ctype_toupper;
++      _M_tolower = _M_c_locale_ctype->__ctype_tolower;
++      _M_table = _M_c_locale_ctype->__ctype_b;
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  };
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      {
++	const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	if (__m & __bit)
++	  __ret |= __iswctype_l(__c, _M_convert_to_wmask(__bit), 
++				_M_c_locale_ctype); 
++      }
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (;__lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  { 
++	    const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	    if (__iswctype_l(*__lo, _M_convert_to_wmask(__bit), 
++			     _M_c_locale_ctype))
++	      __m |= __bit;
++	  }
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wchar_t __ret = btowc(__c);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    mbstate_t __state;
++    memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++    mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  { 
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    size_t __offset = 0;
++    while (true)
++      {
++	const wchar_t* __start = __lo + __offset;        
++	size_t __len = __hi - __start;
++	
++	mbstate_t __state;
++	memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++	size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
++	if (__con != __len && __start != 0)
++	  {
++	    __offset = __start - __lo;          
++	    __dest[__offset++] = __dfault;
++	  }
++	else
++	  break;
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++#endif //  _GLIBCPP_USE_WCHAR_T
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-01-09 08:46:16.000000000 -0600
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-01-09 08:52:48.000000000 -0600
+@@ -0,0 +1,122 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : locale::facet(__refs)
++     {  
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = _S_c_name;
++#endif
++       _M_c_locale_messages = _S_c_locale; 
++     }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, 
++				const char* __s, size_t __refs) 
++     : locale::facet(__refs)
++     {
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _M_c_locale_messages = _S_clone_c_locale(__cloc); 
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_messages)
++	delete [] _M_name_messages;
++#endif
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++       if (_S_c_name != _M_name_messages)
++	 delete [] _M_name_messages;
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _S_destroy_c_locale(_M_c_locale_messages);
++       _S_create_c_locale(_M_c_locale_messages, __s); 
++     }
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-01-09 18:20:23.000000000 -0600
+@@ -0,0 +1,578 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = space;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = space;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol. 
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == true
++	  _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == false
++	  _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++							 const char*)
++#else
++							 const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len;
++	  __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-01-09 18:20:59.000000000 -0600
+@@ -0,0 +1,129 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
++	  // Check for NUL, which implies no grouping.
++	  if (_M_thousands_sep == '\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = "true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = "false";
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { }
++   
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  if (_M_thousands_sep == L'\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = L"true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = L"false";
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { }
++ #endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-01-09 08:25:03.000000000 -0600
+@@ -0,0 +1,341 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = "%m/%d/%y";
++	  _M_date_era_format = "%m/%d/%y";
++	  _M_time_format = "%H:%M:%S";
++	  _M_time_era_format = "%H:%M:%S";
++	  _M_date_time_format = "";
++	  _M_date_time_era_format = "";
++	  _M_am = "AM";
++	  _M_pm = "PM";
++	  _M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = "Sunday";
++	  _M_day2 = "Monday";
++	  _M_day3 = "Tuesday";
++	  _M_day4 = "Wednesday";
++	  _M_day5 = "Thursday";
++	  _M_day6 = "Friday";
++	  _M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = "Sun";
++	  _M_day_a2 = "Mon";
++	  _M_day_a3 = "Tue";
++	  _M_day_a4 = "Wed";
++	  _M_day_a5 = "Thu";
++	  _M_day_a6 = "Fri";
++	  _M_day_a7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = "January";
++	  _M_month02 = "February";
++	  _M_month03 = "March";
++	  _M_month04 = "April";
++	  _M_month05 = "May";
++	  _M_month06 = "June";
++	  _M_month07 = "July";
++	  _M_month08 = "August";
++	  _M_month09 = "September";
++	  _M_month10 = "October";
++	  _M_month11 = "November";
++	  _M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = "Jan";
++	  _M_month_a02 = "Feb";
++	  _M_month_a03 = "Mar";
++	  _M_month_a04 = "Apr";
++	  _M_month_a05 = "May";
++	  _M_month_a06 = "Jun";
++	  _M_month_a07 = "July";
++	  _M_month_a08 = "Aug";
++	  _M_month_a09 = "Sep";
++	  _M_month_a10 = "Oct";
++	  _M_month_a11 = "Nov";
++	  _M_month_a12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = L"%m/%d/%y";
++	  _M_date_era_format = L"%m/%d/%y";
++	  _M_time_format = L"%H:%M:%S";
++	  _M_time_era_format = L"%H:%M:%S";
++	  _M_date_time_format = L"";
++	  _M_date_time_era_format = L"";
++	  _M_am = L"AM";
++	  _M_pm = L"PM";
++	  _M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = L"Sunday";
++	  _M_day2 = L"Monday";
++	  _M_day3 = L"Tuesday";
++	  _M_day4 = L"Wednesday";
++	  _M_day5 = L"Thursday";
++	  _M_day6 = L"Friday";
++	  _M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = L"Sun";
++	  _M_day_a2 = L"Mon";
++	  _M_day_a3 = L"Tue";
++	  _M_day_a4 = L"Wed";
++	  _M_day_a5 = L"Thu";
++	  _M_day_a6 = L"Fri";
++	  _M_day_a7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = L"January";
++	  _M_month02 = L"February";
++	  _M_month03 = L"March";
++	  _M_month04 = L"April";
++	  _M_month05 = L"May";
++	  _M_month06 = L"June";
++	  _M_month07 = L"July";
++	  _M_month08 = L"August";
++	  _M_month09 = L"September";
++	  _M_month10 = L"October";
++	  _M_month11 = L"November";
++	  _M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = L"Jan";
++	  _M_month_a02 = L"Feb";
++	  _M_month_a03 = L"Mar";
++	  _M_month_a04 = L"Apr";
++	  _M_month_a05 = L"May";
++	  _M_month_a06 = L"Jun";
++	  _M_month_a07 = L"July";
++	  _M_month_a08 = L"Aug";
++	  _M_month_a09 = L"Sep";
++	  _M_month_a10 = L"Oct";
++	  _M_month_a11 = L"Nov";
++	  _M_month_a12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h	2004-01-09 04:26:21.000000000 -0600
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = _S_c_name;
++#endif
++      _M_initialize_timepunct(); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, 
++				     const char* __s,
++				     size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = new char[strlen(__s) + 1];
++      strcpy(_M_name_timepunct, __s);
++#endif
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_timepunct)
++	delete [] _M_name_timepunct;
++#endif
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-01-09 02:54:54.000000000 -0600
+@@ -0,0 +1,57 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISgraph;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalnum;
++  };
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h	2002-06-24 00:49:19.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-01-09 03:34:53.000000000 -0600
+@@ -0,0 +1,90 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { 
++    return __C_ctype_b;
++  }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale;
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) : 
++  __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale; 
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h	2004-01-09 04:56:13.000000000 -0600
+@@ -0,0 +1,56 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCPP_OS_DEFINES
++#define _GLIBCPP_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// These systems have declarations mismatching those in libio.h by
++// omitting throw qualifiers.  Cleanest way out is to not provide
++// throw-qualifiers at all.  Defining it as empty here will make libio.h
++// not define it.
++#undef __THROW
++#define __THROW
++
++// Tell Glibc not to try to provide its own inline versions of
++// some math functions.  Those cause assembly-time clashes with
++// our definitions.
++#define __NO_MATH_INLINES
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
diff --git a/openwrt/toolchain/gcc/3.3.3/500-loop.patch b/openwrt/toolchain/gcc/3.3.3/500-loop.patch
new file mode 100644
index 0000000000..476f84b377
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.3/500-loop.patch
@@ -0,0 +1,10 @@
+--- gcc/gcc/loop.c	14 Feb 2004 14:46:03 -0000	1.488.2.3
++++ gcc/gcc/loop.c	28 Apr 2004 22:02:53 -0000
+@@ -929,6 +929,7 @@
+ 			  || (! (GET_CODE (SET_SRC (set)) == REG
+ 				 && (REGNO (SET_SRC (set))
+ 				     < FIRST_PSEUDO_REGISTER))))
++		      && regno >= FIRST_PSEUDO_REGISTER 
+ 		      /* This test is not redundant; SET_SRC (set) might be
+ 			 a call-clobbered register and the life of REGNO
+ 			 might span a call.  */
diff --git a/openwrt/toolchain/gcc/3.3.4/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.3.4/100-uclibc-conf.patch
new file mode 100644
index 0000000000..4bbe21b7aa
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/100-uclibc-conf.patch
@@ -0,0 +1,1635 @@
+diff -urN gcc-3.3.3-dist/boehm-gc/config.sub gcc-3.3.3/boehm-gc/config.sub
+--- gcc-3.3.3-dist/boehm-gc/config.sub	2002-02-11 22:37:53.000000000 -0600
++++ gcc-3.3.3/boehm-gc/config.sub	2004-08-12 04:47:51.000000000 -0500
+@@ -118,7 +118,7 @@
+ # 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* | storm-chaos* | os2-emx* | windows32-*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | storm-chaos* | os2-emx* | windows32-*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1089,7 +1089,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3-dist/boehm-gc/configure gcc-3.3.3/boehm-gc/configure
+--- gcc-3.3.3-dist/boehm-gc/configure	2004-02-14 14:34:20.000000000 -0600
++++ gcc-3.3.3/boehm-gc/configure	2004-08-12 04:47:51.000000000 -0500
+@@ -1940,6 +1940,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.3.3-dist/config.sub gcc-3.3.3/config.sub
+--- gcc-3.3.3-dist/config.sub	2003-01-30 17:25:36.000000000 -0600
++++ gcc-3.3.3/config.sub	2004-08-12 04:47:51.000000000 -0500
+@@ -118,7 +118,7 @@
+ # 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1112,7 +1112,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3-dist/gcc/config/arm/linux-elf.h gcc-3.3.3/gcc/config/arm/linux-elf.h
+--- gcc-3.3.3-dist/gcc/config/arm/linux-elf.h	2003-09-16 10:39:23.000000000 -0500
++++ gcc-3.3.3/gcc/config/arm/linux-elf.h	2004-08-12 04:47:51.000000000 -0500
+@@ -78,6 +78,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -88,6 +100,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS()		\
+     do {					\
+diff -urN gcc-3.3.3-dist/gcc/config/cris/linux.h gcc-3.3.3/gcc/config/cris/linux.h
+--- gcc-3.3.3-dist/gcc/config/cris/linux.h	2003-03-10 21:01:35.000000000 -0600
++++ gcc-3.3.3/gcc/config/cris/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -81,6 +81,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -95,6 +114,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.3.3-dist/gcc/config/cris/t-linux-uclibc gcc-3.3.3/gcc/config/cris/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/cris/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.3.3-dist/gcc/config/i386/linux.h gcc-3.3.3/gcc/config/i386/linux.h
+--- gcc-3.3.3-dist/gcc/config/i386/linux.h	2003-11-14 00:46:12.000000000 -0600
++++ gcc-3.3.3/gcc/config/i386/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -136,6 +136,15 @@
+ 	%{static:-static}}}"
+ #endif
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -144,6 +153,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.3.3-dist/gcc/config/mips/linux.h gcc-3.3.3/gcc/config/mips/linux.h
+--- gcc-3.3.3-dist/gcc/config/mips/linux.h	2003-12-23 02:58:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/mips/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -175,6 +175,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -184,6 +195,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.3.3-dist/gcc/config/sh/linux.h gcc-3.3.3/gcc/config/sh/linux.h
+--- gcc-3.3.3-dist/gcc/config/sh/linux.h	2003-11-06 17:13:33.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -44,12 +44,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ /* The GNU C++ standard library requires that these macros be defined.  */
+ #undef CPLUSPLUS_CPP_SPEC
+diff -urN gcc-3.3.3-dist/gcc/config/sh/t-linux-uclibc gcc-3.3.3/gcc/config/sh/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,16 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++TARGET_LIBGCC2_CFLAGS = -fpic
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
+diff -urN gcc-3.3.3-dist/gcc/config/sh/t-sh64-uclibc gcc-3.3.3/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.3.3-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/t-sh64-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.3.3-dist/gcc/config/t-linux-uclibc gcc-3.3.3/gcc/config/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,23 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde-glibc
++#LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
++#  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++#LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.3.3-dist/gcc/config.gcc gcc-3.3.3/gcc/config.gcc
+--- gcc-3.3.3-dist/gcc/config.gcc	2004-01-21 00:06:00.000000000 -0600
++++ gcc-3.3.3/gcc/config.gcc	2004-08-12 04:47:51.000000000 -0500
+@@ -697,6 +697,17 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	case x${enable_threads} in
++	x | xyes | xpthreads | xposix)
++		thread_file='posix'
++		;;
++	esac
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -772,6 +783,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -1173,6 +1188,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1883,6 +1903,16 @@
+ 	tm_file="elfos.h ${tm_file} mips/netbsd.h"
+ 	tmake_file="${tmake_file} mips/t-netbsd"
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case $machine in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc mips/t-linux"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case $machine in
+@@ -2129,6 +2159,11 @@
+ 	out_file=rs6000/rs6000.c
+ 	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	out_file=rs6000/rs6000.c
++	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	out_file=rs6000/rs6000.c
+@@ -2313,10 +2348,18 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case $machine in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	gas=yes gnu_ld=yes
+ 	case $machine in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.3.3-dist/libstdc++-v3/aclocal.m4 gcc-3.3.3/libstdc++-v3/aclocal.m4
+--- gcc-3.3.3-dist/libstdc++-v3/aclocal.m4	2004-01-12 10:18:44.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/aclocal.m4	2004-08-12 04:47:51.000000000 -0500
+@@ -1216,6 +1216,9 @@
+   dnl Default to "generic"
+   if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	AC_EGREP_CPP([_GLIBCPP_ok], [
+         #include <features.h>
+@@ -1339,6 +1342,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcpp_MOFILES)
++      AC_SUBST(glibcpp_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure gcc-3.3.3/libstdc++-v3/configure
+--- gcc-3.3.3-dist/libstdc++-v3/configure	2004-01-12 10:18:45.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/configure	2004-08-12 04:49:13.000000000 -0500
+@@ -2010,6 +2010,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -2996,6 +3001,9 @@
+ 
+       if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	cat > conftest.$ac_ext <<EOF
+ #line 3002 "configure"
+@@ -3182,6 +3190,70 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      echo "$ac_t""uclibc" 1>&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
++echo "configure:3117: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_check_msgfmt'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      ac_cv_prog_check_msgfmt="yes"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt="$ac_cv_prog_check_msgfmt"
++if test -n "$check_msgfmt"; then
++  echo "$ac_t""$check_msgfmt" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      
++      
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+@@ -4212,6 +4284,968 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4224: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4229 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++fi
++done
++
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      
++      
++  # If we're not using GNU ld, then there's no point in even trying these
++  # tests.  Check for that first.  We should have already tested for gld
++  # by now (in libtool), but require it now just to be safe...
++  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
++  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
++  
++
++  # The name set by libtool depends on the version of libtool.  Shame on us
++  # for depending on an impl detail, but c'est la vie.  Older versions used
++  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
++  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
++  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
++  # set (hence we're using an older libtool), then set it.
++  if test x${with_gnu_ld+set} != xset; then
++    if test x${ac_cv_prog_gnu_ld+set} != xset; then
++      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
++      with_gnu_ld=no
++    else
++      with_gnu_ld=$ac_cv_prog_gnu_ld
++    fi
++  fi
++
++  # Start by getting the version number.  I think the libtool test already
++  # does some of this, but throws away the result.
++  
++  ldver=`$LD --version 2>/dev/null | head -1 | \
++         sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
++  
++  glibcpp_gnu_ld_version=`echo $ldver | \
++         $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
++
++  # Set --gc-sections.
++  if test "$with_gnu_ld" = "notbroken"; then
++    # GNU ld it is!  Joy and bunny rabbits!
++
++    # All these tests are for C++; save the language and the compiler flags.
++    # Need to do this so that g++ won't try to link in libstdc++
++    ac_test_CFLAGS="${CFLAGS+set}"
++    ac_save_CFLAGS="$CFLAGS"
++    CFLAGS='-x c++  -Wl,--gc-sections'
++
++    # Check for -Wl,--gc-sections
++    # XXX This test is broken at the moment, as symbols required for
++    # linking are now in libsupc++ (not built yet.....). In addition, 
++    # this test has cored on solaris in the past. In addition,
++    # --gc-sections doesn't really work at the moment (keeps on discarding
++    # used sections, first .eh_frame and now some of the glibc sections for
++    # iconv). Bzzzzt. Thanks for playing, maybe next time.
++    echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
++echo "configure:4312: checking for ld that supports -Wl,--gc-sections" >&5
++    if test "$cross_compiling" = yes; then
++  ac_sectionLDflags=yes
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4317 "configure"
++#include "confdefs.h"
++
++     int main(void) 
++     {
++       try { throw 1; }
++       catch (...) { };
++       return 0;
++     }
++    
++EOF
++if { (eval echo configure:4328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++  ac_sectionLDflags=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -fr conftest*
++  ac_sectionLDflags=no
++fi
++rm -fr conftest*
++fi
++
++    if test "$ac_test_CFLAGS" = set; then
++      CFLAGS="$ac_save_CFLAGS"
++    else
++      # this is the suspicious part
++      CFLAGS=''
++    fi
++    if test "$ac_sectionLDflags" = "yes"; then
++      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
++    fi
++    echo "$ac_t""$ac_sectionLDflags" 1>&6
++  fi
++
++  # Set linker optimization flags.
++  if test x"$with_gnu_ld" = x"yes"; then
++    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
++  fi
++
++  
++  
++
++      
++    echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
++echo "configure:4362: checking for main in -lm" >&5
++ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lm  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 4370 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lm $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++  for ac_func in nan copysignf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4407: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4412 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"
++fi
++done
++
++
++    for ac_func in __signbit
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4464: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4469 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbit.lo"
++fi
++done
++
++  for ac_func in __signbitf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4520: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4525 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"
++fi
++done
++
++
++          if test x$ac_cv_func_copysignl = x"yes"; then
++    for ac_func in __signbitl
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4578: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4583 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"
++fi
++done
++
++  fi
++
++  if test -n "$LIBMATHOBJS"; then
++    need_libmath=yes
++  fi
++  
++  
++
++if test "$need_libmath" = yes; then
++  GLIBCPP_BUILD_LIBMATH_TRUE=
++  GLIBCPP_BUILD_LIBMATH_FALSE='#'
++else
++  GLIBCPP_BUILD_LIBMATH_TRUE='#'
++  GLIBCPP_BUILD_LIBMATH_FALSE=
++fi
++
++      
++    enable_wchar_t=no
++
++      echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
++echo "configure:4651: checking for mbstate_t" >&5
++  cat > conftest.$ac_ext <<EOF
++#line 4653 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++mbstate_t teststate;
++; return 0; }
++EOF
++if { (eval echo configure:4660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  have_mbstate_t=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  have_mbstate_t=no
++fi
++rm -f conftest*
++  echo "$ac_t""$have_mbstate_t" 1>&6
++  if test x"$have_mbstate_t" = xyes; then
++    cat >> confdefs.h <<\EOF
++#define HAVE_MBSTATE_T 1
++EOF
++
++  fi
++
++    for ac_hdr in wchar.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4682: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4687 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wchar_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wchar_h=no
++fi
++done
++
++  for ac_hdr in wctype.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4723: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4728 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wctype_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wctype_h=no
++fi
++done
++
++  
++    if test x"$ac_has_wchar_h" = xyes &&
++     test x"$ac_has_wctype_h" = xyes &&
++     test x"$enable_c_mbchar" != xno; then
++      
++            echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
++echo "configure:4766: checking for WCHAR_MIN and WCHAR_MAX" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4768 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++int i = WCHAR_MIN; int j = WCHAR_MAX;
++; return 0; }
++EOF
++if { (eval echo configure:4775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_wchar_minmax=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_wchar_minmax=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_wchar_minmax" 1>&6
++    
++            echo $ac_n "checking for WEOF""... $ac_c" 1>&6
++echo "configure:4788: checking for WEOF" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4790 "configure"
++#include "confdefs.h"
++
++      #include <wchar.h>
++      #include <stddef.h>
++int main() {
++wint_t i = WEOF;
++; return 0; }
++EOF
++if { (eval echo configure:4799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_weof=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_weof=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_weof" 1>&6
++  
++        ac_wfuncs=yes
++    for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4815: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4820 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++  
++        for ac_func in btowc wctob fgetwc fgetws fputwc fputws fwide \
++    fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
++    vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
++    mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
++    wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
++    wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4878: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4883 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++
++    echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
++echo "configure:4934: checking for ISO C99 wchar_t support" >&5
++    if test x"$has_weof" = xyes &&
++       test x"$has_wchar_minmax" = xyes &&
++       test x"$ac_wfuncs" = xyes; then
++      ac_isoC99_wchar_t=yes
++    else
++      ac_isoC99_wchar_t=no
++    fi
++    echo "$ac_t""$ac_isoC99_wchar_t" 1>&6
++  
++            ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
++echo "configure:4946: checking for iconv.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4951 "configure"
++#include "confdefs.h"
++#include <iconv.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_iconv_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_iconv_h=no
++fi
++
++    ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
++echo "configure:4980: checking for langinfo.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4985 "configure"
++#include "confdefs.h"
++#include <langinfo.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4990: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_langinfo_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_langinfo_h=no
++fi
++
++
++        echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
++echo "configure:5014: checking for iconv in -liconv" >&5
++ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-liconv  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 5022 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char iconv();
++
++int main() {
++iconv()
++; return 0; }
++EOF
++if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  libiconv="-liconv"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    ac_save_LIBS="$LIBS"
++    LIBS="$LIBS $libiconv"
++
++    for ac_func in iconv_open iconv_close iconv nl_langinfo
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:5059: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 5064 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ \
++    ac_XPG2funcs=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_XPG2funcs=no
++fi
++done
++
++  
++    LIBS="$ac_save_LIBS"
++
++    echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
++echo "configure:5117: checking for XPG2 wchar_t support" >&5
++    if test x"$ac_has_iconv_h" = xyes &&
++       test x"$ac_has_langinfo_h" = xyes &&
++       test x"$ac_XPG2funcs" = xyes; then
++      ac_XPG2_wchar_t=yes
++    else
++      ac_XPG2_wchar_t=no
++    fi
++    echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
++  
++            if test x"$ac_isoC99_wchar_t" = xyes &&
++       test x"$ac_XPG2_wchar_t" = xyes; then
++       cat >> confdefs.h <<\EOF
++#define _GLIBCPP_USE_WCHAR_T 1
++EOF
++
++       enable_wchar_t=yes 
++    fi
++  fi
++  echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
++echo "configure:5137: checking for enabled wchar_t specializations" >&5
++  echo "$ac_t""$enable_wchar_t" 1>&6	
++  
++
++if test "$enable_wchar_t" = yes; then
++  GLIBCPP_TEST_WCHAR_T_TRUE=
++  GLIBCPP_TEST_WCHAR_T_FALSE='#'
++else
++  GLIBCPP_TEST_WCHAR_T_TRUE='#'
++  GLIBCPP_TEST_WCHAR_T_FALSE=
++fi	
++
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_COPYSIGN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITE 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITEF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINFF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNAN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNANF 1
++EOF
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure.in gcc-3.3.3/libstdc++-v3/configure.in
+--- gcc-3.3.3-dist/libstdc++-v3/configure.in	2004-01-12 10:19:22.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/configure.in	2004-08-12 04:47:51.000000000 -0500
+@@ -117,6 +117,36 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h])
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      AC_SUBST(SECTION_FLAGS)
++      GLIBCPP_CHECK_LINKER_FEATURES
++      GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
++      GLIBCPP_CHECK_WCHAR_T_SUPPORT
++
++      AC_DEFINE(HAVE_COPYSIGN)
++      #AC_DEFINE(HAVE_COPYSIGNF)
++      AC_DEFINE(HAVE_FINITE)
++      AC_DEFINE(HAVE_FINITEF)
++      #AC_DEFINE(HAVE_FREXPF)
++      #AC_DEFINE(HAVE_HYPOTF)
++      AC_DEFINE(HAVE_ISINF)
++      AC_DEFINE(HAVE_ISINFF)
++      AC_DEFINE(HAVE_ISNAN)
++      AC_DEFINE(HAVE_ISNANF)
++      #AC_DEFINE(HAVE_SINCOS)
++      #AC_DEFINE(HAVE_SINCOSF)
++      #if test x"long_double_math_on_this_cpu" = x"yes"; then
++        #AC_DEFINE(HAVE_FINITEL)
++        #AC_DEFINE(HAVE_HYPOTL)
++        #AC_DEFINE(HAVE_ISINFL)
++        #AC_DEFINE(HAVE_ISNANL)
++      #fi
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure.target gcc-3.3.3/libstdc++-v3/configure.target
+--- gcc-3.3.3-dist/libstdc++-v3/configure.target	2003-10-01 14:07:07.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/configure.target	2004-08-12 04:47:51.000000000 -0500
+@@ -133,6 +133,9 @@
+   freebsd*)
+     os_include_dir="os/bsd/freebsd"
+     ;;
++  linux-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
+   gnu* | linux*)
+     os_include_dir="os/gnu-linux"
+     ;;
+diff -urN gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cstdlib.h gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h
+--- gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cstdlib.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h	2004-08-12 04:47:51.000000000 -0500
+@@ -101,9 +101,11 @@
+   using ::labs;
+   using ::ldiv;
+   using ::malloc;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::mblen;
+   using ::mbstowcs;
+   using ::mbtowc;
++#endif
+   using ::qsort;
+   using ::rand;
+   using ::realloc;
+@@ -112,8 +114,10 @@
+   using ::strtol;
+   using ::strtoul;
+   using ::system;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::wcstombs;
+   using ::wctomb;
++#endif
+ 
+   inline long 
+   abs(long __i) { return labs(__i); }
+diff -urN gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cwchar.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h	2004-08-12 04:47:51.000000000 -0500
+@@ -165,7 +165,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#ifdef HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
+diff -urN gcc-3.3.3-dist/libtool.m4 gcc-3.3.3/libtool.m4
+--- gcc-3.3.3-dist/libtool.m4	2003-09-09 03:04:17.000000000 -0500
++++ gcc-3.3.3/libtool.m4	2004-08-12 04:47:51.000000000 -0500
+@@ -687,6 +687,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.3.3-dist/ltconfig gcc-3.3.3/ltconfig
+--- gcc-3.3.3-dist/ltconfig	2003-02-19 20:10:02.000000000 -0600
++++ gcc-3.3.3/ltconfig	2004-08-12 04:47:51.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1247,6 +1248,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.3.4/110-uclibc-conf.patch b/openwrt/toolchain/gcc/3.3.4/110-uclibc-conf.patch
new file mode 100644
index 0000000000..f297c3283f
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/110-uclibc-conf.patch
@@ -0,0 +1,55 @@
+Use the patch by Carl Miller <chaz@energoncube.net> for powerpc, with
+some minor modifications.  Changed *os_uclibc to *os_linux_uclibc since
+at some point we might support other platforms.  Also updated to 3.3.3.
+diff -urN gcc-3.3.3/gcc/config/rs6000/linux.h gcc-3.3.3-new/gcc/config/rs6000/linux.h
+--- gcc-3.3.3/gcc/config/rs6000/linux.h	2003-11-14 00:46:10.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/linux.h	2004-02-16 21:13:40.000000000 -0600
+@@ -64,7 +64,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)");
+diff -urN gcc-3.3.3/gcc/config/rs6000/sysv4.h gcc-3.3.3-new/gcc/config/rs6000/sysv4.h
+--- gcc-3.3.3/gcc/config/rs6000/sysv4.h	2003-10-28 13:55:41.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/sysv4.h	2004-02-16 21:13:40.000000000 -0600
+@@ -968,9 +968,11 @@
+ %{mcall-linux: %(link_os_linux) } \
+ %{mcall-gnu: %(link_os_gnu) } \
+ %{mcall-netbsd: %(link_os_netbsd) } \
++%{mcall-uclibc: %(link_os_linux_uclibc) } \
+ %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \
+          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \
+-         %{!mcall-netbsd: %(link_os_default) }}}}}}}}}"
++         %{!mcall-netbsd: %{!mcall-uclibc: \
++         %(link_os_default) }}}}}}}}}}"
+ 
+ #define LINK_OS_DEFAULT_SPEC ""
+ 
+@@ -1307,6 +1309,12 @@
+ 
+ #define LINK_OS_WINDISS_SPEC ""
+ 
++/* uClibc support for Linux. */
++
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ /* Define any extra SPECS that the compiler needs to generate.  */
+ /* Override rs6000.h definition.  */
+ #undef	SUBTARGET_EXTRA_SPECS
+@@ -1372,6 +1380,7 @@
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_vxworks",		LINK_OS_VXWORKS_SPEC },			\
+   { "link_os_windiss",		LINK_OS_WINDISS_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_default",		LINK_OS_DEFAULT_SPEC },			\
+   { "cc1_endian_big",		CC1_ENDIAN_BIG_SPEC },			\
+   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
diff --git a/openwrt/toolchain/gcc/3.3.4/120-softfloat.patch b/openwrt/toolchain/gcc/3.3.4/120-softfloat.patch
new file mode 100644
index 0000000000..f2431896cf
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/120-softfloat.patch
@@ -0,0 +1,14 @@
+--- gcc-3.3.2-old/configure.in	2003-08-09 01:57:21.000000000 -0500
++++ gcc-3.3.2/configure.in	2004-01-15 12:46:29.000000000 -0600
+@@ -1418,6 +1418,11 @@
+ fi
+ 
+ FLAGS_FOR_TARGET=
++case " $targargs " in
++ *" --nfp "* | *" --without-float "*)
++    FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -msoft-float'
++    ;;
++esac
+ case " $target_configdirs " in
+  *" newlib "*)
+   case " $targargs " in
diff --git a/openwrt/toolchain/gcc/3.3.4/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.3.4/200-uclibc-locale.patch
new file mode 100644
index 0000000000..5880d834b4
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/200-uclibc-locale.patch
@@ -0,0 +1,3021 @@
+Warning!  This patch is not finished.  The wide char time-related stuff
+is broken or non-functional.  But it serves as a starting point to get
+things building while I continue to work on the uClibc locale internals.
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-01-09 07:55:02.000000000 -0600
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strtol_l) __strtol_l;
++extern "C" __typeof(strtoll_l) __strtoll_l;
++extern "C" __typeof(strtoul_l) __strtoul_l;
++extern "C" __typeof(strtoull_l) __strtoull_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-01-09 08:37:55.000000000 -0600
+@@ -0,0 +1,231 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++      {
++	char* __sanity;
++	errno = 0;
++	long __l = __strtol_l(__s, &__sanity, __base, __cloc);
++	if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	  __v = __l;
++	else
++	  __err |= ios_base::failbit;
++      }
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ul;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++#ifdef _GLIBCPP_USE_LONG_LONG
++  template<>
++    void
++    __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ll;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{      
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long long __ull = __strtoull_l(__s, &__sanity, __base, 
++						  __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ull;
++	  else
++	    __err |= ios_base::failbit;
++	}  
++    }
++#endif
++
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error("attempt to create locale from unknown name");
++      }
++#else
++    __cloc = NULL;
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (_S_c_locale != __cloc)
++      __freelocale(__cloc); 
++#else
++    __cloc = NULL;
++#endif
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++#ifdef __UCLIBC_HAS_XLOCALE__
++  { return __duplocale(__cloc); }
++#else
++  { return __c_locale(); }
++#endif
++
++  const char* locale::_S_categories[_S_categories_size 
++				    + _S_extra_categories_size] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES"
++#if _GLIBCPP_NUM_CATEGORIES != 0
++      , 
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}  // namespace std
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-01-09 07:51:06.000000000 -0600
+@@ -0,0 +1,118 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _CPP_BITS_C_LOCALE_H
++#define _CPP_BITS_C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCPP_C_LOCALE_GNU for
++#endif
++#define _GLIBCPP_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCPP_NUM_CATEGORIES 6
++#define _GLIBCPP_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec = -1)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec = -1)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = setlocale(LC_ALL, NULL);
++      char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
++      if (__sav)
++        strcpy(__sav, __old);
++      setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      int __ret;
++      if (__prec >= 0)
++        __ret = snprintf(__out, __size, __fmt, __prec, __v);
++      else
++        __ret = snprintf(__out, __size, __fmt, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      setlocale(LC_ALL, __sav);
++      free(__sav);
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-01-09 04:04:34.000000000 -0600
+@@ -0,0 +1,113 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCPP_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = wcsrtombs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = mbsrtowcs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	2004-01-09 01:53:51.000000000 -0600
+@@ -0,0 +1,461 @@
++// Locale support (codecvt) -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 Template class codecvt
++//
++
++// Warning: this file is not meant for user inclusion.  Use <locale>.
++
++// Written by Benjamin Kosnik <bkoz@cygnus.com>
++
++  // XXX
++  // Define this here to codecvt.cc can have _S_max_size definition.
++#define _GLIBCPP_USE___ENC_TRAITS 1
++
++  // Extension to use icov for dealing with character encodings,
++  // including conversions and comparisons between various character
++  // sets.  This object encapsulates data that may need to be shared between
++  // char_traits, codecvt and ctype.
++  class __enc_traits
++  {
++  public:
++    // Types: 
++    // NB: A conversion descriptor subsumes and enhances the
++    // functionality of a simple state type such as mbstate_t.
++    typedef iconv_t	__desc_type;
++    
++  protected:
++    // Data Members:
++    // Max size of charset encoding name
++    static const int 	_S_max_size = 32;
++    // Name of internal character set encoding.
++    char	       	_M_int_enc[_S_max_size];
++    // Name of external character set encoding.
++    char  	       	_M_ext_enc[_S_max_size];
++
++    // Conversion descriptor between external encoding to internal encoding.
++    __desc_type		_M_in_desc;
++    // Conversion descriptor between internal encoding to external encoding.
++    __desc_type		_M_out_desc;
++
++    // Details the byte-order marker for the external encoding, if necessary.
++    int			_M_ext_bom;
++
++    // Details the byte-order marker for the internal encoding, if necessary.
++    int			_M_int_bom;
++
++  public:
++    explicit __enc_traits() 
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) 
++    {
++      memset(_M_int_enc, 0, _S_max_size);
++      memset(_M_ext_enc, 0, _S_max_size);
++    }
++
++    explicit __enc_traits(const char* __int, const char* __ext, 
++			  int __ibom = 0, int __ebom = 0)
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
++    {
++      strncpy(_M_int_enc, __int, _S_max_size);
++      strncpy(_M_ext_enc, __ext, _S_max_size);
++    }
++
++    // 21.1.2 traits typedefs
++    // p4
++    // typedef STATE_T state_type
++    // requires: state_type shall meet the requirements of
++    // CopyConstructible types (20.1.3)
++    __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++    }
++
++    // Need assignment operator as well.
++    __enc_traits&
++    operator=(const __enc_traits& __obj)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_in_desc = 0;
++      _M_out_desc = 0;
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++      return *this;
++    }
++
++    ~__enc_traits()
++    {
++      __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (_M_in_desc && _M_in_desc != __err) 
++	iconv_close(_M_in_desc);
++      if (_M_out_desc && _M_out_desc != __err) 
++	iconv_close(_M_out_desc);
++    } 
++
++    void
++    _M_init()
++    {
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (!_M_in_desc)
++	{
++	  _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
++	  if (_M_in_desc == __err)
++	    __throw_runtime_error("creating iconv input descriptor failed.");
++	}
++      if (!_M_out_desc)
++	{
++	  _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
++	  if (_M_out_desc == __err)
++	    __throw_runtime_error("creating iconv output descriptor failed.");
++	}
++    }
++
++    bool
++    _M_good()
++    { 
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      bool __test = _M_in_desc && _M_in_desc != __err; 
++      __test &=  _M_out_desc && _M_out_desc != __err;
++      return __test;
++    }
++
++    const __desc_type* 
++    _M_get_in_descriptor()
++    { return &_M_in_desc; }
++
++    const __desc_type* 
++    _M_get_out_descriptor()
++    { return &_M_out_desc; }
++
++    int 
++    _M_get_external_bom()
++    { return _M_ext_bom; }
++
++    int 
++    _M_get_internal_bom()
++    { return _M_int_bom; }
++
++    const char* 
++    _M_get_internal_enc()
++    { return _M_int_enc; }
++
++    const char* 
++    _M_get_external_enc()
++    { return _M_ext_enc; }
++  };
++
++  // Partial specialization
++  // This specialization takes advantage of iconv to provide code
++  // conversions between a large number of character encodings.
++  template<typename _InternT, typename _ExternT>
++    class codecvt<_InternT, _ExternT, __enc_traits>
++    : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
++    {
++    public:      
++      // Types:
++      typedef codecvt_base::result			result;
++      typedef _InternT 					intern_type;
++      typedef _ExternT 					extern_type;
++      typedef __enc_traits 				state_type;
++      typedef __enc_traits::__desc_type 		__desc_type;
++      typedef __enc_traits				__enc_type;
++
++      // Data Members:
++      static locale::id 		id;
++
++      explicit 
++      codecvt(size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++      explicit 
++      codecvt(__enc_type* __enc, size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++    protected:
++      virtual 
++      ~codecvt() { }
++
++      virtual result
++      do_out(state_type& __state, const intern_type* __from, 
++	     const intern_type* __from_end, const intern_type*& __from_next,
++	     extern_type* __to, extern_type* __to_end,
++	     extern_type*& __to_next) const;
++
++      virtual result
++      do_unshift(state_type& __state, extern_type* __to, 
++		 extern_type* __to_end, extern_type*& __to_next) const;
++
++      virtual result
++      do_in(state_type& __state, const extern_type* __from, 
++	    const extern_type* __from_end, const extern_type*& __from_next,
++	    intern_type* __to, intern_type* __to_end, 
++	    intern_type*& __to_next) const;
++
++      virtual int 
++      do_encoding() const throw();
++
++      virtual bool 
++      do_always_noconv() const throw();
++
++      virtual int 
++      do_length(const state_type&, const extern_type* __from, 
++		const extern_type* __end, size_t __max) const;
++
++      virtual int 
++      do_max_length() const throw();
++    };
++
++  template<typename _InternT, typename _ExternT>
++    locale::id 
++    codecvt<_InternT, _ExternT, __enc_traits>::id;
++
++  // This adaptor works around the signature problems of the second
++  // argument to iconv():  SUSv2 and others use 'const char**', but glibc 2.2
++  // uses 'char**', which matches the POSIX 1003.1-2001 standard.
++  // Using this adaptor, g++ will do the work for us.
++  template<typename _T>
++    inline size_t
++    __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
++                    iconv_t __cd, char** __inbuf, size_t* __inbytes,
++                    char** __outbuf, size_t* __outbytes)
++    { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_out(state_type& __state, const intern_type* __from, 
++	   const intern_type* __from_end, const intern_type*& __from_next,
++	   extern_type* __to, extern_type* __to_end,
++	   extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_out_descriptor();
++	  const size_t __fmultiple = sizeof(intern_type);
++	  size_t __fbytes = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(extern_type);
++	  size_t __tbytes = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __int_bom = __state._M_get_internal_bom();
++	  if (__int_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<intern_type>(__int_bom);
++	      char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                        &__fbytes, &__cto, &__tbytes); 
++	    }
++	  else
++	    {
++	      intern_type* __cfixed = const_cast<intern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes, 
++				       &__cto, &__tbytes); 
++	    }
++
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__fbytes < __fmultiple * (__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<extern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_unshift(state_type& __state, extern_type* __to, 
++	       extern_type* __to_end, extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
++                                          &__cto, &__tlen); 
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      if (__tlen == __tmultiple * (__to_end - __to))
++		__ret = codecvt_base::noconv;
++	      else if (__tlen == 0)
++		__ret = codecvt_base::ok;
++	      else
++		__ret = codecvt_base::partial;
++	    }
++	  else 
++	    __ret = codecvt_base::error;
++	}
++      return __ret; 
++    }
++   
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_in(state_type& __state, const extern_type* __from, 
++	  const extern_type* __from_end, const extern_type*& __from_next,
++	  intern_type* __to, intern_type* __to_end, 
++	  intern_type*& __to_next) const
++    { 
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __fmultiple = sizeof(extern_type);
++	  size_t __flen = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __ext_bom = __state._M_get_external_bom();
++	  if (__ext_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      extern_type* __cfixed =  static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<extern_type>(__ext_bom);
++	      char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++	  else
++	    {
++	      extern_type* __cfixed = const_cast<extern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<intern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__flen < static_cast<size_t>(__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<intern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_encoding() const throw()
++    {
++      int __ret = 0;
++      if (sizeof(_ExternT) <= sizeof(_InternT))
++	__ret = sizeof(_InternT)/sizeof(_ExternT);
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    bool 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_always_noconv() const throw()
++    { return false; }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_length(const state_type&, const extern_type* __from, 
++	      const extern_type* __end, size_t __max) const
++    { return min(__max, static_cast<size_t>(__end - __from)); }
++
++#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
++// 74.  Garbled text for codecvt::do_max_length
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_max_length() const throw()
++    { return 1; }
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-01-09 08:06:24.000000000 -0600
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-01-09 08:15:41.000000000 -0600
+@@ -0,0 +1,274 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 	
++      _S_destroy_c_locale(_M_c_locale_ctype);
++      _S_create_c_locale(_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++      _M_toupper = _M_c_locale_ctype->__ctype_toupper;
++      _M_tolower = _M_c_locale_ctype->__ctype_tolower;
++      _M_table = _M_c_locale_ctype->__ctype_b;
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  };
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      {
++	const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	if (__m & __bit)
++	  __ret |= __iswctype_l(__c, _M_convert_to_wmask(__bit), 
++				_M_c_locale_ctype); 
++      }
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (;__lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  { 
++	    const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	    if (__iswctype_l(*__lo, _M_convert_to_wmask(__bit), 
++			     _M_c_locale_ctype))
++	      __m |= __bit;
++	  }
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wchar_t __ret = btowc(__c);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    mbstate_t __state;
++    memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++    mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  { 
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    size_t __offset = 0;
++    while (true)
++      {
++	const wchar_t* __start = __lo + __offset;        
++	size_t __len = __hi - __start;
++	
++	mbstate_t __state;
++	memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++	size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
++	if (__con != __len && __start != 0)
++	  {
++	    __offset = __start - __lo;          
++	    __dest[__offset++] = __dfault;
++	  }
++	else
++	  break;
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++#endif //  _GLIBCPP_USE_WCHAR_T
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-01-09 08:46:16.000000000 -0600
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-01-09 08:52:48.000000000 -0600
+@@ -0,0 +1,122 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : locale::facet(__refs)
++     {  
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = _S_c_name;
++#endif
++       _M_c_locale_messages = _S_c_locale; 
++     }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, 
++				const char* __s, size_t __refs) 
++     : locale::facet(__refs)
++     {
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _M_c_locale_messages = _S_clone_c_locale(__cloc); 
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_messages)
++	delete [] _M_name_messages;
++#endif
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++       if (_S_c_name != _M_name_messages)
++	 delete [] _M_name_messages;
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _S_destroy_c_locale(_M_c_locale_messages);
++       _S_create_c_locale(_M_c_locale_messages, __s); 
++     }
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-01-09 18:20:23.000000000 -0600
+@@ -0,0 +1,578 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = space;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = space;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol. 
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == true
++	  _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == false
++	  _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++							 const char*)
++#else
++							 const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len;
++	  __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-01-09 18:20:59.000000000 -0600
+@@ -0,0 +1,129 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
++	  // Check for NUL, which implies no grouping.
++	  if (_M_thousands_sep == '\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = "true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = "false";
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { }
++   
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  if (_M_thousands_sep == L'\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = L"true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = L"false";
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { }
++ #endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-01-09 08:25:03.000000000 -0600
+@@ -0,0 +1,341 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = "%m/%d/%y";
++	  _M_date_era_format = "%m/%d/%y";
++	  _M_time_format = "%H:%M:%S";
++	  _M_time_era_format = "%H:%M:%S";
++	  _M_date_time_format = "";
++	  _M_date_time_era_format = "";
++	  _M_am = "AM";
++	  _M_pm = "PM";
++	  _M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = "Sunday";
++	  _M_day2 = "Monday";
++	  _M_day3 = "Tuesday";
++	  _M_day4 = "Wednesday";
++	  _M_day5 = "Thursday";
++	  _M_day6 = "Friday";
++	  _M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = "Sun";
++	  _M_day_a2 = "Mon";
++	  _M_day_a3 = "Tue";
++	  _M_day_a4 = "Wed";
++	  _M_day_a5 = "Thu";
++	  _M_day_a6 = "Fri";
++	  _M_day_a7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = "January";
++	  _M_month02 = "February";
++	  _M_month03 = "March";
++	  _M_month04 = "April";
++	  _M_month05 = "May";
++	  _M_month06 = "June";
++	  _M_month07 = "July";
++	  _M_month08 = "August";
++	  _M_month09 = "September";
++	  _M_month10 = "October";
++	  _M_month11 = "November";
++	  _M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = "Jan";
++	  _M_month_a02 = "Feb";
++	  _M_month_a03 = "Mar";
++	  _M_month_a04 = "Apr";
++	  _M_month_a05 = "May";
++	  _M_month_a06 = "Jun";
++	  _M_month_a07 = "July";
++	  _M_month_a08 = "Aug";
++	  _M_month_a09 = "Sep";
++	  _M_month_a10 = "Oct";
++	  _M_month_a11 = "Nov";
++	  _M_month_a12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = L"%m/%d/%y";
++	  _M_date_era_format = L"%m/%d/%y";
++	  _M_time_format = L"%H:%M:%S";
++	  _M_time_era_format = L"%H:%M:%S";
++	  _M_date_time_format = L"";
++	  _M_date_time_era_format = L"";
++	  _M_am = L"AM";
++	  _M_pm = L"PM";
++	  _M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = L"Sunday";
++	  _M_day2 = L"Monday";
++	  _M_day3 = L"Tuesday";
++	  _M_day4 = L"Wednesday";
++	  _M_day5 = L"Thursday";
++	  _M_day6 = L"Friday";
++	  _M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = L"Sun";
++	  _M_day_a2 = L"Mon";
++	  _M_day_a3 = L"Tue";
++	  _M_day_a4 = L"Wed";
++	  _M_day_a5 = L"Thu";
++	  _M_day_a6 = L"Fri";
++	  _M_day_a7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = L"January";
++	  _M_month02 = L"February";
++	  _M_month03 = L"March";
++	  _M_month04 = L"April";
++	  _M_month05 = L"May";
++	  _M_month06 = L"June";
++	  _M_month07 = L"July";
++	  _M_month08 = L"August";
++	  _M_month09 = L"September";
++	  _M_month10 = L"October";
++	  _M_month11 = L"November";
++	  _M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = L"Jan";
++	  _M_month_a02 = L"Feb";
++	  _M_month_a03 = L"Mar";
++	  _M_month_a04 = L"Apr";
++	  _M_month_a05 = L"May";
++	  _M_month_a06 = L"Jun";
++	  _M_month_a07 = L"July";
++	  _M_month_a08 = L"Aug";
++	  _M_month_a09 = L"Sep";
++	  _M_month_a10 = L"Oct";
++	  _M_month_a11 = L"Nov";
++	  _M_month_a12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h	2004-01-09 04:26:21.000000000 -0600
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = _S_c_name;
++#endif
++      _M_initialize_timepunct(); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, 
++				     const char* __s,
++				     size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = new char[strlen(__s) + 1];
++      strcpy(_M_name_timepunct, __s);
++#endif
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_timepunct)
++	delete [] _M_name_timepunct;
++#endif
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-01-09 02:54:54.000000000 -0600
+@@ -0,0 +1,57 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISgraph;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalnum;
++  };
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h	2002-06-24 00:49:19.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-01-09 03:34:53.000000000 -0600
+@@ -0,0 +1,90 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { 
++    return __C_ctype_b;
++  }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale;
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) : 
++  __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale; 
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h	2004-01-09 04:56:13.000000000 -0600
+@@ -0,0 +1,56 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCPP_OS_DEFINES
++#define _GLIBCPP_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// These systems have declarations mismatching those in libio.h by
++// omitting throw qualifiers.  Cleanest way out is to not provide
++// throw-qualifiers at all.  Defining it as empty here will make libio.h
++// not define it.
++#undef __THROW
++#define __THROW
++
++// Tell Glibc not to try to provide its own inline versions of
++// some math functions.  Those cause assembly-time clashes with
++// our definitions.
++#define __NO_MATH_INLINES
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
diff --git a/openwrt/toolchain/gcc/3.3.4/500-loop.patch b/openwrt/toolchain/gcc/3.3.4/500-loop.patch
new file mode 100644
index 0000000000..476f84b377
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/500-loop.patch
@@ -0,0 +1,10 @@
+--- gcc/gcc/loop.c	14 Feb 2004 14:46:03 -0000	1.488.2.3
++++ gcc/gcc/loop.c	28 Apr 2004 22:02:53 -0000
+@@ -929,6 +929,7 @@
+ 			  || (! (GET_CODE (SET_SRC (set)) == REG
+ 				 && (REGNO (SET_SRC (set))
+ 				     < FIRST_PSEUDO_REGISTER))))
++		      && regno >= FIRST_PSEUDO_REGISTER 
+ 		      /* This test is not redundant; SET_SRC (set) might be
+ 			 a call-clobbered register and the life of REGNO
+ 			 might span a call.  */
diff --git a/openwrt/toolchain/gcc/3.3.4/specs-arm-soft-float b/openwrt/toolchain/gcc/3.3.4/specs-arm-soft-float
new file mode 100644
index 0000000000..d692174aab
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/specs-arm-soft-float
@@ -0,0 +1,124 @@
+*asm:
+%{mbig-endian:-EB} %{mlittle-endian:-EL} %{mcpu=*:-mcpu=%*} %{march=*:-march=%*} %{mapcs-*:-mapcs-%*} %(subtarget_asm_float_spec) %{mthumb-interwork:-mthumb-interwork} %(subtarget_extra_asm_spec)
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%(cpp_cpu_arch) %(subtarget_cpp_spec)			%{mapcs-32:%{mapcs-26:								%e-mapcs-26 and -mapcs-32 may not be used together}}		%{msoft-float:%{mhard-float:							%e-msoft-float and -mhard_float may not be used together}}	%{mbig-endian:%{mlittle-endian:							%e-mbig-endian and -mlittle-endian may not be used together}}
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{profile:-p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*link:
+%{h*} %{version:-v}    %{b} %{Wl,*:%*}    %{static:-Bstatic}    %{shared:-shared}    %{symbolic:-Bsymbolic}    %{rdynamic:-export-dynamic}    %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}    -X    %{mbig-endian:-EB} -m armelf_linux -p
+
+*lib:
+%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{profile:-lc_p}%{!profile:-lc}}
+
+*libgcc:
+%{!mhard-float:-lfloat} %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:-lgcc_s%M}}}
+
+*startfile:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. ;
+
+*multilib_defaults:
+marm mlittle-endian msoft-float mapcs-32 mno-thumb-interwork
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*multilib_exclusions:
+
+
+*multilib_options:
+
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*cpp_cpu_arch:
+%{march=arm2:-D__ARM_ARCH_2__} %{march=arm250:-D__ARM_ARCH_2__} %{march=arm3:-D__ARM_ARCH_2__} %{march=arm6:-D__ARM_ARCH_3__} %{march=arm600:-D__ARM_ARCH_3__} %{march=arm610:-D__ARM_ARCH_3__} %{march=arm7:-D__ARM_ARCH_3__} %{march=arm700:-D__ARM_ARCH_3__} %{march=arm710:-D__ARM_ARCH_3__} %{march=arm720:-D__ARM_ARCH_3__} %{march=arm7100:-D__ARM_ARCH_3__} %{march=arm7500:-D__ARM_ARCH_3__} %{march=arm7500fe:-D__ARM_ARCH_3__} %{march=arm7m:-D__ARM_ARCH_3M__} %{march=arm7dm:-D__ARM_ARCH_3M__} %{march=arm7dmi:-D__ARM_ARCH_3M__} %{march=arm7tdmi:-D__ARM_ARCH_4T__} %{march=arm8:-D__ARM_ARCH_4__} %{march=arm810:-D__ARM_ARCH_4__} %{march=arm9:-D__ARM_ARCH_4T__} %{march=arm920:-D__ARM_ARCH_4__} %{march=arm920t:-D__ARM_ARCH_4T__} %{march=arm9tdmi:-D__ARM_ARCH_4T__} %{march=strongarm:-D__ARM_ARCH_4__} %{march=strongarm110:-D__ARM_ARCH_4__} %{march=strongarm1100:-D__ARM_ARCH_4__} %{march=xscale:-D__ARM_ARCH_5TE__} %{march=xscale:-D__XSCALE__} %{march=armv2:-D__ARM_ARCH_2__} %{march=armv2a:-D__ARM_ARCH_2__} %{march=armv3:-D__ARM_ARCH_3__} %{march=armv3m:-D__ARM_ARCH_3M__} %{march=armv4:-D__ARM_ARCH_4__} %{march=armv4t:-D__ARM_ARCH_4T__} %{march=armv5:-D__ARM_ARCH_5__} %{march=armv5t:-D__ARM_ARCH_5T__} %{march=armv5e:-D__ARM_ARCH_5E__} %{march=armv5te:-D__ARM_ARCH_5TE__} %{!march=*:  %{mcpu=arm2:-D__ARM_ARCH_2__}  %{mcpu=arm250:-D__ARM_ARCH_2__}  %{mcpu=arm3:-D__ARM_ARCH_2__}  %{mcpu=arm6:-D__ARM_ARCH_3__}  %{mcpu=arm600:-D__ARM_ARCH_3__}  %{mcpu=arm610:-D__ARM_ARCH_3__}  %{mcpu=arm7:-D__ARM_ARCH_3__}  %{mcpu=arm700:-D__ARM_ARCH_3__}  %{mcpu=arm710:-D__ARM_ARCH_3__}  %{mcpu=arm720:-D__ARM_ARCH_3__}  %{mcpu=arm7100:-D__ARM_ARCH_3__}  %{mcpu=arm7500:-D__ARM_ARCH_3__}  %{mcpu=arm7500fe:-D__ARM_ARCH_3__}  %{mcpu=arm7m:-D__ARM_ARCH_3M__}  %{mcpu=arm7dm:-D__ARM_ARCH_3M__}  %{mcpu=arm7dmi:-D__ARM_ARCH_3M__}  %{mcpu=arm7tdmi:-D__ARM_ARCH_4T__}  %{mcpu=arm8:-D__ARM_ARCH_4__}  %{mcpu=arm810:-D__ARM_ARCH_4__}  %{mcpu=arm9:-D__ARM_ARCH_4T__}  %{mcpu=arm920:-D__ARM_ARCH_4__}  %{mcpu=arm920t:-D__ARM_ARCH_4T__}  %{mcpu=arm9tdmi:-D__ARM_ARCH_4T__}  %{mcpu=strongarm:-D__ARM_ARCH_4__}  %{mcpu=strongarm110:-D__ARM_ARCH_4__}  %{mcpu=strongarm1100:-D__ARM_ARCH_4__}  %{mcpu=xscale:-D__ARM_ARCH_5TE__}  %{mcpu=xscale:-D__XSCALE__}  %{!mcpu*:%(cpp_cpu_arch_default)}} 
+
+*cpp_cpu_arch_default:
+-D__ARM_ARCH_4T__
+
+*subtarget_cpp_spec:
+%{posix:-D_POSIX_SOURCE} %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__}
+
+*subtarget_extra_asm_spec:
+
+
+*subtarget_asm_float_spec:
+%{mapcs-float:-mfloat} %{!mhard-float:-mno-fpu}
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.4/specs-mips-soft-float b/openwrt/toolchain/gcc/3.3.4/specs-mips-soft-float
new file mode 100644
index 0000000000..2a4240012b
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/specs-mips-soft-float
@@ -0,0 +1,145 @@
+*asm:
+%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} %(subtarget_asm_optimizing_spec) %(subtarget_asm_debugging_spec) %{membedded-pic} %{mabi=32:-32}%{mabi=n32:-n32}%{mabi=64:-64}%{mabi=n64:-64} %{mabi=eabi} %{mabi=o64} %{!mabi*: %(asm_abi_default_spec)} %{mgp32} %{mgp64} %{march=*} %(target_asm_spec) %(subtarget_asm_spec)
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+%|
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%(subtarget_cpp_spec)
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{profile:-p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*link:
+%{!static:--eh-frame-hdr} %(endian_spec)   %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:         %{rdynamic:-export-dynamic}         %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}         %{static:-static}}}
+
+*lib:
+%{shared: -lc} %{!static:-rpath-link %R/lib:%R/usr/lib} %{!shared: %{pthread:-lpthread}   %{profile:-lc_p} %{!profile: -lc}}
+
+*libgcc:
+%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
+
+*startfile:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{static:crtbeginT.o%s}   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. ;
+
+*multilib_defaults:
+EB mips1 mabi=32
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*multilib_exclusions:
+
+
+*multilib_options:
+
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*subtarget_cc1_spec:
+
+
+*subtarget_cpp_spec:
+%{fno-PIC:-U__PIC__ -U__pic__} %{fno-pic:-U__PIC__ -U__pic__} %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{pthread:-D_REENTRANT}
+
+*mips_as_asm_spec:
+%{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} %{pipe: %e-pipe is not supported} %{K} %(subtarget_mips_as_asm_spec)
+
+*gas_asm_spec:
+%{mtune=*} %{v}
+
+*target_asm_spec:
+%{mmips-as: %(mips_as_asm_spec)} %{!mmips-as: %(gas_asm_spec)}
+
+*subtarget_mips_as_asm_spec:
+%{v}
+
+*subtarget_asm_optimizing_spec:
+%{noasmopt:-O0} %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}}
+
+*subtarget_asm_debugging_spec:
+-g0
+
+*mdebug_asm_spec:
+%{!gdwarf*:-mdebug} %{gdwarf*:-no-mdebug}
+
+*subtarget_asm_spec:
+%{mabi=64: -64} %{!fno-PIC:%{!fno-pic:-KPIC}} %{fno-PIC:-non_shared} %{fno-pic:-non_shared}
+
+*asm_abi_default_spec:
+-32
+
+*endian_spec:
+%{!EL:%{!mel:-EB}} %{EL|mel:-EL}
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.4/specs-mipsel-soft-float b/openwrt/toolchain/gcc/3.3.4/specs-mipsel-soft-float
new file mode 100644
index 0000000000..481bf5a395
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/specs-mipsel-soft-float
@@ -0,0 +1,145 @@
+*asm:
+%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} %(subtarget_asm_optimizing_spec) %(subtarget_asm_debugging_spec) %{membedded-pic} %{mabi=32:-32}%{mabi=n32:-n32}%{mabi=64:-64}%{mabi=n64:-64} %{mabi=eabi} %{mabi=o64} %{!mabi*: %(asm_abi_default_spec)} %{mgp32} %{mgp64} %{march=*} %(target_asm_spec) %(subtarget_asm_spec)
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+%|
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%(subtarget_cpp_spec)
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{profile:-p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*link:
+%{!static:--eh-frame-hdr} %(endian_spec)   %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:         %{rdynamic:-export-dynamic}         %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}         %{static:-static}}}
+
+*lib:
+%{shared: -lc} %{!static:-rpath-link %R/lib:%R/usr/lib} %{!shared: %{pthread:-lpthread}   %{profile:-lc_p} %{!profile: -lc}}
+
+*libgcc:
+%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
+
+*startfile:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{static:crtbeginT.o%s}   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. ;
+
+*multilib_defaults:
+EL mips1 mabi=32
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*multilib_exclusions:
+
+
+*multilib_options:
+
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*subtarget_cc1_spec:
+
+
+*subtarget_cpp_spec:
+%{fno-PIC:-U__PIC__ -U__pic__} %{fno-pic:-U__PIC__ -U__pic__} %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{pthread:-D_REENTRANT}
+
+*mips_as_asm_spec:
+%{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} %{pipe: %e-pipe is not supported} %{K} %(subtarget_mips_as_asm_spec)
+
+*gas_asm_spec:
+%{mtune=*} %{v}
+
+*target_asm_spec:
+%{mmips-as: %(mips_as_asm_spec)} %{!mmips-as: %(gas_asm_spec)}
+
+*subtarget_mips_as_asm_spec:
+%{v}
+
+*subtarget_asm_optimizing_spec:
+%{noasmopt:-O0} %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}}
+
+*subtarget_asm_debugging_spec:
+-g0
+
+*mdebug_asm_spec:
+%{!gdwarf*:-mdebug} %{gdwarf*:-no-mdebug}
+
+*subtarget_asm_spec:
+%{mabi=64: -64} %{!fno-PIC:%{!fno-pic:-KPIC}} %{fno-PIC:-non_shared} %{fno-pic:-non_shared}
+
+*asm_abi_default_spec:
+-32
+
+*endian_spec:
+%{!EB:%{!meb:-EL}} %{EB|meb:-EB}
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.4/specs-powerpc-soft-float b/openwrt/toolchain/gcc/3.3.4/specs-powerpc-soft-float
new file mode 100644
index 0000000000..8a546ac8ec
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.4/specs-powerpc-soft-float
@@ -0,0 +1,352 @@
+*asm:
+%(asm_cpu) %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} %{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} %{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} %{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian:     %{mcall-freebsd: -mbig}     %{mcall-i960-old: -mlittle}     %{mcall-linux: -mbig}     %{mcall-gnu: -mbig}     %{mcall-netbsd: -mbig} }}}}
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+%|
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %{mads: %(cpp_os_ads) } %{myellowknife: %(cpp_os_yellowknife) } %{mmvme: %(cpp_os_mvme) } %{msim: %(cpp_os_sim) } %{mwindiss: %(cpp_os_windiss) } %{mcall-freebsd: %(cpp_os_freebsd) } %{mcall-linux: %(cpp_os_linux) } %{mcall-gnu: %(cpp_os_gnu) } %{mcall-netbsd: %(cpp_os_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}}
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{G*} %{mlittle: %(cc1_endian_little)} %{!mlittle: %{mlittle-endian: %(cc1_endian_little)}} %{mbig: %(cc1_endian_big)} %{!mbig: %{mbig-endian: %(cc1_endian_big)}} %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian:     %{mcall-aixdesc: -mbig %(cc1_endian_big) }     %{mcall-freebsd: -mbig %(cc1_endian_big) }     %{mcall-i960-old: -mlittle %(cc1_endian_little) }     %{mcall-linux: -mbig %(cc1_endian_big) }     %{mcall-gnu: -mbig %(cc1_endian_big) }     %{mcall-netbsd: -mbig %(cc1_endian_big) }     %{!mcall-aixdesc: %{!mcall-freebsd: %{!mcall-i960-old: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: 	    %(cc1_endian_default)     }}}}}} }}}} %{mno-sdata: -msdata=none } %{meabi: %{!mcall-*: -mcall-sysv }} %{!meabi: %{!mno-eabi:     %{mrelocatable: -meabi }     %{mcall-freebsd: -mno-eabi }     %{mcall-i960-old: -meabi }     %{mcall-linux: -mno-eabi }     %{mcall-gnu: -mno-eabi }     %{mcall-netbsd: -mno-eabi }}} %{msdata: -msdata=default} %{mno-sdata: -msdata=none} %{profile: -p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{mads: crtsavres.o%s %(endfile_ads)} %{myellowknife: crtsavres.o%s %(endfile_yellowknife)} %{mmvme: crtsavres.o%s %(endfile_mvme)} %{msim: crtsavres.o%s %(endfile_sim)} %{mwindiss: %(endfile_windiss)} %{mcall-freebsd: crtsavres.o%s %(endfile_freebsd) } %{mcall-linux: crtsavres.o%s %(endfile_linux) } %{mcall-gnu: crtsavres.o%s %(endfile_gnu) } %{mcall-netbsd: crtsavres.o%s %(endfile_netbsd) } %{mvxworks: crtsavres.o%s %(endfile_vxworks) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %{!mvxworks: %(crtsavres_default)                                        %(endfile_default) }}}}}}}}}}
+
+*link:
+%{!static:--eh-frame-hdr} %{h*} %{v:-V} %{!msdata=none:%{G*}} %{msdata=none:-G0} %{YP,*} %{R*} %{Qy:} %{!Qn:-Qy} %(link_shlib) %{!Wl,-T*: %{!T*: %(link_start) }} %(link_target) %(link_os)
+
+*lib:
+%{mads: %(lib_ads) } %{myellowknife: %(lib_yellowknife) } %{mmvme: %(lib_mvme) } %{msim: %(lib_sim) } %{mwindiss: %(lib_windiss) } %{mcall-freebsd: %(lib_freebsd) } %{mcall-linux: %(lib_linux) } %{mcall-gnu: %(lib_gnu) } %{mcall-netbsd: %(lib_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %(lib_default) }}}}}}}}}
+
+*libgcc:
+%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
+
+*startfile:
+%{mads: %(startfile_ads) } %{myellowknife: %(startfile_yellowknife) } %{mmvme: %(startfile_mvme) } %{msim: %(startfile_sim) } %{mwindiss: %(startfile_windiss) } %{mcall-freebsd: %(startfile_freebsd) } %{mcall-linux: %(startfile_linux) } %{mcall-gnu: %(startfile_gnu) } %{mcall-netbsd: %(startfile_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %(startfile_default) }}}}}}}}}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. mhard-float;nof !mhard-float;
+
+*multilib_defaults:
+mbig mcall-sysv
+
+*multilib_extra:
+fPIC mstrict-align
+
+*multilib_matches:
+mcpu=401 msoft-float;mcpu=403 msoft-float;mcpu=405 msoft-float;mcpu=ec603e msoft-float;mcpu=801 msoft-float;mcpu=821 msoft-float;mcpu=823 msoft-float;mcpu=860 msoft-float;msoft-float msoft-float;
+
+*multilib_exclusions:
+
+
+*multilib_options:
+msoft-float
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*cpp_default:
+
+
+*asm_cpu:
+%{!mcpu*:   %{mpower: %{!mpower2: -mpwr}}   %{mpower2: -mpwrx}   %{mpowerpc*: -mppc}   %{mno-power: %{!mpowerpc*: -mcom}}   %{!mno-power: %{!mpower2: %(asm_default)}}} %{mcpu=common: -mcom} %{mcpu=power: -mpwr} %{mcpu=power2: -mpwrx} %{mcpu=power3: -m604} %{mcpu=power4: -mpower4} %{mcpu=powerpc: -mppc} %{mcpu=rios: -mpwr} %{mcpu=rios1: -mpwr} %{mcpu=rios2: -mpwrx} %{mcpu=rsc: -mpwr} %{mcpu=rsc1: -mpwr} %{mcpu=401: -mppc} %{mcpu=403: -m403} %{mcpu=405: -m405} %{mcpu=505: -mppc} %{mcpu=601: -m601} %{mcpu=602: -mppc} %{mcpu=603: -mppc} %{mcpu=603e: -mppc} %{mcpu=ec603e: -mppc} %{mcpu=604: -mppc} %{mcpu=604e: -mppc} %{mcpu=620: -mppc} %{mcpu=630: -m604} %{mcpu=740: -mppc} %{mcpu=7400: -mppc} %{mcpu=7450: -mppc} %{mcpu=750: -mppc} %{mcpu=801: -mppc} %{mcpu=821: -mppc} %{mcpu=823: -mppc} %{mcpu=860: -mppc} %{mcpu=8540: -me500} %{maltivec: -maltivec}
+
+*asm_default:
+-mppc
+
+*cpp_sysv:
+%{mrelocatable*: -D_RELOCATABLE} %{fpic: -D__PIC__=1 -D__pic__=1} %{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}}
+
+*crtsavres_default:
+crtsavres.o%s
+
+*lib_ads:
+--start-group -lads -lc --end-group
+
+*lib_yellowknife:
+--start-group -lyk -lc --end-group
+
+*lib_mvme:
+--start-group -lmvme -lc --end-group
+
+*lib_sim:
+--start-group -lsim -lc --end-group
+
+*lib_freebsd:
+							  %{!shared:								    %{!pg:								      %{!pthread:-lc}							      %{pthread:-lc_r}}							    %{pg:								      %{!pthread:-lc_p}							      %{pthread:-lc_r_p}}						  }
+
+*lib_gnu:
+%{mnewlib: --start-group -lgnu -lc --end-group } %{!mnewlib: %{shared:-lc} %{!shared: %{pthread:-lpthread } %{profile:-lc_p} %{!profile:-lc}}}
+
+*lib_linux:
+%{mnewlib: --start-group -llinux -lc --end-group } %{!mnewlib: %{pthread:-lpthread} %{shared:-lc} %{!shared: %{profile:-lc_p} %{!profile:-lc}}}
+
+*lib_netbsd:
+%{profile:-lgmon -lc_p} %{!profile:-lc}
+
+*lib_vxworks:
+
+
+*lib_windiss:
+--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group
+
+*lib_default:
+%(lib_linux)
+
+*startfile_ads:
+ecrti.o%s crt0.o%s crtbegin.o%s
+
+*startfile_yellowknife:
+ecrti.o%s crt0.o%s crtbegin.o%s
+
+*startfile_mvme:
+ecrti.o%s crt0.o%s crtbegin.o%s
+
+*startfile_sim:
+ecrti.o%s sim-crt0.o%s crtbegin.o%s
+
+*startfile_freebsd:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*startfile_gnu:
+%{!shared: %{!static: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}} %{static: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} %{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*startfile_linux:
+%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} %{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} %{static:crtbeginT.o%s} %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
+
+*startfile_netbsd:
+ncrti.o%s crt0.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*startfile_vxworks:
+
+
+*startfile_windiss:
+crt0.o%s crtbegin.o%s
+
+*startfile_default:
+%(startfile_linux)
+
+*endfile_ads:
+crtend.o%s ecrtn.o%s
+
+*endfile_yellowknife:
+crtend.o%s ecrtn.o%s
+
+*endfile_mvme:
+crtend.o%s ecrtn.o%s
+
+*endfile_sim:
+crtend.o%s ecrtn.o%s
+
+*endfile_freebsd:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*endfile_gnu:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} %{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}
+
+*endfile_linux:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} %{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}
+
+*endfile_netbsd:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} ncrtn.o%s
+
+*endfile_vxworks:
+
+
+*endfile_windiss:
+crtend.o%s
+
+*endfile_default:
+%(endfile_linux)
+
+*link_path:
+
+
+*link_shlib:
+%{shared:-shared} %{!shared: %{static:-static}}
+
+*link_target:
+%{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian:     %{mcall-i960-old: --oformat elf32-powerpcle}   }}}}
+
+*link_start:
+%{mads: %(link_start_ads) } %{myellowknife: %(link_start_yellowknife) } %{mmvme: %(link_start_mvme) } %{msim: %(link_start_sim) } %{mwindiss: %(link_start_windiss) } %{mcall-freebsd: %(link_start_freebsd) } %{mcall-linux: %(link_start_linux) } %{mcall-gnu: %(link_start_gnu) } %{mcall-netbsd: %(link_start_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd:            %{!mcall-freebsd: %(link_start_default) }}}}}}}}}
+
+*link_start_ads:
+-T ads.ld%s
+
+*link_start_yellowknife:
+-T yellowknife.ld%s
+
+*link_start_mvme:
+-Ttext 0x40000
+
+*link_start_sim:
+
+
+*link_start_freebsd:
+
+
+*link_start_gnu:
+
+
+*link_start_linux:
+
+
+*link_start_netbsd:
+
+
+*link_start_vxworks:
+
+
+*link_start_windiss:
+
+
+*link_start_default:
+%(link_start_linux)
+
+*link_os:
+%{mads: %(link_os_ads) } %{myellowknife: %(link_os_yellowknife) } %{mmvme: %(link_os_mvme) } %{msim: %(link_os_sim) } %{mwindiss: %(link_os_windiss) } %{mcall-freebsd: %(link_os_freebsd) } %{mcall-linux: %(link_os_linux) } %{mcall-gnu: %(link_os_gnu) } %{mcall-netbsd: %(link_os_netbsd) } %{mcall-uclibc: %(link_os_linux_uclibc) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %{!mcall-uclibc:          %(link_os_default) }}}}}}}}}}
+
+*link_os_ads:
+
+
+*link_os_yellowknife:
+
+
+*link_os_mvme:
+
+
+*link_os_sim:
+-m elf32ppcsim
+
+*link_os_freebsd:
+  %{p:%e`-p' not supported; use `-pg' and gprof(1)}     %{Wl,*:%*}     %{v:-V}     %{assert*} %{R*} %{rpath*} %{defsym*}     %{shared:-Bshareable %{h*} %{soname*}}     %{!shared:       %{!static: 	%{rdynamic: -export-dynamic} 	%{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}}       %{static:-Bstatic}}     %{symbolic:-Bsymbolic}
+
+*link_os_linux:
+-m elf32ppclinux %{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}
+
+*link_os_gnu:
+-m elf32ppclinux %{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}
+
+*link_os_netbsd:
+%{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}}
+
+*link_os_vxworks:
+-r
+
+*link_os_windiss:
+
+
+*link_os_linux_uclibc:
+-m elf32ppclinux %{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}
+
+*link_os_default:
+%(link_os_linux_uclibc)
+
+*cc1_endian_big:
+
+
+*cc1_endian_little:
+%{!mstrict-align: %{!mno-strict-align:     %{!mcall-i960-old: 	-mstrict-align     } }}
+
+*cc1_endian_default:
+%(cc1_endian_big)
+
+*cpp_os_ads:
+
+
+*cpp_os_yellowknife:
+
+
+*cpp_os_mvme:
+
+
+*cpp_os_sim:
+
+
+*cpp_os_freebsd:
+  -D__ELF__ -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__   -Acpu=powerpc -Amachine=powerpc
+
+*cpp_os_gnu:
+-D__unix__ -D__gnu_hurd__ -D__GNU__	%{!undef:					                  %{!ansi: -Dunix -D__unix}}			                -Asystem=gnu -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}
+
+*cpp_os_linux:
+-D__unix__ -D__gnu_linux__ -D__linux__ %{!undef:							    %{!ansi:							      %{!std=*:-Dunix -D__unix -Dlinux -D__linux}			      %{std=gnu*:-Dunix -D__unix -Dlinux -D__linux}}}		  -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}
+
+*cpp_os_netbsd:
+-D__powerpc__ -D__NetBSD__ -D__ELF__ -D__KPRINTF_ATTRIBUTE__
+
+*cpp_os_rtems:
+%{!mcpu*:  %{!Dppc*: %{!Dmpc*: -Dmpc750} } }%{mcpu=403:  %{!Dppc*: %{!Dmpc*: -Dppc403}  } } %{mcpu=505:  %{!Dppc*: %{!Dmpc*: -Dmpc505}  } } %{mcpu=601:  %{!Dppc*: %{!Dmpc*: -Dppc601}  } } %{mcpu=602:  %{!Dppc*: %{!Dmpc*: -Dppc602}  } } %{mcpu=603:  %{!Dppc*: %{!Dmpc*: -Dppc603}  } } %{mcpu=603e: %{!Dppc*: %{!Dmpc*: -Dppc603e} } } %{mcpu=604:  %{!Dppc*: %{!Dmpc*: -Dmpc604}  } } %{mcpu=750:  %{!Dppc*: %{!Dmpc*: -Dmpc750}  } } %{mcpu=821:  %{!Dppc*: %{!Dmpc*: -Dmpc821}  } } %{mcpu=860:  %{!Dppc*: %{!Dmpc*: -Dmpc860}  } }
+
+*cpp_os_vxworks:
+-DCPU_FAMILY=PPC %{!mcpu*:   %{mpowerpc*: -DCPU=PPC603}   %{!mno-powerpc: -DCPU=PPC603}} %{mcpu=powerpc: -DCPU=PPC603} %{mcpu=401: -DCPU=PPC403} %{mcpu=403: -DCPU=PPC403} %{mcpu=405: -DCPU=PPC405} %{mcpu=601: -DCPU=PPC601} %{mcpu=602: -DCPU=PPC603} %{mcpu=603: -DCPU=PPC603} %{mcpu=603e: -DCPU=PPC603} %{mcpu=ec603e: -DCPU=PPC603} %{mcpu=604: -DCPU=PPC604} %{mcpu=604e: -DCPU=PPC604} %{mcpu=620: -DCPU=PPC604} %{mcpu=740: -DCPU=PPC603} %{mcpu=7450: -DCPU=PPC603} %{mcpu=750: -DCPU=PPC603} %{mcpu=801: -DCPU=PPC603} %{mcpu=821: -DCPU=PPC603} %{mcpu=823: -DCPU=PPC603} %{mcpu=860: -DCPU=PPC603}
+
+*cpp_os_windiss:
+-D__rtasim -D__EABI__ -D__ppc %{!msoft-float: -D__hardfp} 
+
+*cpp_os_default:
+%(cpp_os_linux)
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.5/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.3.5/100-uclibc-conf.patch
new file mode 100644
index 0000000000..4bbe21b7aa
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/100-uclibc-conf.patch
@@ -0,0 +1,1635 @@
+diff -urN gcc-3.3.3-dist/boehm-gc/config.sub gcc-3.3.3/boehm-gc/config.sub
+--- gcc-3.3.3-dist/boehm-gc/config.sub	2002-02-11 22:37:53.000000000 -0600
++++ gcc-3.3.3/boehm-gc/config.sub	2004-08-12 04:47:51.000000000 -0500
+@@ -118,7 +118,7 @@
+ # 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* | storm-chaos* | os2-emx* | windows32-*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | storm-chaos* | os2-emx* | windows32-*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1089,7 +1089,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3-dist/boehm-gc/configure gcc-3.3.3/boehm-gc/configure
+--- gcc-3.3.3-dist/boehm-gc/configure	2004-02-14 14:34:20.000000000 -0600
++++ gcc-3.3.3/boehm-gc/configure	2004-08-12 04:47:51.000000000 -0500
+@@ -1940,6 +1940,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.3.3-dist/config.sub gcc-3.3.3/config.sub
+--- gcc-3.3.3-dist/config.sub	2003-01-30 17:25:36.000000000 -0600
++++ gcc-3.3.3/config.sub	2004-08-12 04:47:51.000000000 -0500
+@@ -118,7 +118,7 @@
+ # 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1112,7 +1112,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3-dist/gcc/config/arm/linux-elf.h gcc-3.3.3/gcc/config/arm/linux-elf.h
+--- gcc-3.3.3-dist/gcc/config/arm/linux-elf.h	2003-09-16 10:39:23.000000000 -0500
++++ gcc-3.3.3/gcc/config/arm/linux-elf.h	2004-08-12 04:47:51.000000000 -0500
+@@ -78,6 +78,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -88,6 +100,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS()		\
+     do {					\
+diff -urN gcc-3.3.3-dist/gcc/config/cris/linux.h gcc-3.3.3/gcc/config/cris/linux.h
+--- gcc-3.3.3-dist/gcc/config/cris/linux.h	2003-03-10 21:01:35.000000000 -0600
++++ gcc-3.3.3/gcc/config/cris/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -81,6 +81,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -95,6 +114,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.3.3-dist/gcc/config/cris/t-linux-uclibc gcc-3.3.3/gcc/config/cris/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/cris/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.3.3-dist/gcc/config/i386/linux.h gcc-3.3.3/gcc/config/i386/linux.h
+--- gcc-3.3.3-dist/gcc/config/i386/linux.h	2003-11-14 00:46:12.000000000 -0600
++++ gcc-3.3.3/gcc/config/i386/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -136,6 +136,15 @@
+ 	%{static:-static}}}"
+ #endif
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -144,6 +153,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.3.3-dist/gcc/config/mips/linux.h gcc-3.3.3/gcc/config/mips/linux.h
+--- gcc-3.3.3-dist/gcc/config/mips/linux.h	2003-12-23 02:58:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/mips/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -175,6 +175,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -184,6 +195,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.3.3-dist/gcc/config/sh/linux.h gcc-3.3.3/gcc/config/sh/linux.h
+--- gcc-3.3.3-dist/gcc/config/sh/linux.h	2003-11-06 17:13:33.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/linux.h	2004-08-12 04:47:51.000000000 -0500
+@@ -44,12 +44,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ /* The GNU C++ standard library requires that these macros be defined.  */
+ #undef CPLUSPLUS_CPP_SPEC
+diff -urN gcc-3.3.3-dist/gcc/config/sh/t-linux-uclibc gcc-3.3.3/gcc/config/sh/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,16 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++TARGET_LIBGCC2_CFLAGS = -fpic
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
+diff -urN gcc-3.3.3-dist/gcc/config/sh/t-sh64-uclibc gcc-3.3.3/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.3.3-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/sh/t-sh64-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.3.3-dist/gcc/config/t-linux-uclibc gcc-3.3.3/gcc/config/t-linux-uclibc
+--- gcc-3.3.3-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3/gcc/config/t-linux-uclibc	2004-08-12 04:47:51.000000000 -0500
+@@ -0,0 +1,23 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde-glibc
++#LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
++#  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++#LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.3.3-dist/gcc/config.gcc gcc-3.3.3/gcc/config.gcc
+--- gcc-3.3.3-dist/gcc/config.gcc	2004-01-21 00:06:00.000000000 -0600
++++ gcc-3.3.3/gcc/config.gcc	2004-08-12 04:47:51.000000000 -0500
+@@ -697,6 +697,17 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	case x${enable_threads} in
++	x | xyes | xpthreads | xposix)
++		thread_file='posix'
++		;;
++	esac
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -772,6 +783,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -1173,6 +1188,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1883,6 +1903,16 @@
+ 	tm_file="elfos.h ${tm_file} mips/netbsd.h"
+ 	tmake_file="${tmake_file} mips/t-netbsd"
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case $machine in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc mips/t-linux"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case $machine in
+@@ -2129,6 +2159,11 @@
+ 	out_file=rs6000/rs6000.c
+ 	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	out_file=rs6000/rs6000.c
++	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	out_file=rs6000/rs6000.c
+@@ -2313,10 +2348,18 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case $machine in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	gas=yes gnu_ld=yes
+ 	case $machine in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.3.3-dist/libstdc++-v3/aclocal.m4 gcc-3.3.3/libstdc++-v3/aclocal.m4
+--- gcc-3.3.3-dist/libstdc++-v3/aclocal.m4	2004-01-12 10:18:44.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/aclocal.m4	2004-08-12 04:47:51.000000000 -0500
+@@ -1216,6 +1216,9 @@
+   dnl Default to "generic"
+   if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	AC_EGREP_CPP([_GLIBCPP_ok], [
+         #include <features.h>
+@@ -1339,6 +1342,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcpp_MOFILES)
++      AC_SUBST(glibcpp_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure gcc-3.3.3/libstdc++-v3/configure
+--- gcc-3.3.3-dist/libstdc++-v3/configure	2004-01-12 10:18:45.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/configure	2004-08-12 04:49:13.000000000 -0500
+@@ -2010,6 +2010,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -2996,6 +3001,9 @@
+ 
+       if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	cat > conftest.$ac_ext <<EOF
+ #line 3002 "configure"
+@@ -3182,6 +3190,70 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      echo "$ac_t""uclibc" 1>&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
++echo "configure:3117: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_check_msgfmt'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      ac_cv_prog_check_msgfmt="yes"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt="$ac_cv_prog_check_msgfmt"
++if test -n "$check_msgfmt"; then
++  echo "$ac_t""$check_msgfmt" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      
++      
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+@@ -4212,6 +4284,968 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4224: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4229 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++fi
++done
++
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      
++      
++  # If we're not using GNU ld, then there's no point in even trying these
++  # tests.  Check for that first.  We should have already tested for gld
++  # by now (in libtool), but require it now just to be safe...
++  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
++  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
++  
++
++  # The name set by libtool depends on the version of libtool.  Shame on us
++  # for depending on an impl detail, but c'est la vie.  Older versions used
++  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
++  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
++  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
++  # set (hence we're using an older libtool), then set it.
++  if test x${with_gnu_ld+set} != xset; then
++    if test x${ac_cv_prog_gnu_ld+set} != xset; then
++      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
++      with_gnu_ld=no
++    else
++      with_gnu_ld=$ac_cv_prog_gnu_ld
++    fi
++  fi
++
++  # Start by getting the version number.  I think the libtool test already
++  # does some of this, but throws away the result.
++  
++  ldver=`$LD --version 2>/dev/null | head -1 | \
++         sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
++  
++  glibcpp_gnu_ld_version=`echo $ldver | \
++         $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
++
++  # Set --gc-sections.
++  if test "$with_gnu_ld" = "notbroken"; then
++    # GNU ld it is!  Joy and bunny rabbits!
++
++    # All these tests are for C++; save the language and the compiler flags.
++    # Need to do this so that g++ won't try to link in libstdc++
++    ac_test_CFLAGS="${CFLAGS+set}"
++    ac_save_CFLAGS="$CFLAGS"
++    CFLAGS='-x c++  -Wl,--gc-sections'
++
++    # Check for -Wl,--gc-sections
++    # XXX This test is broken at the moment, as symbols required for
++    # linking are now in libsupc++ (not built yet.....). In addition, 
++    # this test has cored on solaris in the past. In addition,
++    # --gc-sections doesn't really work at the moment (keeps on discarding
++    # used sections, first .eh_frame and now some of the glibc sections for
++    # iconv). Bzzzzt. Thanks for playing, maybe next time.
++    echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
++echo "configure:4312: checking for ld that supports -Wl,--gc-sections" >&5
++    if test "$cross_compiling" = yes; then
++  ac_sectionLDflags=yes
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4317 "configure"
++#include "confdefs.h"
++
++     int main(void) 
++     {
++       try { throw 1; }
++       catch (...) { };
++       return 0;
++     }
++    
++EOF
++if { (eval echo configure:4328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++  ac_sectionLDflags=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -fr conftest*
++  ac_sectionLDflags=no
++fi
++rm -fr conftest*
++fi
++
++    if test "$ac_test_CFLAGS" = set; then
++      CFLAGS="$ac_save_CFLAGS"
++    else
++      # this is the suspicious part
++      CFLAGS=''
++    fi
++    if test "$ac_sectionLDflags" = "yes"; then
++      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
++    fi
++    echo "$ac_t""$ac_sectionLDflags" 1>&6
++  fi
++
++  # Set linker optimization flags.
++  if test x"$with_gnu_ld" = x"yes"; then
++    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
++  fi
++
++  
++  
++
++      
++    echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
++echo "configure:4362: checking for main in -lm" >&5
++ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lm  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 4370 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lm $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++  for ac_func in nan copysignf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4407: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4412 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"
++fi
++done
++
++
++    for ac_func in __signbit
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4464: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4469 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbit.lo"
++fi
++done
++
++  for ac_func in __signbitf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4520: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4525 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"
++fi
++done
++
++
++          if test x$ac_cv_func_copysignl = x"yes"; then
++    for ac_func in __signbitl
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4578: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4583 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"
++fi
++done
++
++  fi
++
++  if test -n "$LIBMATHOBJS"; then
++    need_libmath=yes
++  fi
++  
++  
++
++if test "$need_libmath" = yes; then
++  GLIBCPP_BUILD_LIBMATH_TRUE=
++  GLIBCPP_BUILD_LIBMATH_FALSE='#'
++else
++  GLIBCPP_BUILD_LIBMATH_TRUE='#'
++  GLIBCPP_BUILD_LIBMATH_FALSE=
++fi
++
++      
++    enable_wchar_t=no
++
++      echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
++echo "configure:4651: checking for mbstate_t" >&5
++  cat > conftest.$ac_ext <<EOF
++#line 4653 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++mbstate_t teststate;
++; return 0; }
++EOF
++if { (eval echo configure:4660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  have_mbstate_t=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  have_mbstate_t=no
++fi
++rm -f conftest*
++  echo "$ac_t""$have_mbstate_t" 1>&6
++  if test x"$have_mbstate_t" = xyes; then
++    cat >> confdefs.h <<\EOF
++#define HAVE_MBSTATE_T 1
++EOF
++
++  fi
++
++    for ac_hdr in wchar.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4682: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4687 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wchar_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wchar_h=no
++fi
++done
++
++  for ac_hdr in wctype.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4723: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4728 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wctype_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wctype_h=no
++fi
++done
++
++  
++    if test x"$ac_has_wchar_h" = xyes &&
++     test x"$ac_has_wctype_h" = xyes &&
++     test x"$enable_c_mbchar" != xno; then
++      
++            echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
++echo "configure:4766: checking for WCHAR_MIN and WCHAR_MAX" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4768 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++int i = WCHAR_MIN; int j = WCHAR_MAX;
++; return 0; }
++EOF
++if { (eval echo configure:4775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_wchar_minmax=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_wchar_minmax=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_wchar_minmax" 1>&6
++    
++            echo $ac_n "checking for WEOF""... $ac_c" 1>&6
++echo "configure:4788: checking for WEOF" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4790 "configure"
++#include "confdefs.h"
++
++      #include <wchar.h>
++      #include <stddef.h>
++int main() {
++wint_t i = WEOF;
++; return 0; }
++EOF
++if { (eval echo configure:4799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_weof=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_weof=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_weof" 1>&6
++  
++        ac_wfuncs=yes
++    for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4815: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4820 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++  
++        for ac_func in btowc wctob fgetwc fgetws fputwc fputws fwide \
++    fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
++    vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
++    mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
++    wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
++    wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4878: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4883 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++
++    echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
++echo "configure:4934: checking for ISO C99 wchar_t support" >&5
++    if test x"$has_weof" = xyes &&
++       test x"$has_wchar_minmax" = xyes &&
++       test x"$ac_wfuncs" = xyes; then
++      ac_isoC99_wchar_t=yes
++    else
++      ac_isoC99_wchar_t=no
++    fi
++    echo "$ac_t""$ac_isoC99_wchar_t" 1>&6
++  
++            ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
++echo "configure:4946: checking for iconv.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4951 "configure"
++#include "confdefs.h"
++#include <iconv.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_iconv_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_iconv_h=no
++fi
++
++    ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
++echo "configure:4980: checking for langinfo.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4985 "configure"
++#include "confdefs.h"
++#include <langinfo.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4990: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_langinfo_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_langinfo_h=no
++fi
++
++
++        echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
++echo "configure:5014: checking for iconv in -liconv" >&5
++ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-liconv  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 5022 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char iconv();
++
++int main() {
++iconv()
++; return 0; }
++EOF
++if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  libiconv="-liconv"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    ac_save_LIBS="$LIBS"
++    LIBS="$LIBS $libiconv"
++
++    for ac_func in iconv_open iconv_close iconv nl_langinfo
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:5059: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 5064 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ \
++    ac_XPG2funcs=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_XPG2funcs=no
++fi
++done
++
++  
++    LIBS="$ac_save_LIBS"
++
++    echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
++echo "configure:5117: checking for XPG2 wchar_t support" >&5
++    if test x"$ac_has_iconv_h" = xyes &&
++       test x"$ac_has_langinfo_h" = xyes &&
++       test x"$ac_XPG2funcs" = xyes; then
++      ac_XPG2_wchar_t=yes
++    else
++      ac_XPG2_wchar_t=no
++    fi
++    echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
++  
++            if test x"$ac_isoC99_wchar_t" = xyes &&
++       test x"$ac_XPG2_wchar_t" = xyes; then
++       cat >> confdefs.h <<\EOF
++#define _GLIBCPP_USE_WCHAR_T 1
++EOF
++
++       enable_wchar_t=yes 
++    fi
++  fi
++  echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
++echo "configure:5137: checking for enabled wchar_t specializations" >&5
++  echo "$ac_t""$enable_wchar_t" 1>&6	
++  
++
++if test "$enable_wchar_t" = yes; then
++  GLIBCPP_TEST_WCHAR_T_TRUE=
++  GLIBCPP_TEST_WCHAR_T_FALSE='#'
++else
++  GLIBCPP_TEST_WCHAR_T_TRUE='#'
++  GLIBCPP_TEST_WCHAR_T_FALSE=
++fi	
++
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_COPYSIGN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITE 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITEF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINFF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNAN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNANF 1
++EOF
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure.in gcc-3.3.3/libstdc++-v3/configure.in
+--- gcc-3.3.3-dist/libstdc++-v3/configure.in	2004-01-12 10:19:22.000000000 -0600
++++ gcc-3.3.3/libstdc++-v3/configure.in	2004-08-12 04:47:51.000000000 -0500
+@@ -117,6 +117,36 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h])
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      AC_SUBST(SECTION_FLAGS)
++      GLIBCPP_CHECK_LINKER_FEATURES
++      GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
++      GLIBCPP_CHECK_WCHAR_T_SUPPORT
++
++      AC_DEFINE(HAVE_COPYSIGN)
++      #AC_DEFINE(HAVE_COPYSIGNF)
++      AC_DEFINE(HAVE_FINITE)
++      AC_DEFINE(HAVE_FINITEF)
++      #AC_DEFINE(HAVE_FREXPF)
++      #AC_DEFINE(HAVE_HYPOTF)
++      AC_DEFINE(HAVE_ISINF)
++      AC_DEFINE(HAVE_ISINFF)
++      AC_DEFINE(HAVE_ISNAN)
++      AC_DEFINE(HAVE_ISNANF)
++      #AC_DEFINE(HAVE_SINCOS)
++      #AC_DEFINE(HAVE_SINCOSF)
++      #if test x"long_double_math_on_this_cpu" = x"yes"; then
++        #AC_DEFINE(HAVE_FINITEL)
++        #AC_DEFINE(HAVE_HYPOTL)
++        #AC_DEFINE(HAVE_ISINFL)
++        #AC_DEFINE(HAVE_ISNANL)
++      #fi
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3-dist/libstdc++-v3/configure.target gcc-3.3.3/libstdc++-v3/configure.target
+--- gcc-3.3.3-dist/libstdc++-v3/configure.target	2003-10-01 14:07:07.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/configure.target	2004-08-12 04:47:51.000000000 -0500
+@@ -133,6 +133,9 @@
+   freebsd*)
+     os_include_dir="os/bsd/freebsd"
+     ;;
++  linux-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
+   gnu* | linux*)
+     os_include_dir="os/gnu-linux"
+     ;;
+diff -urN gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cstdlib.h gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h
+--- gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cstdlib.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h	2004-08-12 04:47:51.000000000 -0500
+@@ -101,9 +101,11 @@
+   using ::labs;
+   using ::ldiv;
+   using ::malloc;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::mblen;
+   using ::mbstowcs;
+   using ::mbtowc;
++#endif
+   using ::qsort;
+   using ::rand;
+   using ::realloc;
+@@ -112,8 +114,10 @@
+   using ::strtol;
+   using ::strtoul;
+   using ::system;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::wcstombs;
+   using ::wctomb;
++#endif
+ 
+   inline long 
+   abs(long __i) { return labs(__i); }
+diff -urN gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.3.3-dist/libstdc++-v3/include/c_std/std_cwchar.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h	2004-08-12 04:47:51.000000000 -0500
+@@ -165,7 +165,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#ifdef HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
+diff -urN gcc-3.3.3-dist/libtool.m4 gcc-3.3.3/libtool.m4
+--- gcc-3.3.3-dist/libtool.m4	2003-09-09 03:04:17.000000000 -0500
++++ gcc-3.3.3/libtool.m4	2004-08-12 04:47:51.000000000 -0500
+@@ -687,6 +687,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.3.3-dist/ltconfig gcc-3.3.3/ltconfig
+--- gcc-3.3.3-dist/ltconfig	2003-02-19 20:10:02.000000000 -0600
++++ gcc-3.3.3/ltconfig	2004-08-12 04:47:51.000000000 -0500
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1247,6 +1248,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.3.5/110-uclibc-conf.patch b/openwrt/toolchain/gcc/3.3.5/110-uclibc-conf.patch
new file mode 100644
index 0000000000..f297c3283f
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/110-uclibc-conf.patch
@@ -0,0 +1,55 @@
+Use the patch by Carl Miller <chaz@energoncube.net> for powerpc, with
+some minor modifications.  Changed *os_uclibc to *os_linux_uclibc since
+at some point we might support other platforms.  Also updated to 3.3.3.
+diff -urN gcc-3.3.3/gcc/config/rs6000/linux.h gcc-3.3.3-new/gcc/config/rs6000/linux.h
+--- gcc-3.3.3/gcc/config/rs6000/linux.h	2003-11-14 00:46:10.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/linux.h	2004-02-16 21:13:40.000000000 -0600
+@@ -64,7 +64,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)");
+diff -urN gcc-3.3.3/gcc/config/rs6000/sysv4.h gcc-3.3.3-new/gcc/config/rs6000/sysv4.h
+--- gcc-3.3.3/gcc/config/rs6000/sysv4.h	2003-10-28 13:55:41.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/sysv4.h	2004-02-16 21:13:40.000000000 -0600
+@@ -968,9 +968,11 @@
+ %{mcall-linux: %(link_os_linux) } \
+ %{mcall-gnu: %(link_os_gnu) } \
+ %{mcall-netbsd: %(link_os_netbsd) } \
++%{mcall-uclibc: %(link_os_linux_uclibc) } \
+ %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \
+          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \
+-         %{!mcall-netbsd: %(link_os_default) }}}}}}}}}"
++         %{!mcall-netbsd: %{!mcall-uclibc: \
++         %(link_os_default) }}}}}}}}}}"
+ 
+ #define LINK_OS_DEFAULT_SPEC ""
+ 
+@@ -1307,6 +1309,12 @@
+ 
+ #define LINK_OS_WINDISS_SPEC ""
+ 
++/* uClibc support for Linux. */
++
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ /* Define any extra SPECS that the compiler needs to generate.  */
+ /* Override rs6000.h definition.  */
+ #undef	SUBTARGET_EXTRA_SPECS
+@@ -1372,6 +1380,7 @@
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_vxworks",		LINK_OS_VXWORKS_SPEC },			\
+   { "link_os_windiss",		LINK_OS_WINDISS_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_default",		LINK_OS_DEFAULT_SPEC },			\
+   { "cc1_endian_big",		CC1_ENDIAN_BIG_SPEC },			\
+   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
diff --git a/openwrt/toolchain/gcc/3.3.5/120-softfloat.patch b/openwrt/toolchain/gcc/3.3.5/120-softfloat.patch
new file mode 100644
index 0000000000..f2431896cf
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/120-softfloat.patch
@@ -0,0 +1,14 @@
+--- gcc-3.3.2-old/configure.in	2003-08-09 01:57:21.000000000 -0500
++++ gcc-3.3.2/configure.in	2004-01-15 12:46:29.000000000 -0600
+@@ -1418,6 +1418,11 @@
+ fi
+ 
+ FLAGS_FOR_TARGET=
++case " $targargs " in
++ *" --nfp "* | *" --without-float "*)
++    FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -msoft-float'
++    ;;
++esac
+ case " $target_configdirs " in
+  *" newlib "*)
+   case " $targargs " in
diff --git a/openwrt/toolchain/gcc/3.3.5/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.3.5/200-uclibc-locale.patch
new file mode 100644
index 0000000000..5880d834b4
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/200-uclibc-locale.patch
@@ -0,0 +1,3021 @@
+Warning!  This patch is not finished.  The wide char time-related stuff
+is broken or non-functional.  But it serves as a starting point to get
+things building while I continue to work on the uClibc locale internals.
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-01-09 07:55:02.000000000 -0600
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strtol_l) __strtol_l;
++extern "C" __typeof(strtoll_l) __strtoll_l;
++extern "C" __typeof(strtoul_l) __strtoul_l;
++extern "C" __typeof(strtoull_l) __strtoull_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-01-09 08:37:55.000000000 -0600
+@@ -0,0 +1,231 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++      {
++	char* __sanity;
++	errno = 0;
++	long __l = __strtol_l(__s, &__sanity, __base, __cloc);
++	if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	  __v = __l;
++	else
++	  __err |= ios_base::failbit;
++      }
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ul;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++#ifdef _GLIBCPP_USE_LONG_LONG
++  template<>
++    void
++    __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ll;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{      
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long long __ull = __strtoull_l(__s, &__sanity, __base, 
++						  __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ull;
++	  else
++	    __err |= ios_base::failbit;
++	}  
++    }
++#endif
++
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error("attempt to create locale from unknown name");
++      }
++#else
++    __cloc = NULL;
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (_S_c_locale != __cloc)
++      __freelocale(__cloc); 
++#else
++    __cloc = NULL;
++#endif
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++#ifdef __UCLIBC_HAS_XLOCALE__
++  { return __duplocale(__cloc); }
++#else
++  { return __c_locale(); }
++#endif
++
++  const char* locale::_S_categories[_S_categories_size 
++				    + _S_extra_categories_size] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES"
++#if _GLIBCPP_NUM_CATEGORIES != 0
++      , 
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}  // namespace std
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-01-09 07:51:06.000000000 -0600
+@@ -0,0 +1,118 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _CPP_BITS_C_LOCALE_H
++#define _CPP_BITS_C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCPP_C_LOCALE_GNU for
++#endif
++#define _GLIBCPP_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCPP_NUM_CATEGORIES 6
++#define _GLIBCPP_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec = -1)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec = -1)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = setlocale(LC_ALL, NULL);
++      char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
++      if (__sav)
++        strcpy(__sav, __old);
++      setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      int __ret;
++      if (__prec >= 0)
++        __ret = snprintf(__out, __size, __fmt, __prec, __v);
++      else
++        __ret = snprintf(__out, __size, __fmt, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      setlocale(LC_ALL, __sav);
++      free(__sav);
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-01-09 04:04:34.000000000 -0600
+@@ -0,0 +1,113 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCPP_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = wcsrtombs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = mbsrtowcs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	2004-01-09 01:53:51.000000000 -0600
+@@ -0,0 +1,461 @@
++// Locale support (codecvt) -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 Template class codecvt
++//
++
++// Warning: this file is not meant for user inclusion.  Use <locale>.
++
++// Written by Benjamin Kosnik <bkoz@cygnus.com>
++
++  // XXX
++  // Define this here to codecvt.cc can have _S_max_size definition.
++#define _GLIBCPP_USE___ENC_TRAITS 1
++
++  // Extension to use icov for dealing with character encodings,
++  // including conversions and comparisons between various character
++  // sets.  This object encapsulates data that may need to be shared between
++  // char_traits, codecvt and ctype.
++  class __enc_traits
++  {
++  public:
++    // Types: 
++    // NB: A conversion descriptor subsumes and enhances the
++    // functionality of a simple state type such as mbstate_t.
++    typedef iconv_t	__desc_type;
++    
++  protected:
++    // Data Members:
++    // Max size of charset encoding name
++    static const int 	_S_max_size = 32;
++    // Name of internal character set encoding.
++    char	       	_M_int_enc[_S_max_size];
++    // Name of external character set encoding.
++    char  	       	_M_ext_enc[_S_max_size];
++
++    // Conversion descriptor between external encoding to internal encoding.
++    __desc_type		_M_in_desc;
++    // Conversion descriptor between internal encoding to external encoding.
++    __desc_type		_M_out_desc;
++
++    // Details the byte-order marker for the external encoding, if necessary.
++    int			_M_ext_bom;
++
++    // Details the byte-order marker for the internal encoding, if necessary.
++    int			_M_int_bom;
++
++  public:
++    explicit __enc_traits() 
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) 
++    {
++      memset(_M_int_enc, 0, _S_max_size);
++      memset(_M_ext_enc, 0, _S_max_size);
++    }
++
++    explicit __enc_traits(const char* __int, const char* __ext, 
++			  int __ibom = 0, int __ebom = 0)
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
++    {
++      strncpy(_M_int_enc, __int, _S_max_size);
++      strncpy(_M_ext_enc, __ext, _S_max_size);
++    }
++
++    // 21.1.2 traits typedefs
++    // p4
++    // typedef STATE_T state_type
++    // requires: state_type shall meet the requirements of
++    // CopyConstructible types (20.1.3)
++    __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++    }
++
++    // Need assignment operator as well.
++    __enc_traits&
++    operator=(const __enc_traits& __obj)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_in_desc = 0;
++      _M_out_desc = 0;
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++      return *this;
++    }
++
++    ~__enc_traits()
++    {
++      __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (_M_in_desc && _M_in_desc != __err) 
++	iconv_close(_M_in_desc);
++      if (_M_out_desc && _M_out_desc != __err) 
++	iconv_close(_M_out_desc);
++    } 
++
++    void
++    _M_init()
++    {
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (!_M_in_desc)
++	{
++	  _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
++	  if (_M_in_desc == __err)
++	    __throw_runtime_error("creating iconv input descriptor failed.");
++	}
++      if (!_M_out_desc)
++	{
++	  _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
++	  if (_M_out_desc == __err)
++	    __throw_runtime_error("creating iconv output descriptor failed.");
++	}
++    }
++
++    bool
++    _M_good()
++    { 
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      bool __test = _M_in_desc && _M_in_desc != __err; 
++      __test &=  _M_out_desc && _M_out_desc != __err;
++      return __test;
++    }
++
++    const __desc_type* 
++    _M_get_in_descriptor()
++    { return &_M_in_desc; }
++
++    const __desc_type* 
++    _M_get_out_descriptor()
++    { return &_M_out_desc; }
++
++    int 
++    _M_get_external_bom()
++    { return _M_ext_bom; }
++
++    int 
++    _M_get_internal_bom()
++    { return _M_int_bom; }
++
++    const char* 
++    _M_get_internal_enc()
++    { return _M_int_enc; }
++
++    const char* 
++    _M_get_external_enc()
++    { return _M_ext_enc; }
++  };
++
++  // Partial specialization
++  // This specialization takes advantage of iconv to provide code
++  // conversions between a large number of character encodings.
++  template<typename _InternT, typename _ExternT>
++    class codecvt<_InternT, _ExternT, __enc_traits>
++    : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
++    {
++    public:      
++      // Types:
++      typedef codecvt_base::result			result;
++      typedef _InternT 					intern_type;
++      typedef _ExternT 					extern_type;
++      typedef __enc_traits 				state_type;
++      typedef __enc_traits::__desc_type 		__desc_type;
++      typedef __enc_traits				__enc_type;
++
++      // Data Members:
++      static locale::id 		id;
++
++      explicit 
++      codecvt(size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++      explicit 
++      codecvt(__enc_type* __enc, size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++    protected:
++      virtual 
++      ~codecvt() { }
++
++      virtual result
++      do_out(state_type& __state, const intern_type* __from, 
++	     const intern_type* __from_end, const intern_type*& __from_next,
++	     extern_type* __to, extern_type* __to_end,
++	     extern_type*& __to_next) const;
++
++      virtual result
++      do_unshift(state_type& __state, extern_type* __to, 
++		 extern_type* __to_end, extern_type*& __to_next) const;
++
++      virtual result
++      do_in(state_type& __state, const extern_type* __from, 
++	    const extern_type* __from_end, const extern_type*& __from_next,
++	    intern_type* __to, intern_type* __to_end, 
++	    intern_type*& __to_next) const;
++
++      virtual int 
++      do_encoding() const throw();
++
++      virtual bool 
++      do_always_noconv() const throw();
++
++      virtual int 
++      do_length(const state_type&, const extern_type* __from, 
++		const extern_type* __end, size_t __max) const;
++
++      virtual int 
++      do_max_length() const throw();
++    };
++
++  template<typename _InternT, typename _ExternT>
++    locale::id 
++    codecvt<_InternT, _ExternT, __enc_traits>::id;
++
++  // This adaptor works around the signature problems of the second
++  // argument to iconv():  SUSv2 and others use 'const char**', but glibc 2.2
++  // uses 'char**', which matches the POSIX 1003.1-2001 standard.
++  // Using this adaptor, g++ will do the work for us.
++  template<typename _T>
++    inline size_t
++    __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
++                    iconv_t __cd, char** __inbuf, size_t* __inbytes,
++                    char** __outbuf, size_t* __outbytes)
++    { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_out(state_type& __state, const intern_type* __from, 
++	   const intern_type* __from_end, const intern_type*& __from_next,
++	   extern_type* __to, extern_type* __to_end,
++	   extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_out_descriptor();
++	  const size_t __fmultiple = sizeof(intern_type);
++	  size_t __fbytes = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(extern_type);
++	  size_t __tbytes = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __int_bom = __state._M_get_internal_bom();
++	  if (__int_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<intern_type>(__int_bom);
++	      char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                        &__fbytes, &__cto, &__tbytes); 
++	    }
++	  else
++	    {
++	      intern_type* __cfixed = const_cast<intern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes, 
++				       &__cto, &__tbytes); 
++	    }
++
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__fbytes < __fmultiple * (__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<extern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_unshift(state_type& __state, extern_type* __to, 
++	       extern_type* __to_end, extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
++                                          &__cto, &__tlen); 
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      if (__tlen == __tmultiple * (__to_end - __to))
++		__ret = codecvt_base::noconv;
++	      else if (__tlen == 0)
++		__ret = codecvt_base::ok;
++	      else
++		__ret = codecvt_base::partial;
++	    }
++	  else 
++	    __ret = codecvt_base::error;
++	}
++      return __ret; 
++    }
++   
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_in(state_type& __state, const extern_type* __from, 
++	  const extern_type* __from_end, const extern_type*& __from_next,
++	  intern_type* __to, intern_type* __to_end, 
++	  intern_type*& __to_next) const
++    { 
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __fmultiple = sizeof(extern_type);
++	  size_t __flen = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __ext_bom = __state._M_get_external_bom();
++	  if (__ext_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      extern_type* __cfixed =  static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<extern_type>(__ext_bom);
++	      char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++	  else
++	    {
++	      extern_type* __cfixed = const_cast<extern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<intern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__flen < static_cast<size_t>(__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<intern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_encoding() const throw()
++    {
++      int __ret = 0;
++      if (sizeof(_ExternT) <= sizeof(_InternT))
++	__ret = sizeof(_InternT)/sizeof(_ExternT);
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    bool 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_always_noconv() const throw()
++    { return false; }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_length(const state_type&, const extern_type* __from, 
++	      const extern_type* __end, size_t __max) const
++    { return min(__max, static_cast<size_t>(__end - __from)); }
++
++#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
++// 74.  Garbled text for codecvt::do_max_length
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_max_length() const throw()
++    { return 1; }
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-01-09 08:06:24.000000000 -0600
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-01-09 08:15:41.000000000 -0600
+@@ -0,0 +1,274 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 	
++      _S_destroy_c_locale(_M_c_locale_ctype);
++      _S_create_c_locale(_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++      _M_toupper = _M_c_locale_ctype->__ctype_toupper;
++      _M_tolower = _M_c_locale_ctype->__ctype_tolower;
++      _M_table = _M_c_locale_ctype->__ctype_b;
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  };
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      {
++	const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	if (__m & __bit)
++	  __ret |= __iswctype_l(__c, _M_convert_to_wmask(__bit), 
++				_M_c_locale_ctype); 
++      }
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (;__lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  { 
++	    const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	    if (__iswctype_l(*__lo, _M_convert_to_wmask(__bit), 
++			     _M_c_locale_ctype))
++	      __m |= __bit;
++	  }
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wchar_t __ret = btowc(__c);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    mbstate_t __state;
++    memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++    mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  { 
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    size_t __offset = 0;
++    while (true)
++      {
++	const wchar_t* __start = __lo + __offset;        
++	size_t __len = __hi - __start;
++	
++	mbstate_t __state;
++	memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++	size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
++	if (__con != __len && __start != 0)
++	  {
++	    __offset = __start - __lo;          
++	    __dest[__offset++] = __dfault;
++	  }
++	else
++	  break;
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++#endif //  _GLIBCPP_USE_WCHAR_T
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-01-09 08:46:16.000000000 -0600
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-01-09 08:52:48.000000000 -0600
+@@ -0,0 +1,122 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : locale::facet(__refs)
++     {  
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = _S_c_name;
++#endif
++       _M_c_locale_messages = _S_c_locale; 
++     }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, 
++				const char* __s, size_t __refs) 
++     : locale::facet(__refs)
++     {
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _M_c_locale_messages = _S_clone_c_locale(__cloc); 
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_messages)
++	delete [] _M_name_messages;
++#endif
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++       if (_S_c_name != _M_name_messages)
++	 delete [] _M_name_messages;
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _S_destroy_c_locale(_M_c_locale_messages);
++       _S_create_c_locale(_M_c_locale_messages, __s); 
++     }
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-01-09 18:20:23.000000000 -0600
+@@ -0,0 +1,578 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = space;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = space;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol. 
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == true
++	  _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == false
++	  _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++							 const char*)
++#else
++							 const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len;
++	  __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-01-09 18:20:59.000000000 -0600
+@@ -0,0 +1,129 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
++	  // Check for NUL, which implies no grouping.
++	  if (_M_thousands_sep == '\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = "true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = "false";
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { }
++   
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  if (_M_thousands_sep == L'\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = L"true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = L"false";
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { }
++ #endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-01-09 08:25:03.000000000 -0600
+@@ -0,0 +1,341 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = "%m/%d/%y";
++	  _M_date_era_format = "%m/%d/%y";
++	  _M_time_format = "%H:%M:%S";
++	  _M_time_era_format = "%H:%M:%S";
++	  _M_date_time_format = "";
++	  _M_date_time_era_format = "";
++	  _M_am = "AM";
++	  _M_pm = "PM";
++	  _M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = "Sunday";
++	  _M_day2 = "Monday";
++	  _M_day3 = "Tuesday";
++	  _M_day4 = "Wednesday";
++	  _M_day5 = "Thursday";
++	  _M_day6 = "Friday";
++	  _M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = "Sun";
++	  _M_day_a2 = "Mon";
++	  _M_day_a3 = "Tue";
++	  _M_day_a4 = "Wed";
++	  _M_day_a5 = "Thu";
++	  _M_day_a6 = "Fri";
++	  _M_day_a7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = "January";
++	  _M_month02 = "February";
++	  _M_month03 = "March";
++	  _M_month04 = "April";
++	  _M_month05 = "May";
++	  _M_month06 = "June";
++	  _M_month07 = "July";
++	  _M_month08 = "August";
++	  _M_month09 = "September";
++	  _M_month10 = "October";
++	  _M_month11 = "November";
++	  _M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = "Jan";
++	  _M_month_a02 = "Feb";
++	  _M_month_a03 = "Mar";
++	  _M_month_a04 = "Apr";
++	  _M_month_a05 = "May";
++	  _M_month_a06 = "Jun";
++	  _M_month_a07 = "July";
++	  _M_month_a08 = "Aug";
++	  _M_month_a09 = "Sep";
++	  _M_month_a10 = "Oct";
++	  _M_month_a11 = "Nov";
++	  _M_month_a12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = L"%m/%d/%y";
++	  _M_date_era_format = L"%m/%d/%y";
++	  _M_time_format = L"%H:%M:%S";
++	  _M_time_era_format = L"%H:%M:%S";
++	  _M_date_time_format = L"";
++	  _M_date_time_era_format = L"";
++	  _M_am = L"AM";
++	  _M_pm = L"PM";
++	  _M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = L"Sunday";
++	  _M_day2 = L"Monday";
++	  _M_day3 = L"Tuesday";
++	  _M_day4 = L"Wednesday";
++	  _M_day5 = L"Thursday";
++	  _M_day6 = L"Friday";
++	  _M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = L"Sun";
++	  _M_day_a2 = L"Mon";
++	  _M_day_a3 = L"Tue";
++	  _M_day_a4 = L"Wed";
++	  _M_day_a5 = L"Thu";
++	  _M_day_a6 = L"Fri";
++	  _M_day_a7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = L"January";
++	  _M_month02 = L"February";
++	  _M_month03 = L"March";
++	  _M_month04 = L"April";
++	  _M_month05 = L"May";
++	  _M_month06 = L"June";
++	  _M_month07 = L"July";
++	  _M_month08 = L"August";
++	  _M_month09 = L"September";
++	  _M_month10 = L"October";
++	  _M_month11 = L"November";
++	  _M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = L"Jan";
++	  _M_month_a02 = L"Feb";
++	  _M_month_a03 = L"Mar";
++	  _M_month_a04 = L"Apr";
++	  _M_month_a05 = L"May";
++	  _M_month_a06 = L"Jun";
++	  _M_month_a07 = L"July";
++	  _M_month_a08 = L"Aug";
++	  _M_month_a09 = L"Sep";
++	  _M_month_a10 = L"Oct";
++	  _M_month_a11 = L"Nov";
++	  _M_month_a12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h	2004-01-09 04:26:21.000000000 -0600
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = _S_c_name;
++#endif
++      _M_initialize_timepunct(); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, 
++				     const char* __s,
++				     size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = new char[strlen(__s) + 1];
++      strcpy(_M_name_timepunct, __s);
++#endif
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_timepunct)
++	delete [] _M_name_timepunct;
++#endif
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-01-09 02:54:54.000000000 -0600
+@@ -0,0 +1,57 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISgraph;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalnum;
++  };
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h	2002-06-24 00:49:19.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-01-09 03:34:53.000000000 -0600
+@@ -0,0 +1,90 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { 
++    return __C_ctype_b;
++  }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale;
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) : 
++  __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale; 
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h	2004-01-09 04:56:13.000000000 -0600
+@@ -0,0 +1,56 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCPP_OS_DEFINES
++#define _GLIBCPP_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// These systems have declarations mismatching those in libio.h by
++// omitting throw qualifiers.  Cleanest way out is to not provide
++// throw-qualifiers at all.  Defining it as empty here will make libio.h
++// not define it.
++#undef __THROW
++#define __THROW
++
++// Tell Glibc not to try to provide its own inline versions of
++// some math functions.  Those cause assembly-time clashes with
++// our definitions.
++#define __NO_MATH_INLINES
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
diff --git a/openwrt/toolchain/gcc/3.3.5/500-loop.patch b/openwrt/toolchain/gcc/3.3.5/500-loop.patch
new file mode 100644
index 0000000000..476f84b377
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/500-loop.patch
@@ -0,0 +1,10 @@
+--- gcc/gcc/loop.c	14 Feb 2004 14:46:03 -0000	1.488.2.3
++++ gcc/gcc/loop.c	28 Apr 2004 22:02:53 -0000
+@@ -929,6 +929,7 @@
+ 			  || (! (GET_CODE (SET_SRC (set)) == REG
+ 				 && (REGNO (SET_SRC (set))
+ 				     < FIRST_PSEUDO_REGISTER))))
++		      && regno >= FIRST_PSEUDO_REGISTER 
+ 		      /* This test is not redundant; SET_SRC (set) might be
+ 			 a call-clobbered register and the life of REGNO
+ 			 might span a call.  */
diff --git a/openwrt/toolchain/gcc/3.3.5/specs-arm-soft-float b/openwrt/toolchain/gcc/3.3.5/specs-arm-soft-float
new file mode 100644
index 0000000000..d692174aab
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/specs-arm-soft-float
@@ -0,0 +1,124 @@
+*asm:
+%{mbig-endian:-EB} %{mlittle-endian:-EL} %{mcpu=*:-mcpu=%*} %{march=*:-march=%*} %{mapcs-*:-mapcs-%*} %(subtarget_asm_float_spec) %{mthumb-interwork:-mthumb-interwork} %(subtarget_extra_asm_spec)
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%(cpp_cpu_arch) %(subtarget_cpp_spec)			%{mapcs-32:%{mapcs-26:								%e-mapcs-26 and -mapcs-32 may not be used together}}		%{msoft-float:%{mhard-float:							%e-msoft-float and -mhard_float may not be used together}}	%{mbig-endian:%{mlittle-endian:							%e-mbig-endian and -mlittle-endian may not be used together}}
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{profile:-p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*link:
+%{h*} %{version:-v}    %{b} %{Wl,*:%*}    %{static:-Bstatic}    %{shared:-shared}    %{symbolic:-Bsymbolic}    %{rdynamic:-export-dynamic}    %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}    -X    %{mbig-endian:-EB} -m armelf_linux -p
+
+*lib:
+%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{profile:-lc_p}%{!profile:-lc}}
+
+*libgcc:
+%{!mhard-float:-lfloat} %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:-lgcc_s%M}}}
+
+*startfile:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. ;
+
+*multilib_defaults:
+marm mlittle-endian msoft-float mapcs-32 mno-thumb-interwork
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*multilib_exclusions:
+
+
+*multilib_options:
+
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*cpp_cpu_arch:
+%{march=arm2:-D__ARM_ARCH_2__} %{march=arm250:-D__ARM_ARCH_2__} %{march=arm3:-D__ARM_ARCH_2__} %{march=arm6:-D__ARM_ARCH_3__} %{march=arm600:-D__ARM_ARCH_3__} %{march=arm610:-D__ARM_ARCH_3__} %{march=arm7:-D__ARM_ARCH_3__} %{march=arm700:-D__ARM_ARCH_3__} %{march=arm710:-D__ARM_ARCH_3__} %{march=arm720:-D__ARM_ARCH_3__} %{march=arm7100:-D__ARM_ARCH_3__} %{march=arm7500:-D__ARM_ARCH_3__} %{march=arm7500fe:-D__ARM_ARCH_3__} %{march=arm7m:-D__ARM_ARCH_3M__} %{march=arm7dm:-D__ARM_ARCH_3M__} %{march=arm7dmi:-D__ARM_ARCH_3M__} %{march=arm7tdmi:-D__ARM_ARCH_4T__} %{march=arm8:-D__ARM_ARCH_4__} %{march=arm810:-D__ARM_ARCH_4__} %{march=arm9:-D__ARM_ARCH_4T__} %{march=arm920:-D__ARM_ARCH_4__} %{march=arm920t:-D__ARM_ARCH_4T__} %{march=arm9tdmi:-D__ARM_ARCH_4T__} %{march=strongarm:-D__ARM_ARCH_4__} %{march=strongarm110:-D__ARM_ARCH_4__} %{march=strongarm1100:-D__ARM_ARCH_4__} %{march=xscale:-D__ARM_ARCH_5TE__} %{march=xscale:-D__XSCALE__} %{march=armv2:-D__ARM_ARCH_2__} %{march=armv2a:-D__ARM_ARCH_2__} %{march=armv3:-D__ARM_ARCH_3__} %{march=armv3m:-D__ARM_ARCH_3M__} %{march=armv4:-D__ARM_ARCH_4__} %{march=armv4t:-D__ARM_ARCH_4T__} %{march=armv5:-D__ARM_ARCH_5__} %{march=armv5t:-D__ARM_ARCH_5T__} %{march=armv5e:-D__ARM_ARCH_5E__} %{march=armv5te:-D__ARM_ARCH_5TE__} %{!march=*:  %{mcpu=arm2:-D__ARM_ARCH_2__}  %{mcpu=arm250:-D__ARM_ARCH_2__}  %{mcpu=arm3:-D__ARM_ARCH_2__}  %{mcpu=arm6:-D__ARM_ARCH_3__}  %{mcpu=arm600:-D__ARM_ARCH_3__}  %{mcpu=arm610:-D__ARM_ARCH_3__}  %{mcpu=arm7:-D__ARM_ARCH_3__}  %{mcpu=arm700:-D__ARM_ARCH_3__}  %{mcpu=arm710:-D__ARM_ARCH_3__}  %{mcpu=arm720:-D__ARM_ARCH_3__}  %{mcpu=arm7100:-D__ARM_ARCH_3__}  %{mcpu=arm7500:-D__ARM_ARCH_3__}  %{mcpu=arm7500fe:-D__ARM_ARCH_3__}  %{mcpu=arm7m:-D__ARM_ARCH_3M__}  %{mcpu=arm7dm:-D__ARM_ARCH_3M__}  %{mcpu=arm7dmi:-D__ARM_ARCH_3M__}  %{mcpu=arm7tdmi:-D__ARM_ARCH_4T__}  %{mcpu=arm8:-D__ARM_ARCH_4__}  %{mcpu=arm810:-D__ARM_ARCH_4__}  %{mcpu=arm9:-D__ARM_ARCH_4T__}  %{mcpu=arm920:-D__ARM_ARCH_4__}  %{mcpu=arm920t:-D__ARM_ARCH_4T__}  %{mcpu=arm9tdmi:-D__ARM_ARCH_4T__}  %{mcpu=strongarm:-D__ARM_ARCH_4__}  %{mcpu=strongarm110:-D__ARM_ARCH_4__}  %{mcpu=strongarm1100:-D__ARM_ARCH_4__}  %{mcpu=xscale:-D__ARM_ARCH_5TE__}  %{mcpu=xscale:-D__XSCALE__}  %{!mcpu*:%(cpp_cpu_arch_default)}} 
+
+*cpp_cpu_arch_default:
+-D__ARM_ARCH_4T__
+
+*subtarget_cpp_spec:
+%{posix:-D_POSIX_SOURCE} %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__}
+
+*subtarget_extra_asm_spec:
+
+
+*subtarget_asm_float_spec:
+%{mapcs-float:-mfloat} %{!mhard-float:-mno-fpu}
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.5/specs-mips-soft-float b/openwrt/toolchain/gcc/3.3.5/specs-mips-soft-float
new file mode 100644
index 0000000000..2a4240012b
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/specs-mips-soft-float
@@ -0,0 +1,145 @@
+*asm:
+%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} %(subtarget_asm_optimizing_spec) %(subtarget_asm_debugging_spec) %{membedded-pic} %{mabi=32:-32}%{mabi=n32:-n32}%{mabi=64:-64}%{mabi=n64:-64} %{mabi=eabi} %{mabi=o64} %{!mabi*: %(asm_abi_default_spec)} %{mgp32} %{mgp64} %{march=*} %(target_asm_spec) %(subtarget_asm_spec)
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+%|
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%(subtarget_cpp_spec)
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{profile:-p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*link:
+%{!static:--eh-frame-hdr} %(endian_spec)   %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:         %{rdynamic:-export-dynamic}         %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}         %{static:-static}}}
+
+*lib:
+%{shared: -lc} %{!static:-rpath-link %R/lib:%R/usr/lib} %{!shared: %{pthread:-lpthread}   %{profile:-lc_p} %{!profile: -lc}}
+
+*libgcc:
+%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
+
+*startfile:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{static:crtbeginT.o%s}   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. ;
+
+*multilib_defaults:
+EB mips1 mabi=32
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*multilib_exclusions:
+
+
+*multilib_options:
+
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*subtarget_cc1_spec:
+
+
+*subtarget_cpp_spec:
+%{fno-PIC:-U__PIC__ -U__pic__} %{fno-pic:-U__PIC__ -U__pic__} %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{pthread:-D_REENTRANT}
+
+*mips_as_asm_spec:
+%{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} %{pipe: %e-pipe is not supported} %{K} %(subtarget_mips_as_asm_spec)
+
+*gas_asm_spec:
+%{mtune=*} %{v}
+
+*target_asm_spec:
+%{mmips-as: %(mips_as_asm_spec)} %{!mmips-as: %(gas_asm_spec)}
+
+*subtarget_mips_as_asm_spec:
+%{v}
+
+*subtarget_asm_optimizing_spec:
+%{noasmopt:-O0} %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}}
+
+*subtarget_asm_debugging_spec:
+-g0
+
+*mdebug_asm_spec:
+%{!gdwarf*:-mdebug} %{gdwarf*:-no-mdebug}
+
+*subtarget_asm_spec:
+%{mabi=64: -64} %{!fno-PIC:%{!fno-pic:-KPIC}} %{fno-PIC:-non_shared} %{fno-pic:-non_shared}
+
+*asm_abi_default_spec:
+-32
+
+*endian_spec:
+%{!EL:%{!mel:-EB}} %{EL|mel:-EL}
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.5/specs-mipsel-soft-float b/openwrt/toolchain/gcc/3.3.5/specs-mipsel-soft-float
new file mode 100644
index 0000000000..481bf5a395
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/specs-mipsel-soft-float
@@ -0,0 +1,145 @@
+*asm:
+%{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} %(subtarget_asm_optimizing_spec) %(subtarget_asm_debugging_spec) %{membedded-pic} %{mabi=32:-32}%{mabi=n32:-n32}%{mabi=64:-64}%{mabi=n64:-64} %{mabi=eabi} %{mabi=o64} %{!mabi*: %(asm_abi_default_spec)} %{mgp32} %{mgp64} %{march=*} %(target_asm_spec) %(subtarget_asm_spec)
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+%|
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%(subtarget_cpp_spec)
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{profile:-p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*link:
+%{!static:--eh-frame-hdr} %(endian_spec)   %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:         %{rdynamic:-export-dynamic}         %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}         %{static:-static}}}
+
+*lib:
+%{shared: -lc} %{!static:-rpath-link %R/lib:%R/usr/lib} %{!shared: %{pthread:-lpthread}   %{profile:-lc_p} %{!profile: -lc}}
+
+*libgcc:
+%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
+
+*startfile:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{static:crtbeginT.o%s}   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. ;
+
+*multilib_defaults:
+EL mips1 mabi=32
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*multilib_exclusions:
+
+
+*multilib_options:
+
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*subtarget_cc1_spec:
+
+
+*subtarget_cpp_spec:
+%{fno-PIC:-U__PIC__ -U__pic__} %{fno-pic:-U__PIC__ -U__pic__} %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{pthread:-D_REENTRANT}
+
+*mips_as_asm_spec:
+%{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} %{pipe: %e-pipe is not supported} %{K} %(subtarget_mips_as_asm_spec)
+
+*gas_asm_spec:
+%{mtune=*} %{v}
+
+*target_asm_spec:
+%{mmips-as: %(mips_as_asm_spec)} %{!mmips-as: %(gas_asm_spec)}
+
+*subtarget_mips_as_asm_spec:
+%{v}
+
+*subtarget_asm_optimizing_spec:
+%{noasmopt:-O0} %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}}
+
+*subtarget_asm_debugging_spec:
+-g0
+
+*mdebug_asm_spec:
+%{!gdwarf*:-mdebug} %{gdwarf*:-no-mdebug}
+
+*subtarget_asm_spec:
+%{mabi=64: -64} %{!fno-PIC:%{!fno-pic:-KPIC}} %{fno-PIC:-non_shared} %{fno-pic:-non_shared}
+
+*asm_abi_default_spec:
+-32
+
+*endian_spec:
+%{!EB:%{!meb:-EL}} %{EB|meb:-EB}
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.3.5/specs-powerpc-soft-float b/openwrt/toolchain/gcc/3.3.5/specs-powerpc-soft-float
new file mode 100644
index 0000000000..8a546ac8ec
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.3.5/specs-powerpc-soft-float
@@ -0,0 +1,352 @@
+*asm:
+%(asm_cpu) %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} %{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} %{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} %{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian:     %{mcall-freebsd: -mbig}     %{mcall-i960-old: -mlittle}     %{mcall-linux: -mbig}     %{mcall-gnu: -mbig}     %{mcall-netbsd: -mbig} }}}}
+
+*asm_debug:
+%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}
+
+*asm_final:
+%|
+
+*asm_options:
+%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}
+
+*invoke_as:
+%{!S:-o %{|!pipe:%g.s} |
+ as %(asm_options) %{!pipe:%g.s} %A }
+
+*cpp:
+%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %{mads: %(cpp_os_ads) } %{myellowknife: %(cpp_os_yellowknife) } %{mmvme: %(cpp_os_mvme) } %{msim: %(cpp_os_sim) } %{mwindiss: %(cpp_os_windiss) } %{mcall-freebsd: %(cpp_os_freebsd) } %{mcall-linux: %(cpp_os_linux) } %{mcall-gnu: %(cpp_os_gnu) } %{mcall-netbsd: %(cpp_os_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}}
+
+*cpp_options:
+%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*} %{O*} %{undef}
+
+*cpp_debug_options:
+%{d*}
+
+*cpp_unique_options:
+%{C:%{!E:%eGNU C does not support -C without using -E}} %{CC:%{!E:%eGNU C does not support -CC without using -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} %{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{E|M|MM:%W{o*}}
+
+*trad_capable_cpp:
+cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}
+
+*cc1:
+%{G*} %{mlittle: %(cc1_endian_little)} %{!mlittle: %{mlittle-endian: %(cc1_endian_little)}} %{mbig: %(cc1_endian_big)} %{!mbig: %{mbig-endian: %(cc1_endian_big)}} %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian:     %{mcall-aixdesc: -mbig %(cc1_endian_big) }     %{mcall-freebsd: -mbig %(cc1_endian_big) }     %{mcall-i960-old: -mlittle %(cc1_endian_little) }     %{mcall-linux: -mbig %(cc1_endian_big) }     %{mcall-gnu: -mbig %(cc1_endian_big) }     %{mcall-netbsd: -mbig %(cc1_endian_big) }     %{!mcall-aixdesc: %{!mcall-freebsd: %{!mcall-i960-old: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: 	    %(cc1_endian_default)     }}}}}} }}}} %{mno-sdata: -msdata=none } %{meabi: %{!mcall-*: -mcall-sysv }} %{!meabi: %{!mno-eabi:     %{mrelocatable: -meabi }     %{mcall-freebsd: -mno-eabi }     %{mcall-i960-old: -meabi }     %{mcall-linux: -mno-eabi }     %{mcall-gnu: -mno-eabi }     %{mcall-netbsd: -mno-eabi }}} %{msdata: -msdata=default} %{mno-sdata: -msdata=none} %{profile: -p}
+
+*cc1_options:
+%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{msoft-float:%{mhard-float: %e-msoft-float and -mhard_float may not be used together}} %{!mhard-float:%{!msoft-float:-msoft-float}}
+
+*cc1plus:
+
+
+*link_gcc_c_sequence:
+%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}
+
+*endfile:
+%{mads: crtsavres.o%s %(endfile_ads)} %{myellowknife: crtsavres.o%s %(endfile_yellowknife)} %{mmvme: crtsavres.o%s %(endfile_mvme)} %{msim: crtsavres.o%s %(endfile_sim)} %{mwindiss: %(endfile_windiss)} %{mcall-freebsd: crtsavres.o%s %(endfile_freebsd) } %{mcall-linux: crtsavres.o%s %(endfile_linux) } %{mcall-gnu: crtsavres.o%s %(endfile_gnu) } %{mcall-netbsd: crtsavres.o%s %(endfile_netbsd) } %{mvxworks: crtsavres.o%s %(endfile_vxworks) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %{!mvxworks: %(crtsavres_default)                                        %(endfile_default) }}}}}}}}}}
+
+*link:
+%{!static:--eh-frame-hdr} %{h*} %{v:-V} %{!msdata=none:%{G*}} %{msdata=none:-G0} %{YP,*} %{R*} %{Qy:} %{!Qn:-Qy} %(link_shlib) %{!Wl,-T*: %{!T*: %(link_start) }} %(link_target) %(link_os)
+
+*lib:
+%{mads: %(lib_ads) } %{myellowknife: %(lib_yellowknife) } %{mmvme: %(lib_mvme) } %{msim: %(lib_sim) } %{mwindiss: %(lib_windiss) } %{mcall-freebsd: %(lib_freebsd) } %{mcall-linux: %(lib_linux) } %{mcall-gnu: %(lib_gnu) } %{mcall-netbsd: %(lib_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %(lib_default) }}}}}}}}}
+
+*libgcc:
+%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -lgcc_eh}%{shared-libgcc:-lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:-lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
+
+*startfile:
+%{mads: %(startfile_ads) } %{myellowknife: %(startfile_yellowknife) } %{mmvme: %(startfile_mvme) } %{msim: %(startfile_sim) } %{mwindiss: %(startfile_windiss) } %{mcall-freebsd: %(startfile_freebsd) } %{mcall-linux: %(startfile_linux) } %{mcall-gnu: %(startfile_gnu) } %{mcall-netbsd: %(startfile_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %(startfile_default) }}}}}}}}}
+
+*switches_need_spaces:
+
+
+*predefines:
+
+
+*cross_compile:
+1
+
+*version:
+3.3.4
+
+*multilib:
+. mhard-float;nof !mhard-float;
+
+*multilib_defaults:
+mbig mcall-sysv
+
+*multilib_extra:
+fPIC mstrict-align
+
+*multilib_matches:
+mcpu=401 msoft-float;mcpu=403 msoft-float;mcpu=405 msoft-float;mcpu=ec603e msoft-float;mcpu=801 msoft-float;mcpu=821 msoft-float;mcpu=823 msoft-float;mcpu=860 msoft-float;msoft-float msoft-float;
+
+*multilib_exclusions:
+
+
+*multilib_options:
+msoft-float
+
+*linker:
+collect2
+
+*link_libgcc:
+%D
+
+*md_exec_prefix:
+
+
+*md_startfile_prefix:
+
+
+*md_startfile_prefix_1:
+
+
+*startfile_prefix_spec:
+
+
+*cpp_default:
+
+
+*asm_cpu:
+%{!mcpu*:   %{mpower: %{!mpower2: -mpwr}}   %{mpower2: -mpwrx}   %{mpowerpc*: -mppc}   %{mno-power: %{!mpowerpc*: -mcom}}   %{!mno-power: %{!mpower2: %(asm_default)}}} %{mcpu=common: -mcom} %{mcpu=power: -mpwr} %{mcpu=power2: -mpwrx} %{mcpu=power3: -m604} %{mcpu=power4: -mpower4} %{mcpu=powerpc: -mppc} %{mcpu=rios: -mpwr} %{mcpu=rios1: -mpwr} %{mcpu=rios2: -mpwrx} %{mcpu=rsc: -mpwr} %{mcpu=rsc1: -mpwr} %{mcpu=401: -mppc} %{mcpu=403: -m403} %{mcpu=405: -m405} %{mcpu=505: -mppc} %{mcpu=601: -m601} %{mcpu=602: -mppc} %{mcpu=603: -mppc} %{mcpu=603e: -mppc} %{mcpu=ec603e: -mppc} %{mcpu=604: -mppc} %{mcpu=604e: -mppc} %{mcpu=620: -mppc} %{mcpu=630: -m604} %{mcpu=740: -mppc} %{mcpu=7400: -mppc} %{mcpu=7450: -mppc} %{mcpu=750: -mppc} %{mcpu=801: -mppc} %{mcpu=821: -mppc} %{mcpu=823: -mppc} %{mcpu=860: -mppc} %{mcpu=8540: -me500} %{maltivec: -maltivec}
+
+*asm_default:
+-mppc
+
+*cpp_sysv:
+%{mrelocatable*: -D_RELOCATABLE} %{fpic: -D__PIC__=1 -D__pic__=1} %{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}}
+
+*crtsavres_default:
+crtsavres.o%s
+
+*lib_ads:
+--start-group -lads -lc --end-group
+
+*lib_yellowknife:
+--start-group -lyk -lc --end-group
+
+*lib_mvme:
+--start-group -lmvme -lc --end-group
+
+*lib_sim:
+--start-group -lsim -lc --end-group
+
+*lib_freebsd:
+							  %{!shared:								    %{!pg:								      %{!pthread:-lc}							      %{pthread:-lc_r}}							    %{pg:								      %{!pthread:-lc_p}							      %{pthread:-lc_r_p}}						  }
+
+*lib_gnu:
+%{mnewlib: --start-group -lgnu -lc --end-group } %{!mnewlib: %{shared:-lc} %{!shared: %{pthread:-lpthread } %{profile:-lc_p} %{!profile:-lc}}}
+
+*lib_linux:
+%{mnewlib: --start-group -llinux -lc --end-group } %{!mnewlib: %{pthread:-lpthread} %{shared:-lc} %{!shared: %{profile:-lc_p} %{!profile:-lc}}}
+
+*lib_netbsd:
+%{profile:-lgmon -lc_p} %{!profile:-lc}
+
+*lib_vxworks:
+
+
+*lib_windiss:
+--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group
+
+*lib_default:
+%(lib_linux)
+
+*startfile_ads:
+ecrti.o%s crt0.o%s crtbegin.o%s
+
+*startfile_yellowknife:
+ecrti.o%s crt0.o%s crtbegin.o%s
+
+*startfile_mvme:
+ecrti.o%s crt0.o%s crtbegin.o%s
+
+*startfile_sim:
+ecrti.o%s sim-crt0.o%s crtbegin.o%s
+
+*startfile_freebsd:
+%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} 		       %{!p:%{profile:gcrt1.o%s} 			 %{!profile:crt1.o%s}}}}    crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*startfile_gnu:
+%{!shared: %{!static: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}} %{static: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} %{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*startfile_linux:
+%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} %{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} %{static:crtbeginT.o%s} %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}
+
+*startfile_netbsd:
+ncrti.o%s crt0.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
+
+*startfile_vxworks:
+
+
+*startfile_windiss:
+crt0.o%s crtbegin.o%s
+
+*startfile_default:
+%(startfile_linux)
+
+*endfile_ads:
+crtend.o%s ecrtn.o%s
+
+*endfile_yellowknife:
+crtend.o%s ecrtn.o%s
+
+*endfile_mvme:
+crtend.o%s ecrtn.o%s
+
+*endfile_sim:
+crtend.o%s ecrtn.o%s
+
+*endfile_freebsd:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
+
+*endfile_gnu:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} %{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}
+
+*endfile_linux:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} %{mnewlib: ecrtn.o%s} %{!mnewlib: crtn.o%s}
+
+*endfile_netbsd:
+%{!shared:crtend.o%s} %{shared:crtendS.o%s} ncrtn.o%s
+
+*endfile_vxworks:
+
+
+*endfile_windiss:
+crtend.o%s
+
+*endfile_default:
+%(endfile_linux)
+
+*link_path:
+
+
+*link_shlib:
+%{shared:-shared} %{!shared: %{static:-static}}
+
+*link_target:
+%{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } %{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian:     %{mcall-i960-old: --oformat elf32-powerpcle}   }}}}
+
+*link_start:
+%{mads: %(link_start_ads) } %{myellowknife: %(link_start_yellowknife) } %{mmvme: %(link_start_mvme) } %{msim: %(link_start_sim) } %{mwindiss: %(link_start_windiss) } %{mcall-freebsd: %(link_start_freebsd) } %{mcall-linux: %(link_start_linux) } %{mcall-gnu: %(link_start_gnu) } %{mcall-netbsd: %(link_start_netbsd) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd:            %{!mcall-freebsd: %(link_start_default) }}}}}}}}}
+
+*link_start_ads:
+-T ads.ld%s
+
+*link_start_yellowknife:
+-T yellowknife.ld%s
+
+*link_start_mvme:
+-Ttext 0x40000
+
+*link_start_sim:
+
+
+*link_start_freebsd:
+
+
+*link_start_gnu:
+
+
+*link_start_linux:
+
+
+*link_start_netbsd:
+
+
+*link_start_vxworks:
+
+
+*link_start_windiss:
+
+
+*link_start_default:
+%(link_start_linux)
+
+*link_os:
+%{mads: %(link_os_ads) } %{myellowknife: %(link_os_yellowknife) } %{mmvme: %(link_os_mvme) } %{msim: %(link_os_sim) } %{mwindiss: %(link_os_windiss) } %{mcall-freebsd: %(link_os_freebsd) } %{mcall-linux: %(link_os_linux) } %{mcall-gnu: %(link_os_gnu) } %{mcall-netbsd: %(link_os_netbsd) } %{mcall-uclibc: %(link_os_linux_uclibc) } %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss:          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu:          %{!mcall-netbsd: %{!mcall-uclibc:          %(link_os_default) }}}}}}}}}}
+
+*link_os_ads:
+
+
+*link_os_yellowknife:
+
+
+*link_os_mvme:
+
+
+*link_os_sim:
+-m elf32ppcsim
+
+*link_os_freebsd:
+  %{p:%e`-p' not supported; use `-pg' and gprof(1)}     %{Wl,*:%*}     %{v:-V}     %{assert*} %{R*} %{rpath*} %{defsym*}     %{shared:-Bshareable %{h*} %{soname*}}     %{!shared:       %{!static: 	%{rdynamic: -export-dynamic} 	%{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}}       %{static:-Bstatic}}     %{symbolic:-Bsymbolic}
+
+*link_os_linux:
+-m elf32ppclinux %{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}
+
+*link_os_gnu:
+-m elf32ppclinux %{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}
+
+*link_os_netbsd:
+%{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}}
+
+*link_os_vxworks:
+-r
+
+*link_os_windiss:
+
+
+*link_os_linux_uclibc:
+-m elf32ppclinux %{!shared: %{!static:   %{rdynamic:-export-dynamic}   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}
+
+*link_os_default:
+%(link_os_linux_uclibc)
+
+*cc1_endian_big:
+
+
+*cc1_endian_little:
+%{!mstrict-align: %{!mno-strict-align:     %{!mcall-i960-old: 	-mstrict-align     } }}
+
+*cc1_endian_default:
+%(cc1_endian_big)
+
+*cpp_os_ads:
+
+
+*cpp_os_yellowknife:
+
+
+*cpp_os_mvme:
+
+
+*cpp_os_sim:
+
+
+*cpp_os_freebsd:
+  -D__ELF__ -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__   -Acpu=powerpc -Amachine=powerpc
+
+*cpp_os_gnu:
+-D__unix__ -D__gnu_hurd__ -D__GNU__	%{!undef:					                  %{!ansi: -Dunix -D__unix}}			                -Asystem=gnu -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}
+
+*cpp_os_linux:
+-D__unix__ -D__gnu_linux__ -D__linux__ %{!undef:							    %{!ansi:							      %{!std=*:-Dunix -D__unix -Dlinux -D__linux}			      %{std=gnu*:-Dunix -D__unix -Dlinux -D__linux}}}		  -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}
+
+*cpp_os_netbsd:
+-D__powerpc__ -D__NetBSD__ -D__ELF__ -D__KPRINTF_ATTRIBUTE__
+
+*cpp_os_rtems:
+%{!mcpu*:  %{!Dppc*: %{!Dmpc*: -Dmpc750} } }%{mcpu=403:  %{!Dppc*: %{!Dmpc*: -Dppc403}  } } %{mcpu=505:  %{!Dppc*: %{!Dmpc*: -Dmpc505}  } } %{mcpu=601:  %{!Dppc*: %{!Dmpc*: -Dppc601}  } } %{mcpu=602:  %{!Dppc*: %{!Dmpc*: -Dppc602}  } } %{mcpu=603:  %{!Dppc*: %{!Dmpc*: -Dppc603}  } } %{mcpu=603e: %{!Dppc*: %{!Dmpc*: -Dppc603e} } } %{mcpu=604:  %{!Dppc*: %{!Dmpc*: -Dmpc604}  } } %{mcpu=750:  %{!Dppc*: %{!Dmpc*: -Dmpc750}  } } %{mcpu=821:  %{!Dppc*: %{!Dmpc*: -Dmpc821}  } } %{mcpu=860:  %{!Dppc*: %{!Dmpc*: -Dmpc860}  } }
+
+*cpp_os_vxworks:
+-DCPU_FAMILY=PPC %{!mcpu*:   %{mpowerpc*: -DCPU=PPC603}   %{!mno-powerpc: -DCPU=PPC603}} %{mcpu=powerpc: -DCPU=PPC603} %{mcpu=401: -DCPU=PPC403} %{mcpu=403: -DCPU=PPC403} %{mcpu=405: -DCPU=PPC405} %{mcpu=601: -DCPU=PPC601} %{mcpu=602: -DCPU=PPC603} %{mcpu=603: -DCPU=PPC603} %{mcpu=603e: -DCPU=PPC603} %{mcpu=ec603e: -DCPU=PPC603} %{mcpu=604: -DCPU=PPC604} %{mcpu=604e: -DCPU=PPC604} %{mcpu=620: -DCPU=PPC604} %{mcpu=740: -DCPU=PPC603} %{mcpu=7450: -DCPU=PPC603} %{mcpu=750: -DCPU=PPC603} %{mcpu=801: -DCPU=PPC603} %{mcpu=821: -DCPU=PPC603} %{mcpu=823: -DCPU=PPC603} %{mcpu=860: -DCPU=PPC603}
+
+*cpp_os_windiss:
+-D__rtasim -D__EABI__ -D__ppc %{!msoft-float: -D__hardfp} 
+
+*cpp_os_default:
+%(cpp_os_linux)
+
+*link_command:
+%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}
+
diff --git a/openwrt/toolchain/gcc/3.4.0/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.4.0/100-uclibc-conf.patch
new file mode 100644
index 0000000000..ad03345bd1
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.0/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.0-dist/boehm-gc/configure gcc-3.4.0/boehm-gc/configure
+--- gcc-3.4.0-dist/boehm-gc/configure	2004-04-18 21:23:04.000000000 -0500
++++ gcc-3.4.0/boehm-gc/configure	2004-08-12 16:51:15.000000000 -0500
+@@ -1947,6 +1947,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.0-dist/boehm-gc/ltconfig gcc-3.4.0/boehm-gc/ltconfig
+--- gcc-3.4.0-dist/boehm-gc/ltconfig	2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.0/boehm-gc/ltconfig	2004-08-12 16:51:15.000000000 -0500
+@@ -1981,6 +1981,23 @@
+   fi
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++  file_magic_cmd=/usr/bin/file
++  file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   version_type=sunos
+   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.0-dist/gcc/config/arm/linux-elf.h gcc-3.4.0/gcc/config/arm/linux-elf.h
+--- gcc-3.4.0-dist/gcc/config/arm/linux-elf.h	2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.0/gcc/config/arm/linux-elf.h	2004-08-12 16:51:15.000000000 -0500
+@@ -81,6 +81,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+ 
+diff -urN gcc-3.4.0-dist/gcc/config/cris/linux.h gcc-3.4.0/gcc/config/cris/linux.h
+--- gcc-3.4.0-dist/gcc/config/cris/linux.h	2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.0/gcc/config/cris/linux.h	2004-08-12 16:51:15.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -93,6 +112,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.4.0-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.0/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.0-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/gcc/config/cris/t-linux-uclibc	2004-08-12 16:51:15.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.0-dist/gcc/config/i386/linux.h gcc-3.4.0/gcc/config/i386/linux.h
+--- gcc-3.4.0-dist/gcc/config/i386/linux.h	2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.0/gcc/config/i386/linux.h	2004-08-12 16:51:15.000000000 -0500
+@@ -118,6 +118,15 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ 	%{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -126,6 +135,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.0-dist/gcc/config/mips/linux.h gcc-3.4.0/gcc/config/mips/linux.h
+--- gcc-3.4.0-dist/gcc/config/mips/linux.h	2004-02-19 15:45:21.000000000 -0600
++++ gcc-3.4.0/gcc/config/mips/linux.h	2004-08-12 16:51:15.000000000 -0500
+@@ -109,6 +109,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -118,6 +129,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.0-dist/gcc/config/rs6000/linux.h gcc-3.4.0/gcc/config/rs6000/linux.h
+--- gcc-3.4.0-dist/gcc/config/rs6000/linux.h	2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.0/gcc/config/rs6000/linux.h	2004-08-12 16:51:15.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+   "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.0-dist/gcc/config/rs6000/sysv4.h gcc-3.4.0/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.0-dist/gcc/config/rs6000/sysv4.h	2004-03-02 16:34:58.000000000 -0600
++++ gcc-3.4.0/gcc/config/rs6000/sysv4.h	2004-08-12 16:51:15.000000000 -0500
+@@ -952,6 +952,7 @@
+   mcall-linux  : %(link_os_linux)       ; \
+   mcall-gnu    : %(link_os_gnu)         ; \
+   mcall-netbsd : %(link_os_netbsd)      ; \
++  mcall-linux-uclibc : %(link_os_linux_uclibc); \
+   mcall-openbsd: %(link_os_openbsd)     ; \
+                : %(link_os_default)     }"
+ 
+@@ -1129,6 +1130,10 @@
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1295,6 +1300,7 @@
+   { "link_os_sim",		LINK_OS_SIM_SPEC },			\
+   { "link_os_freebsd",		LINK_OS_FREEBSD_SPEC },			\
+   { "link_os_linux",		LINK_OS_LINUX_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_gnu",		LINK_OS_GNU_SPEC },			\
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_openbsd",		LINK_OS_OPENBSD_SPEC },			\
+diff -urN gcc-3.4.0-dist/gcc/config/sh/linux.h gcc-3.4.0/gcc/config/sh/linux.h
+--- gcc-3.4.0-dist/gcc/config/sh/linux.h	2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.0/gcc/config/sh/linux.h	2004-08-12 16:51:15.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.0-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.0/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.0-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/gcc/config/sh/t-linux-uclibc	2004-08-12 16:51:15.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.0-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.0/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.0-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/gcc/config/sh/t-sh64-uclibc	2004-08-12 16:51:15.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.0-dist/gcc/config/t-linux-uclibc gcc-3.4.0/gcc/config/t-linux-uclibc
+--- gcc-3.4.0-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/gcc/config/t-linux-uclibc	2004-08-12 16:51:15.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.0-dist/gcc/config.gcc gcc-3.4.0/gcc/config.gcc
+--- gcc-3.4.0-dist/gcc/config.gcc	2004-04-16 21:28:24.000000000 -0500
++++ gcc-3.4.0/gcc/config.gcc	2004-08-12 16:51:15.000000000 -0500
+@@ -664,6 +664,12 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ 	gnu_ld=yes
+ 	gas=yes
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case ${target} in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case ${target} in
+@@ -1764,6 +1789,10 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ 	;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+-	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ 	case ${target} in
+ 	sh*be-*-* | sh*eb-*-*) ;;
+ 	*)
+@@ -1924,9 +1953,17 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case ${target} in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	case ${target} in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.0-dist/libtool.m4 gcc-3.4.0/libtool.m4
+--- gcc-3.4.0-dist/libtool.m4	2003-11-18 23:29:32.000000000 -0600
++++ gcc-3.4.0/libtool.m4	2004-08-12 16:51:15.000000000 -0500
+@@ -689,6 +689,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.0-dist/ltconfig gcc-3.4.0/ltconfig
+--- gcc-3.4.0-dist/ltconfig	2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.0/ltconfig	2004-08-12 16:51:15.000000000 -0500
+@@ -602,6 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1262,6 +1263,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.4.0/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.4.0/200-uclibc-locale.patch
new file mode 100644
index 0000000000..27e047eb73
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.0/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-3.4.0-dist/libstdc++-v3/acinclude.m4 gcc-3.4.0/libstdc++-v3/acinclude.m4
+--- gcc-3.4.0-dist/libstdc++-v3/acinclude.m4	2004-03-18 11:35:22.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/acinclude.m4	2004-08-12 17:08:19.000000000 -0500
+@@ -995,7 +995,7 @@
+   AC_MSG_CHECKING([for C locale to use])
+   GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+     [use MODEL for target locale package],
+-    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+   
+   # If they didn't use this option switch, or if they specified --enable
+   # with no specific model, we'll have to look for one.  If they
+@@ -1011,6 +1011,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++        enable_clocale_flag=uclibc
++        ;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1137,6 +1140,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.0-dist/libstdc++-v3/aclocal.m4 gcc-3.4.0/libstdc++-v3/aclocal.m4
+--- gcc-3.4.0-dist/libstdc++-v3/aclocal.m4	2004-03-18 11:35:23.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/aclocal.m4	2004-08-12 17:13:42.000000000 -0500
+@@ -1024,6 +1024,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1150,6 +1153,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno>  // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c)        NULL
++#define __freelocale(a)             ((void)0)
++#define __duplocale(a)              __c_locale()
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++			      "name not valid"));
++      }
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++    if (_S_get_c_locale() != __cloc)
++      __freelocale(__cloc); 
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++  { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES", 
++#if _GLIBCXX_NUM_CATEGORIES != 0
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}
++
++namespace std
++{
++  const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++}  // namespace std
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.0/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,119 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring>              // get std::strlen
++#include <cstdio>               // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++ 
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec = -1)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec = -1)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = std::setlocale(LC_ALL, NULL);
++      char* __sav = new char[std::strlen(__old) + 1];
++      std::strcpy(__sav, __old);
++      std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      int __ret;
++      if (__prec >= 0)
++        __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++      else
++        __ret = std::snprintf(__out, __size, __fmt, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      std::setlocale(LC_ALL, __sav);
++      delete [] __sav;
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++    // in case we fall back to wcrtomb and then continue, in a loop.
++    // NB: wcsnrtombs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++						      __from_end - __from_next);
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++					 __from_chunk_end - __from_next,
++					 __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // wcrtomb.
++	    for (; __from < __from_next; ++__from)
++	      __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++	    __state = __tmp_state;
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    extern_type __buf[MB_LEN_MAX];
++	    __tmp_state = __state;
++	    const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++	    if (__conv > static_cast<size_t>(__to_end - __to_next))
++	      __ret = partial;
++	    else
++	      {
++		memcpy(__to_next, __buf, __conv);
++		__state = __tmp_state;
++		__to_next += __conv;
++		++__from_next;
++	      }
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we store a L'\0' and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++								  __from_end
++								  - __from_next));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++				   __from_chunk_end - __from_next,
++				   __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (;; ++__to_next, __from += __conv)
++	      {
++		__conv = mbrtowc(__to_next, __from, __from_end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __from_next = __from;
++	    __state = __tmp_state;	    
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    // It is unclear what to return in this case (see DR 382). 
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    if (__to_next < __to_end)
++	      {
++		// XXX Probably wrong for stateful encodings
++		__tmp_state = __state;		
++		++__from_next;
++		*__to_next++ = L'\0';
++	      }
++	    else
++	      __ret = partial;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_encoding() const throw()
++  {
++    // XXX This implementation assumes that the encoding is
++    // stateless and is either single-byte or variable-width.
++    int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    if (MB_CUR_MAX == 1)
++      __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }  
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_max_length() const throw()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    // XXX Probably wrong for stateful encodings.
++    int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++  
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_length(state_type& __state, const extern_type* __from,
++	    const extern_type* __end, size_t __max) const
++  {
++    int __ret = 0;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we advance past it and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++  
++    // A dummy internal buffer is needed in order for mbsnrtocws to consider
++    // its fourth parameter (it wouldn't with NULL as first parameter).
++    wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) 
++							   * __max));
++    while (__from < __end && __max)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++								  __end
++								  - __from));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __end;
++
++	const extern_type* __tmp_from = __from;
++	size_t __conv = mbsnrtowcs(__to, &__from,
++				   __from_chunk_end - __from,
++				   __max, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (__from = __tmp_from;; __from += __conv)
++	      {
++		__conv = mbrtowc(NULL, __from, __end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __state = __tmp_state;
++	    __ret += __from - __tmp_from;
++	    break;
++	  }
++	if (!__from)
++	  __from = __from_chunk_end;
++	
++	__ret += __from - __tmp_from;
++	__max -= __conv;
++
++	if (__from < __end && __max)
++	  {
++	    // XXX Probably wrong for stateful encodings
++	    __tmp_state = __state;
++	    ++__from;
++	    ++__ret;
++	    --__max;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 		
++      if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	{
++	  _S_destroy_c_locale(_M_c_locale_ctype);
++	  _S_create_c_locale(_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_toupper = _M_c_locale_ctype->__ctype_toupper;
++	  _M_tolower = _M_c_locale_ctype->__ctype_tolower;
++	  _M_table = _M_c_locale_ctype->__ctype_b;
++#endif
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      if (__m & _M_bit[__bitcur]
++	  && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++	{
++	  __ret = true;
++	  break;
++	}
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (; __lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++	    __m |= _M_bit[__bitcur];
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++    while (__lo < __hi)
++      {
++	*__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++	++__lo;
++	++__dest;
++      }
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  {
++    if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++      return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    if (_M_narrow_ok)
++      while (__lo < __hi)
++	{
++	  if (*__lo >= 0 && *__lo < 128)
++	    *__dest = _M_narrow[*__lo];
++	  else
++	    {
++	      const int __c = wctob(*__lo);
++	      *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	    }
++	  ++__lo;
++	  ++__dest;
++	}
++    else
++      while (__lo < __hi)
++	{
++	  const int __c = wctob(*__lo);
++	  *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	  ++__lo;
++	  ++__dest;
++	}
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  void
++  ctype<wchar_t>::_M_initialize_ctype()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wint_t __i;
++    for (__i = 0; __i < 128; ++__i)
++      {
++	const int __c = wctob(__i);
++	if (__c == EOF)
++	  break;
++	else
++	  _M_narrow[__i] = static_cast<char>(__c);
++      }
++    if (__i == 128)
++      _M_narrow_ok = true;
++    else
++      _M_narrow_ok = false;
++    for (size_t __i = 0;
++	 __i < sizeof(_M_widen) / sizeof(wint_t); ++__i)
++      _M_widen[__i] = btowc(__i);
++
++    for (size_t __i = 0; __i <= 11; ++__i)
++      { 
++	_M_bit[__i] = static_cast<mask>(_ISbit(__i));
++	_M_wmask[__i] = _M_convert_to_wmask(_M_bit[__i]);
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++  }
++#endif //  _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++# ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.0/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,109 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : facet(__refs)
++     {  
++       _M_c_locale_messages = _S_get_c_locale(); 
++     }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, 
++				const char* __s __attribute__ ((__unused__)), 
++				size_t __refs) 
++     : facet(__refs)
++     {
++       _M_c_locale_messages = _S_clone_c_locale(__cloc); 
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++	if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	  {
++	    _S_destroy_c_locale(this->_M_c_locale_messages);
++	    _S_create_c_locale(this->_M_c_locale_messages, __s); 
++	  }
++     }
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	__ret.field[0] = sign;
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[2] = space;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[1] = space;
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = sign;
++	    __ret.field[1] = symbol;	    
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;		
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	    else
++	      {
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = symbol;
++	    __ret.field[1] = sign;
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	    else
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, 
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == true
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, false>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == false
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { delete _M_data; }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<wchar_t, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  try
++	    {
++	      mbstate_t __state;
++	      size_t __len = strlen(__cpossign);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++	      _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++	      _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++	      
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++	      _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++	  catch (...)
++	    {
++	      delete _M_data;
++	      _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++	      __throw_exception_again;
++	    } 
++	  
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++  void
++  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++						       const char*)
++#else
++                                                       const char* __name)
++#endif
++  {
++    if (!_M_data)
++      _M_data = new __moneypunct_cache<wchar_t, false>;
++
++    if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++          _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  try
++            {
++              mbstate_t __state;
++              size_t __len;
++              __len = strlen(__cpossign);
++              if (__len)
++                {
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++              _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++              _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++              _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++          catch (...)
++	    {
++	      delete _M_data;
++              _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++              __throw_exception_again;
++	    }
++
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++	                                                __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++	                                                __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++#endif
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-08-12 17:15:14.000000000 -0500
+@@ -0,0 +1,181 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++	  for (size_t __i = 0; __i < __num_base::_S_iend; ++__i)
++	    _M_data->_M_atoms_in[__i] = __num_base::_S_atoms_in[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
++
++	  // Check for NULL, which implies no grouping.
++	  if (_M_data->_M_thousands_sep == '\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = "true";
++      _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = "false";
++      _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { delete _M_data; }
++   
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<wchar_t>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++	      _M_data->_M_atoms_out[__i] = btowc(uc);
++	    }
++
++	  for (size_t __i = 0; __i < __num_base::_S_iend; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__i]);
++	      _M_data->_M_atoms_in[__i] = btowc(uc);
++	    }
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#endif
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++	  if (_M_data->_M_thousands_sep == L'\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = L"true";
++      _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = L"false";
++      _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.0/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,347 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = "%m/%d/%y";
++	  _M_data->_M_date_era_format = "%m/%d/%y";
++	  _M_data->_M_time_format = "%H:%M:%S";
++	  _M_data->_M_time_era_format = "%H:%M:%S";
++	  _M_data->_M_date_time_format = "";
++	  _M_data->_M_date_time_era_format = "";
++	  _M_data->_M_am = "AM";
++	  _M_data->_M_pm = "PM";
++	  _M_data->_M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = "Sunday";
++	  _M_data->_M_day2 = "Monday";
++	  _M_data->_M_day3 = "Tuesday";
++	  _M_data->_M_day4 = "Wednesday";
++	  _M_data->_M_day5 = "Thursday";
++	  _M_data->_M_day6 = "Friday";
++	  _M_data->_M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = "Sun";
++	  _M_data->_M_aday2 = "Mon";
++	  _M_data->_M_aday3 = "Tue";
++	  _M_data->_M_aday4 = "Wed";
++	  _M_data->_M_aday5 = "Thu";
++	  _M_data->_M_aday6 = "Fri";
++	  _M_data->_M_aday7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = "January";
++	  _M_data->_M_month02 = "February";
++	  _M_data->_M_month03 = "March";
++	  _M_data->_M_month04 = "April";
++	  _M_data->_M_month05 = "May";
++	  _M_data->_M_month06 = "June";
++	  _M_data->_M_month07 = "July";
++	  _M_data->_M_month08 = "August";
++	  _M_data->_M_month09 = "September";
++	  _M_data->_M_month10 = "October";
++	  _M_data->_M_month11 = "November";
++	  _M_data->_M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = "Jan";
++	  _M_data->_M_amonth02 = "Feb";
++	  _M_data->_M_amonth03 = "Mar";
++	  _M_data->_M_amonth04 = "Apr";
++	  _M_data->_M_amonth05 = "May";
++	  _M_data->_M_amonth06 = "Jun";
++	  _M_data->_M_amonth07 = "July";
++	  _M_data->_M_amonth08 = "Aug";
++	  _M_data->_M_amonth09 = "Sep";
++	  _M_data->_M_amonth10 = "Oct";
++	  _M_data->_M_amonth11 = "Nov";
++	  _M_data->_M_amonth12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = L"%m/%d/%y";
++	  _M_data->_M_date_era_format = L"%m/%d/%y";
++	  _M_data->_M_time_format = L"%H:%M:%S";
++	  _M_data->_M_time_era_format = L"%H:%M:%S";
++	  _M_data->_M_date_time_format = L"";
++	  _M_data->_M_date_time_era_format = L"";
++	  _M_data->_M_am = L"AM";
++	  _M_data->_M_pm = L"PM";
++	  _M_data->_M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = L"Sunday";
++	  _M_data->_M_day2 = L"Monday";
++	  _M_data->_M_day3 = L"Tuesday";
++	  _M_data->_M_day4 = L"Wednesday";
++	  _M_data->_M_day5 = L"Thursday";
++	  _M_data->_M_day6 = L"Friday";
++	  _M_data->_M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = L"Sun";
++	  _M_data->_M_aday2 = L"Mon";
++	  _M_data->_M_aday3 = L"Tue";
++	  _M_data->_M_aday4 = L"Wed";
++	  _M_data->_M_aday5 = L"Thu";
++	  _M_data->_M_aday6 = L"Fri";
++	  _M_data->_M_aday7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = L"January";
++	  _M_data->_M_month02 = L"February";
++	  _M_data->_M_month03 = L"March";
++	  _M_data->_M_month04 = L"April";
++	  _M_data->_M_month05 = L"May";
++	  _M_data->_M_month06 = L"June";
++	  _M_data->_M_month07 = L"July";
++	  _M_data->_M_month08 = L"August";
++	  _M_data->_M_month09 = L"September";
++	  _M_data->_M_month10 = L"October";
++	  _M_data->_M_month11 = L"November";
++	  _M_data->_M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = L"Jan";
++	  _M_data->_M_amonth02 = L"Feb";
++	  _M_data->_M_amonth03 = L"Mar";
++	  _M_data->_M_amonth04 = L"Apr";
++	  _M_data->_M_amonth05 = L"May";
++	  _M_data->_M_amonth06 = L"Jun";
++	  _M_data->_M_amonth07 = L"July";
++	  _M_data->_M_amonth08 = L"Aug";
++	  _M_data->_M_amonth09 = L"Sep";
++	  _M_data->_M_amonth10 = L"Oct";
++	  _M_data->_M_amonth11 = L"Nov";
++	  _M_data->_M_amonth12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.0/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/locale/uclibc/time_members.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : facet(__refs), _M_data(NULL)
++    { 
++#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
++      _M_name_timepunct = _S_get_c_name();
++#endif
++      _M_initialize_timepunct(); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) 
++    : facet(__refs), _M_data(__cache)
++    { 
++#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
++      _M_name_timepunct = _S_get_c_name();
++#endif
++      _M_initialize_timepunct(); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, 
++				 const char* __s __attribute__ ((__unused__)), 
++				     size_t __refs) 
++    : facet(__refs), _M_data(NULL)
++    { 
++#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
++      char* __tmp = new char[std::strlen(__s) + 1];
++      std::strcpy(__tmp, __s);
++      _M_name_timepunct = __tmp;
++#endif
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
++      if (_M_name_timepunct != _S_get_c_name())
++	delete [] _M_name_timepunct;
++#endif
++      delete _M_data; 
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.0/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++ 
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISalpha | _ISdigit | _ISpunct;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalpha | _ISdigit;
++  };
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/os/uclibc/ctype_inline.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,96 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { return __C_ctype_b; }
++
++  ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : facet(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_c_locale_ctype = _S_clone_c_locale(__cloc);
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    _M_widen_ok = 0;
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++    _M_narrow_ok = 0;
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) 
++  : facet(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_c_locale_ctype = _S_get_c_locale(); 
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    _M_widen_ok = 0;
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++    _M_narrow_ok = 0;
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.0/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/config/os/uclibc/os_defines.h	2004-08-12 17:08:19.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.0-dist/libstdc++-v3/configure gcc-3.4.0/libstdc++-v3/configure
+--- gcc-3.4.0-dist/libstdc++-v3/configure	2004-03-18 11:35:25.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/configure	2004-08-12 17:08:58.000000000 -0500
+@@ -3878,6 +3878,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_check_msgfmt="yes"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++  echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++  echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++
++
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.0-dist/libstdc++-v3/configure.host gcc-3.4.0/libstdc++-v3/configure.host
+--- gcc-3.4.0-dist/libstdc++-v3/configure.host	2004-03-18 11:36:12.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/configure.host	2004-08-12 17:08:19.000000000 -0500
+@@ -217,6 +217,12 @@
+     ;;
+ esac
+ 
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++  *-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
++esac
+ 
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+diff -urN gcc-3.4.0-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.0/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.0-dist/libstdc++-v3/crossconfig.m4	2004-02-09 01:17:55.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/crossconfig.m4	2004-08-12 17:08:19.000000000 -0500
+@@ -122,6 +122,99 @@
+ 	;;
+     esac
+     ;;
++  *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++      machine/endian.h machine/param.h sys/machine.h sys/types.h \
++      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    AC_SUBST(SECTION_FLAGS)
++    GLIBCXX_CHECK_LINKER_FEATURES
++    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++    GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++    # For LFS.
++    AC_DEFINE(HAVE_INT64_T)
++    case "$target" in
++      *-uclinux*)
++        # Don't enable LFS with uClinux
++        ;;
++      *)
++        AC_DEFINE(_GLIBCXX_USE_LFS)
++    esac
++
++    # For showmanyc_helper().
++    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++    GLIBCXX_CHECK_POLL
++    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++    # For xsputn_2().
++    AC_CHECK_HEADERS(sys/uio.h)
++    GLIBCXX_CHECK_WRITEV
++
++#     AC_DEFINE(HAVE_ACOSF)
++#     AC_DEFINE(HAVE_ASINF)
++#     AC_DEFINE(HAVE_ATANF)
++#     AC_DEFINE(HAVE_ATAN2F)
++    AC_DEFINE(HAVE_CEILF)
++    AC_DEFINE(HAVE_COPYSIGN)
++#     AC_DEFINE(HAVE_COPYSIGNF)
++#     AC_DEFINE(HAVE_COSF)
++#     AC_DEFINE(HAVE_COSHF)
++#     AC_DEFINE(HAVE_EXPF)
++#     AC_DEFINE(HAVE_FABSF)
++    AC_DEFINE(HAVE_FINITE)
++    AC_DEFINE(HAVE_FINITEF)
++    AC_DEFINE(HAVE_FLOORF)
++#     AC_DEFINE(HAVE_FMODF)
++#     AC_DEFINE(HAVE_FREXPF)
++    AC_DEFINE(HAVE_HYPOT)
++#     AC_DEFINE(HAVE_HYPOTF)
++    AC_DEFINE(HAVE_ISINF)
++    AC_DEFINE(HAVE_ISINFF)
++    AC_DEFINE(HAVE_ISNAN)
++    AC_DEFINE(HAVE_ISNANF)
++#     AC_DEFINE(HAVE_LOGF)
++#     AC_DEFINE(HAVE_LOG10F)
++#     AC_DEFINE(HAVE_MODFF)
++#     AC_DEFINE(HAVE_SINF)
++#     AC_DEFINE(HAVE_SINHF)
++#     AC_DEFINE(HAVE_SINCOS)
++#     AC_DEFINE(HAVE_SINCOSF)
++    AC_DEFINE(HAVE_SQRTF)
++#     AC_DEFINE(HAVE_TANF)
++#     AC_DEFINE(HAVE_TANHF)
++    if test x"long_double_math_on_this_cpu" = x"yes"; then
++      AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++#       AC_DEFINE(HAVE_ACOSL)
++#       AC_DEFINE(HAVE_ASINL)
++#       AC_DEFINE(HAVE_ATANL)
++#       AC_DEFINE(HAVE_ATAN2L)
++#       AC_DEFINE(HAVE_CEILL)
++#       AC_DEFINE(HAVE_COPYSIGNL)
++#       AC_DEFINE(HAVE_COSL)
++#       AC_DEFINE(HAVE_COSHL)
++#       AC_DEFINE(HAVE_EXPL)
++#       AC_DEFINE(HAVE_FABSL)
++#       AC_DEFINE(HAVE_FINITEL)
++#       AC_DEFINE(HAVE_FLOORL)
++#       AC_DEFINE(HAVE_FMODL)
++#       AC_DEFINE(HAVE_FREXPL)
++#       AC_DEFINE(HAVE_HYPOTL)
++#       AC_DEFINE(HAVE_ISINFL)
++#       AC_DEFINE(HAVE_ISNANL)
++#       AC_DEFINE(HAVE_LOGL)
++#       AC_DEFINE(HAVE_LOG10L)
++#       AC_DEFINE(HAVE_MODFL)
++#       AC_DEFINE(HAVE_POWL)
++#       AC_DEFINE(HAVE_SINL)
++#       AC_DEFINE(HAVE_SINHL)
++#       AC_DEFINE(HAVE_SINCOSL)
++#       AC_DEFINE(HAVE_SQRTL)
++#       AC_DEFINE(HAVE_TANL)
++#       AC_DEFINE(HAVE_TANHL)
++    fi
++    ;;
+   *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+     AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+       machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -136,7 +229,7 @@
+     AC_DEFINE(HAVE_INT64_T)
+     case "$target" in
+       *-uclinux*)
+-        # Don't enable LFS with uClibc
++        # Don't enable LFS with uClinux
+         ;;
+       *)
+         AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.0-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.0/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.0-dist/libstdc++-v3/include/c_compatibility/wchar.h	2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/include/c_compatibility/wchar.h	2004-08-12 17:14:36.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if __GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+ 
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.0-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.0/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.0-dist/libstdc++-v3/include/c_std/std_cwchar.h	2003-12-08 21:44:35.000000000 -0600
++++ gcc-3.4.0/libstdc++-v3/include/c_std/std_cwchar.h	2004-08-12 17:08:19.000000000 -0500
+@@ -179,7 +179,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
diff --git a/openwrt/toolchain/gcc/3.4.0/arm-softfloat.patch.conditional b/openwrt/toolchain/gcc/3.4.0/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..f53d64b374
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.0/arm-softfloat.patch.conditional
@@ -0,0 +1,256 @@
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here: 
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant.  His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp.  The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option.  If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+#   software floating point, using the VFP format.  The produced object file
+#   should have these flags in its header:
+#
+#     private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+#   which always uses the FPA format.  Object file header flags should be:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+#   using the FPA format.  This is done for compatibility reasons with many
+#   existing distributions.  Object file header flags should be:
+#
+#     private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line.  This
+# is probably the reason Robert Schwebel modified it to:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+#   software floating point instructions, but *nothing* is passed to the
+#   assembler, which results in an object file which has flags:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+#   This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+#   point instructions, and passes "-mfpu=fpa" to the assembler, which results
+#   in an object file which has the same flags as in the previous item, but now
+#   those *are* correct.
+#    
+# * If you compile with -msoft-float, the compiler generates software floating
+#   point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+#   order) to the assembler, which results in an object file with flags:
+#
+#   private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+#   This is not correct, because the last "-mfpu=" option on the assembler
+#   command line determines the actual FPU convention used (which should be FPA
+#   in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour.  Every
+# instance of the notation:
+#
+#   %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+#   %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+# 
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+#   be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+#   macros I could find.  I think that if you compile without any options, you
+#   would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+#   anymore.  (The required functions are now in libgcc.)
+
+diff -urNd gcc-3.4.0-orig/gcc/config/arm/coff.h gcc-3.4.0/gcc/config/arm/coff.h
+--- gcc-3.4.0-orig/gcc/config/arm/coff.h	2004-02-24 15:25:22.000000000 +0100
++++ gcc-3.4.0/gcc/config/arm/coff.h	2004-05-01 19:07:06.059409600 +0200
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+ 
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+ 
+ /* This is COFF, but prefer stabs.  */
+diff -urNd gcc-3.4.0-orig/gcc/config/arm/elf.h gcc-3.4.0/gcc/config/arm/elf.h
+--- gcc-3.4.0-orig/gcc/config/arm/elf.h	2004-02-24 15:25:22.000000000 +0100
++++ gcc-3.4.0/gcc/config/arm/elf.h	2004-05-01 19:12:16.976486400 +0200
+@@ -46,7 +46,9 @@
+ 
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+ 
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+ 
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+ 
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urNd gcc-3.4.0-orig/gcc/config/arm/linux-elf.h gcc-3.4.0/gcc/config/arm/linux-elf.h
+--- gcc-3.4.0-orig/gcc/config/arm/linux-elf.h	2004-01-31 07:18:11.000000000 +0100
++++ gcc-3.4.0/gcc/config/arm/linux-elf.h	2004-05-01 19:19:06.935979200 +0200
+@@ -30,9 +30,27 @@
+ /* Do not assume anything about header files.  */
+ #define NO_IMPLICIT_EXTERN_C
+ 
+-/* Default is to use APCS-32 mode.  */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float 
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
++
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_APCS_32	\
++	| ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_MMU_TRAPS )
++
++#undef  SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+@@ -40,7 +58,7 @@
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -55,7 +73,7 @@
+    %{shared:-lc} \
+    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+ 
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+ 
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urNd gcc-3.4.0-orig/gcc/config/arm/t-linux gcc-3.4.0/gcc/config/arm/t-linux
+--- gcc-3.4.0-orig/gcc/config/arm/t-linux	2003-09-20 23:09:07.000000000 +0200
++++ gcc-3.4.0/gcc/config/arm/t-linux	2004-05-01 20:31:59.102846400 +0200
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+ 
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++	_fixsfsi _fixunssfsi
+ 
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urNd gcc-3.4.0-orig/gcc/config/arm/unknown-elf.h gcc-3.4.0/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.0-orig/gcc/config/arm/unknown-elf.h	2004-02-24 15:25:22.000000000 +0100
++++ gcc-3.4.0/gcc/config/arm/unknown-elf.h	2004-05-01 19:09:09.016212800 +0200
+@@ -30,7 +30,12 @@
+ 
+ /* Default to using APCS-32 and software floating point.  */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ /* Now we define the strings used to build the spec file.  */
+diff -urNd gcc-3.4.0-orig/gcc/config/arm/xscale-elf.h gcc-3.4.0/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.0-orig/gcc/config/arm/xscale-elf.h	2003-07-02 01:26:43.000000000 +0200
++++ gcc-3.4.0/gcc/config/arm/xscale-elf.h	2004-05-01 20:15:36.620105600 +0200
+@@ -49,11 +49,12 @@
+ 		     endian, regardless of the endian-ness of the memory
+ 		     system.  */
+ 		     
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+-  %{mhard-float:-mfpu=fpa} \
+-  %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++  { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/openwrt/toolchain/gcc/3.4.1/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.4.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..28449e7c82
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.1/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.1-dist/boehm-gc/configure gcc-3.4.1/boehm-gc/configure
+--- gcc-3.4.1-dist/boehm-gc/configure	2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure	2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.1-dist/boehm-gc/ltconfig gcc-3.4.1/boehm-gc/ltconfig
+--- gcc-3.4.1-dist/boehm-gc/ltconfig	2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig	2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+   fi
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++  file_magic_cmd=/usr/bin/file
++  file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   version_type=sunos
+   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-12 15:54:42.000000000 -0500
+@@ -81,6 +81,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+ 
+diff -urN gcc-3.4.1-dist/gcc/config/cris/linux.h gcc-3.4.1/gcc/config/cris/linux.h
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h	2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -93,6 +112,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.1/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.1-dist/gcc/config/i386/linux.h gcc-3.4.1/gcc/config/i386/linux.h
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h	2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -118,6 +118,15 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ 	%{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -126,6 +135,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.1-dist/gcc/config/mips/linux.h gcc-3.4.1/gcc/config/mips/linux.h
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h	2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -109,6 +109,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -118,6 +129,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/linux.h gcc-3.4.1/gcc/config/rs6000/linux.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h	2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+   "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h gcc-3.4.1/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h	2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h	2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+   mcall-linux  : %(link_os_linux)       ; \
+   mcall-gnu    : %(link_os_gnu)         ; \
+   mcall-netbsd : %(link_os_netbsd)      ; \
++  mcall-linux-uclibc : %(link_os_linux_uclibc); \
+   mcall-openbsd: %(link_os_openbsd)     ; \
+                : %(link_os_default)     }"
+ 
+@@ -1124,6 +1125,10 @@
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1290,6 +1295,7 @@
+   { "link_os_sim",		LINK_OS_SIM_SPEC },			\
+   { "link_os_freebsd",		LINK_OS_FREEBSD_SPEC },			\
+   { "link_os_linux",		LINK_OS_LINUX_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_gnu",		LINK_OS_GNU_SPEC },			\
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_openbsd",		LINK_OS_OPENBSD_SPEC },			\
+diff -urN gcc-3.4.1-dist/gcc/config/sh/linux.h gcc-3.4.1/gcc/config/sh/linux.h
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h	2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.1/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.1/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-sh64-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.1-dist/gcc/config/t-linux-uclibc gcc-3.4.1/gcc/config/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-04-21 10:12:35.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-12 15:59:46.000000000 -0500
+@@ -664,6 +664,12 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ 	gnu_ld=yes
+ 	gas=yes
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case ${target} in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case ${target} in
+@@ -1764,6 +1789,10 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ 	;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+-	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ 	case ${target} in
+ 	sh*be-*-* | sh*eb-*-*) ;;
+ 	*)
+@@ -1924,9 +1953,17 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case ${target} in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	case ${target} in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.1-dist/libtool.m4 gcc-3.4.1/libtool.m4
+--- gcc-3.4.1-dist/libtool.m4	2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4	2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.1-dist/ltconfig gcc-3.4.1/ltconfig
+--- gcc-3.4.1-dist/ltconfig	2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig	2004-08-12 15:55:48.000000000 -0500
+@@ -602,6 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1262,6 +1263,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.4.1/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.4.1/200-uclibc-locale.patch
new file mode 100644
index 0000000000..51cd7fc2e1
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.1/200-uclibc-locale.patch
@@ -0,0 +1,3241 @@
+diff -urN gcc-3.4.1-dist/libstdc++-v3/acinclude.m4 gcc-3.4.1/libstdc++-v3/acinclude.m4
+--- gcc-3.4.1-dist/libstdc++-v3/acinclude.m4	2004-05-14 05:53:11.000000000 -0500
++++ gcc-3.4.1/libstdc++-v3/acinclude.m4	2004-08-12 15:54:48.000000000 -0500
+@@ -996,7 +996,7 @@
+   AC_MSG_CHECKING([for C locale to use])
+   GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+     [use MODEL for target locale package],
+-    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+   
+   # If they didn't use this option switch, or if they specified --enable
+   # with no specific model, we'll have to look for one.  If they
+@@ -1012,6 +1012,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++        enable_clocale_flag=uclibc
++        ;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1138,6 +1141,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.1-dist/libstdc++-v3/aclocal.m4 gcc-3.4.1/libstdc++-v3/aclocal.m4
+--- gcc-3.4.1-dist/libstdc++-v3/aclocal.m4	2004-05-15 15:43:59.000000000 -0500
++++ gcc-3.4.1/libstdc++-v3/aclocal.m4	2004-08-12 16:14:37.000000000 -0500
+@@ -1025,6 +1025,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1151,6 +1154,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.1/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno>  // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c)        NULL
++#define __freelocale(a)             ((void)0)
++#define __duplocale(a)              __c_locale()
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++			      "name not valid"));
++      }
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++    if (_S_get_c_locale() != __cloc)
++      __freelocale(__cloc); 
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++  { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES", 
++#if _GLIBCXX_NUM_CATEGORIES != 0
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}
++
++namespace std
++{
++  const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++}  // namespace std
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.1/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,119 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring>              // get std::strlen
++#include <cstdio>               // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++ 
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec = -1)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec = -1)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = std::setlocale(LC_ALL, NULL);
++      char* __sav = new char[std::strlen(__old) + 1];
++      std::strcpy(__sav, __old);
++      std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      int __ret;
++      if (__prec >= 0)
++        __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++      else
++        __ret = std::snprintf(__out, __size, __fmt, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      std::setlocale(LC_ALL, __sav);
++      delete [] __sav;
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++    // in case we fall back to wcrtomb and then continue, in a loop.
++    // NB: wcsnrtombs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++						      __from_end - __from_next);
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++					 __from_chunk_end - __from_next,
++					 __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // wcrtomb.
++	    for (; __from < __from_next; ++__from)
++	      __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++	    __state = __tmp_state;
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    extern_type __buf[MB_LEN_MAX];
++	    __tmp_state = __state;
++	    const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++	    if (__conv > static_cast<size_t>(__to_end - __to_next))
++	      __ret = partial;
++	    else
++	      {
++		memcpy(__to_next, __buf, __conv);
++		__state = __tmp_state;
++		__to_next += __conv;
++		++__from_next;
++	      }
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we store a L'\0' and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++								  __from_end
++								  - __from_next));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++				   __from_chunk_end - __from_next,
++				   __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (;; ++__to_next, __from += __conv)
++	      {
++		__conv = mbrtowc(__to_next, __from, __from_end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __from_next = __from;
++	    __state = __tmp_state;	    
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    // It is unclear what to return in this case (see DR 382). 
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    if (__to_next < __to_end)
++	      {
++		// XXX Probably wrong for stateful encodings
++		__tmp_state = __state;		
++		++__from_next;
++		*__to_next++ = L'\0';
++	      }
++	    else
++	      __ret = partial;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_encoding() const throw()
++  {
++    // XXX This implementation assumes that the encoding is
++    // stateless and is either single-byte or variable-width.
++    int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    if (MB_CUR_MAX == 1)
++      __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }  
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_max_length() const throw()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    // XXX Probably wrong for stateful encodings.
++    int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++  
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_length(state_type& __state, const extern_type* __from,
++	    const extern_type* __end, size_t __max) const
++  {
++    int __ret = 0;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we advance past it and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++  
++    // A dummy internal buffer is needed in order for mbsnrtocws to consider
++    // its fourth parameter (it wouldn't with NULL as first parameter).
++    wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) 
++							   * __max));
++    while (__from < __end && __max)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++								  __end
++								  - __from));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __end;
++
++	const extern_type* __tmp_from = __from;
++	size_t __conv = mbsnrtowcs(__to, &__from,
++				   __from_chunk_end - __from,
++				   __max, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (__from = __tmp_from;; __from += __conv)
++	      {
++		__conv = mbrtowc(NULL, __from, __end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __state = __tmp_state;
++	    __ret += __from - __tmp_from;
++	    break;
++	  }
++	if (!__from)
++	  __from = __from_chunk_end;
++	
++	__ret += __from - __tmp_from;
++	__max -= __conv;
++
++	if (__from < __end && __max)
++	  {
++	    // XXX Probably wrong for stateful encodings
++	    __tmp_state = __state;
++	    ++__from;
++	    ++__ret;
++	    --__max;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 		
++      if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	{
++	  this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++	  this->_S_create_c_locale(this->_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++	  this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++	  this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      if (__m & _M_bit[__bitcur]
++	  && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++	{
++	  __ret = true;
++	  break;
++	}
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (; __lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++	    __m |= _M_bit[__bitcur];
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++    while (__lo < __hi)
++      {
++	*__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++	++__lo;
++	++__dest;
++      }
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  {
++    if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++      return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    if (_M_narrow_ok)
++      while (__lo < __hi)
++	{
++	  if (*__lo >= 0 && *__lo < 128)
++	    *__dest = _M_narrow[*__lo];
++	  else
++	    {
++	      const int __c = wctob(*__lo);
++	      *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	    }
++	  ++__lo;
++	  ++__dest;
++	}
++    else
++      while (__lo < __hi)
++	{
++	  const int __c = wctob(*__lo);
++	  *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	  ++__lo;
++	  ++__dest;
++	}
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  void
++  ctype<wchar_t>::_M_initialize_ctype()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wint_t __i;
++    for (__i = 0; __i < 128; ++__i)
++      {
++	const int __c = wctob(__i);
++	if (__c == EOF)
++	  break;
++	else
++	  _M_narrow[__i] = static_cast<char>(__c);
++      }
++    if (__i == 128)
++      _M_narrow_ok = true;
++    else
++      _M_narrow_ok = false;
++    for (size_t __j = 0;
++	 __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++      _M_widen[__j] = btowc(__j);
++
++    for (size_t __k = 0; __k <= 11; ++__k)
++      { 
++	_M_bit[__k] = static_cast<mask>(_ISbit(__k));
++	_M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++  }
++#endif //  _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++# ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.1/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), 
++     _M_name_messages(_S_get_c_name())
++     { }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, const char* __s, 
++				size_t __refs) 
++     : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++     _M_name_messages(__s)
++     {
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       _M_name_messages = __tmp;
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++      if (_M_name_messages != _S_get_c_name())
++	delete [] _M_name_messages;
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++       if (this->_M_name_messages != locale::facet::_S_get_c_name())
++	 delete [] this->_M_name_messages;
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       this->_M_name_messages = __tmp;
++
++       if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	 {
++	   this->_S_destroy_c_locale(this->_M_c_locale_messages);
++	   this->_S_create_c_locale(this->_M_c_locale_messages, __s); 
++	 }
++     }
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	__ret.field[0] = sign;
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[2] = space;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[1] = space;
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = sign;
++	    __ret.field[1] = symbol;	    
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;		
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	    else
++	      {
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = symbol;
++	    __ret.field[1] = sign;
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	    else
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, 
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == true
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, false>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == false
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { delete _M_data; }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<wchar_t, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  try
++	    {
++	      mbstate_t __state;
++	      size_t __len = strlen(__cpossign);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++	      _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++	      _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++	      
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++	      _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++	  catch (...)
++	    {
++	      delete _M_data;
++	      _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++	      __throw_exception_again;
++	    } 
++	  
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++  void
++  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++						       const char*)
++#else
++                                                       const char* __name)
++#endif
++  {
++    if (!_M_data)
++      _M_data = new __moneypunct_cache<wchar_t, false>;
++
++    if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++          _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  try
++            {
++              mbstate_t __state;
++              size_t __len;
++              __len = strlen(__cpossign);
++              if (__len)
++                {
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++              _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++              _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++              _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++          catch (...)
++	    {
++	      delete _M_data;
++              _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++              __throw_exception_again;
++	    }
++
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++	                                                __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++	                                                __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++#endif
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-08-12 16:13:31.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++	    _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, 
++							__cloc));
++
++	  // Check for NULL, which implies no grouping.
++	  if (_M_data->_M_thousands_sep == '\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = "true";
++      _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = "false";
++      _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { delete _M_data; }
++   
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<wchar_t>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++	      _M_data->_M_atoms_out[__i] = btowc(uc);
++	    }
++
++	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++	      _M_data->_M_atoms_in[__j] = btowc(uc);
++	    }
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#endif
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++	  if (_M_data->_M_thousands_sep == L'\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = L"true";
++      _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = L"false";
++      _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.1/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,347 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = "%m/%d/%y";
++	  _M_data->_M_date_era_format = "%m/%d/%y";
++	  _M_data->_M_time_format = "%H:%M:%S";
++	  _M_data->_M_time_era_format = "%H:%M:%S";
++	  _M_data->_M_date_time_format = "";
++	  _M_data->_M_date_time_era_format = "";
++	  _M_data->_M_am = "AM";
++	  _M_data->_M_pm = "PM";
++	  _M_data->_M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = "Sunday";
++	  _M_data->_M_day2 = "Monday";
++	  _M_data->_M_day3 = "Tuesday";
++	  _M_data->_M_day4 = "Wednesday";
++	  _M_data->_M_day5 = "Thursday";
++	  _M_data->_M_day6 = "Friday";
++	  _M_data->_M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = "Sun";
++	  _M_data->_M_aday2 = "Mon";
++	  _M_data->_M_aday3 = "Tue";
++	  _M_data->_M_aday4 = "Wed";
++	  _M_data->_M_aday5 = "Thu";
++	  _M_data->_M_aday6 = "Fri";
++	  _M_data->_M_aday7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = "January";
++	  _M_data->_M_month02 = "February";
++	  _M_data->_M_month03 = "March";
++	  _M_data->_M_month04 = "April";
++	  _M_data->_M_month05 = "May";
++	  _M_data->_M_month06 = "June";
++	  _M_data->_M_month07 = "July";
++	  _M_data->_M_month08 = "August";
++	  _M_data->_M_month09 = "September";
++	  _M_data->_M_month10 = "October";
++	  _M_data->_M_month11 = "November";
++	  _M_data->_M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = "Jan";
++	  _M_data->_M_amonth02 = "Feb";
++	  _M_data->_M_amonth03 = "Mar";
++	  _M_data->_M_amonth04 = "Apr";
++	  _M_data->_M_amonth05 = "May";
++	  _M_data->_M_amonth06 = "Jun";
++	  _M_data->_M_amonth07 = "Jul";
++	  _M_data->_M_amonth08 = "Aug";
++	  _M_data->_M_amonth09 = "Sep";
++	  _M_data->_M_amonth10 = "Oct";
++	  _M_data->_M_amonth11 = "Nov";
++	  _M_data->_M_amonth12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = L"%m/%d/%y";
++	  _M_data->_M_date_era_format = L"%m/%d/%y";
++	  _M_data->_M_time_format = L"%H:%M:%S";
++	  _M_data->_M_time_era_format = L"%H:%M:%S";
++	  _M_data->_M_date_time_format = L"";
++	  _M_data->_M_date_time_era_format = L"";
++	  _M_data->_M_am = L"AM";
++	  _M_data->_M_pm = L"PM";
++	  _M_data->_M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = L"Sunday";
++	  _M_data->_M_day2 = L"Monday";
++	  _M_data->_M_day3 = L"Tuesday";
++	  _M_data->_M_day4 = L"Wednesday";
++	  _M_data->_M_day5 = L"Thursday";
++	  _M_data->_M_day6 = L"Friday";
++	  _M_data->_M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = L"Sun";
++	  _M_data->_M_aday2 = L"Mon";
++	  _M_data->_M_aday3 = L"Tue";
++	  _M_data->_M_aday4 = L"Wed";
++	  _M_data->_M_aday5 = L"Thu";
++	  _M_data->_M_aday6 = L"Fri";
++	  _M_data->_M_aday7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = L"January";
++	  _M_data->_M_month02 = L"February";
++	  _M_data->_M_month03 = L"March";
++	  _M_data->_M_month04 = L"April";
++	  _M_data->_M_month05 = L"May";
++	  _M_data->_M_month06 = L"June";
++	  _M_data->_M_month07 = L"July";
++	  _M_data->_M_month08 = L"August";
++	  _M_data->_M_month09 = L"September";
++	  _M_data->_M_month10 = L"October";
++	  _M_data->_M_month11 = L"November";
++	  _M_data->_M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = L"Jan";
++	  _M_data->_M_amonth02 = L"Feb";
++	  _M_data->_M_amonth03 = L"Mar";
++	  _M_data->_M_amonth04 = L"Apr";
++	  _M_data->_M_amonth05 = L"May";
++	  _M_data->_M_amonth06 = L"Jun";
++	  _M_data->_M_amonth07 = L"Jul";
++	  _M_data->_M_amonth08 = L"Aug";
++	  _M_data->_M_amonth09 = L"Sep";
++	  _M_data->_M_amonth10 = L"Oct";
++	  _M_data->_M_amonth11 = L"Nov";
++	  _M_data->_M_amonth12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.1/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/locale/uclibc/time_members.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) 
++    : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++				     size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(__s)
++    { 
++      char* __tmp = new char[std::strlen(__s) + 1];
++      std::strcpy(__tmp, __s);
++      _M_name_timepunct = __tmp;
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++      if (_M_name_timepunct != _S_get_c_name())
++	delete [] _M_name_timepunct;
++      delete _M_data; 
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.1/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++ 
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISalpha | _ISdigit | _ISpunct;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalpha | _ISdigit;
++  };
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.1/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/os/uclibc/ctype_inline.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.1/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { return __C_ctype_b; }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.1/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.1-dist/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/config/os/uclibc/os_defines.h	2004-08-12 15:54:48.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.1-dist/libstdc++-v3/configure gcc-3.4.1/libstdc++-v3/configure
+--- gcc-3.4.1-dist/libstdc++-v3/configure	2004-06-25 17:02:47.000000000 -0500
++++ gcc-3.4.1/libstdc++-v3/configure	2004-08-12 16:20:43.000000000 -0500
+@@ -3878,6 +3878,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_check_msgfmt="yes"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++  echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++  echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++
++
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.1-dist/libstdc++-v3/configure.host gcc-3.4.1/libstdc++-v3/configure.host
+--- gcc-3.4.1-dist/libstdc++-v3/configure.host	2004-03-18 11:36:12.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/configure.host	2004-08-12 15:54:48.000000000 -0500
+@@ -217,6 +217,12 @@
+     ;;
+ esac
+ 
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++  *-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
++esac
+ 
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+diff -urN gcc-3.4.1-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.1/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.1-dist/libstdc++-v3/crossconfig.m4	2004-06-10 12:12:14.000000000 -0500
++++ gcc-3.4.1/libstdc++-v3/crossconfig.m4	2004-08-12 15:54:48.000000000 -0500
+@@ -122,6 +122,99 @@
+ 	;;
+     esac
+     ;;
++  *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++      machine/endian.h machine/param.h sys/machine.h sys/types.h \
++      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    AC_SUBST(SECTION_FLAGS)
++    GLIBCXX_CHECK_LINKER_FEATURES
++    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++    GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++    # For LFS.
++    AC_DEFINE(HAVE_INT64_T)
++    case "$target" in
++      *-uclinux*)
++        # Don't enable LFS with uClinux
++        ;;
++      *)
++        AC_DEFINE(_GLIBCXX_USE_LFS)
++    esac
++
++    # For showmanyc_helper().
++    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++    GLIBCXX_CHECK_POLL
++    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++    # For xsputn_2().
++    AC_CHECK_HEADERS(sys/uio.h)
++    GLIBCXX_CHECK_WRITEV
++
++#     AC_DEFINE(HAVE_ACOSF)
++#     AC_DEFINE(HAVE_ASINF)
++#     AC_DEFINE(HAVE_ATANF)
++#     AC_DEFINE(HAVE_ATAN2F)
++    AC_DEFINE(HAVE_CEILF)
++    AC_DEFINE(HAVE_COPYSIGN)
++#     AC_DEFINE(HAVE_COPYSIGNF)
++#     AC_DEFINE(HAVE_COSF)
++#     AC_DEFINE(HAVE_COSHF)
++#     AC_DEFINE(HAVE_EXPF)
++#     AC_DEFINE(HAVE_FABSF)
++    AC_DEFINE(HAVE_FINITE)
++    AC_DEFINE(HAVE_FINITEF)
++    AC_DEFINE(HAVE_FLOORF)
++#     AC_DEFINE(HAVE_FMODF)
++#     AC_DEFINE(HAVE_FREXPF)
++    AC_DEFINE(HAVE_HYPOT)
++#     AC_DEFINE(HAVE_HYPOTF)
++    AC_DEFINE(HAVE_ISINF)
++    AC_DEFINE(HAVE_ISINFF)
++    AC_DEFINE(HAVE_ISNAN)
++    AC_DEFINE(HAVE_ISNANF)
++#     AC_DEFINE(HAVE_LOGF)
++#     AC_DEFINE(HAVE_LOG10F)
++#     AC_DEFINE(HAVE_MODFF)
++#     AC_DEFINE(HAVE_SINF)
++#     AC_DEFINE(HAVE_SINHF)
++#     AC_DEFINE(HAVE_SINCOS)
++#     AC_DEFINE(HAVE_SINCOSF)
++    AC_DEFINE(HAVE_SQRTF)
++#     AC_DEFINE(HAVE_TANF)
++#     AC_DEFINE(HAVE_TANHF)
++    if test x"long_double_math_on_this_cpu" = x"yes"; then
++      AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++#       AC_DEFINE(HAVE_ACOSL)
++#       AC_DEFINE(HAVE_ASINL)
++#       AC_DEFINE(HAVE_ATANL)
++#       AC_DEFINE(HAVE_ATAN2L)
++#       AC_DEFINE(HAVE_CEILL)
++#       AC_DEFINE(HAVE_COPYSIGNL)
++#       AC_DEFINE(HAVE_COSL)
++#       AC_DEFINE(HAVE_COSHL)
++#       AC_DEFINE(HAVE_EXPL)
++#       AC_DEFINE(HAVE_FABSL)
++#       AC_DEFINE(HAVE_FINITEL)
++#       AC_DEFINE(HAVE_FLOORL)
++#       AC_DEFINE(HAVE_FMODL)
++#       AC_DEFINE(HAVE_FREXPL)
++#       AC_DEFINE(HAVE_HYPOTL)
++#       AC_DEFINE(HAVE_ISINFL)
++#       AC_DEFINE(HAVE_ISNANL)
++#       AC_DEFINE(HAVE_LOGL)
++#       AC_DEFINE(HAVE_LOG10L)
++#       AC_DEFINE(HAVE_MODFL)
++#       AC_DEFINE(HAVE_POWL)
++#       AC_DEFINE(HAVE_SINL)
++#       AC_DEFINE(HAVE_SINHL)
++#       AC_DEFINE(HAVE_SINCOSL)
++#       AC_DEFINE(HAVE_SQRTL)
++#       AC_DEFINE(HAVE_TANL)
++#       AC_DEFINE(HAVE_TANHL)
++    fi
++    ;;
+   *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+     AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+       machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -136,7 +229,7 @@
+     AC_DEFINE(HAVE_INT64_T)
+     case "$target" in
+       *-uclinux*)
+-        # Don't enable LFS with uClibc
++        # Don't enable LFS with uClinux
+         ;;
+       *)
+         AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.1-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.1/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.1-dist/libstdc++-v3/include/c_compatibility/wchar.h	2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/include/c_compatibility/wchar.h	2004-08-12 16:14:07.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+ 
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.1-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.1/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.1-dist/libstdc++-v3/include/c_std/std_cwchar.h	2003-12-08 21:44:35.000000000 -0600
++++ gcc-3.4.1/libstdc++-v3/include/c_std/std_cwchar.h	2004-08-12 15:54:48.000000000 -0500
+@@ -179,7 +179,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
diff --git a/openwrt/toolchain/gcc/3.4.1/400-mips-delay-slot.patch b/openwrt/toolchain/gcc/3.4.1/400-mips-delay-slot.patch
new file mode 100644
index 0000000000..8111dba185
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.1/400-mips-delay-slot.patch
@@ -0,0 +1,46 @@
+http://www.linux-mips.org/archives/linux-mips/2004-09/msg00000.html
+
+Atsushi Nemoto <anemo@mba.ocn.ne.jp> writes:
+>/ Is this a get_user's problem or gcc's?/
+
+The latter.  gcc is putting the empty asm:
+
+        __asm__ ("":"=r" (__gu_val));
+
+into the delay slot of the call.
+
+Part of the problem is that gcc estimates the length of an asm to be the
+number of instruction separators + 1.  This means that it estimates the
+asm above to be one instruction long, which is perhaps a little silly
+for an empty string.
+
+But the real problem is that gcc should never trust this estimate anyway,
+since each "instruction" could obviously be a multi-instruction macro.
+gcc should certainly never put asms into delay slots.
+
+FWIW, I don't think the bug is specific to 3.3 or 3.4.  It could
+probably trigger for other gcc versions too.  It is highly dependent
+on scheduling though.
+
+The attached 3.4.x patch fixes the problem there, but if you want to work
+around it for old versions, just avoid using empty asms if you can,
+or make them volatile if you can't.
+
+Of course, the problem isn't confined to empty asms.  If you have an asm
+with a single, multi-instruction macro, gcc might try putting that in a
+delay slot too.  You should at least get an assembler warning in that case.
+
+Richard
+
+
+--- gcc-3.4.1/gcc/config/mips/mips.md-orig	2004-09-02 10:38:36.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/mips.md	2004-09-02 10:38:42.000000000 -0500
+@@ -251,7 +251,7 @@
+ 
+ ;; Can the instruction be put into a delay slot?
+ (define_attr "can_delay" "no,yes"
+-  (if_then_else (and (eq_attr "type" "!branch,call,jump")
++  (if_then_else (and (eq_attr "type" "!branch,call,jump,multi")
+ 		     (and (eq_attr "hazard" "none")
+ 			  (eq_attr "single_insn" "yes")))
+ 		(const_string "yes")
diff --git a/openwrt/toolchain/gcc/3.4.1/800-arm-bigendian.patch b/openwrt/toolchain/gcc/3.4.1/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.1/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files.  */
+ #define NO_IMPLICIT_EXTERN_C
+ 
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode.  */
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++		( ARM_FLAG_APCS_32 | \
++		  ARM_FLAG_MMU_TRAPS | \
++		  TARGET_ENDIAN_DEFAULT )
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -101,7 +118,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+ 
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ 	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	case $target in
++	arm*b-*)
++		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++		;;
++	esac
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
diff --git a/openwrt/toolchain/gcc/3.4.1/810-arm-bigendian-uclibc.patch b/openwrt/toolchain/gcc/3.4.1/810-arm-bigendian-uclibc.patch
new file mode 100644
index 0000000000..a4d87e2317
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.1/810-arm-bigendian-uclibc.patch
@@ -0,0 +1,27 @@
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-16 16:06:24.000000000 -0500
+@@ -107,7 +107,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-16 16:03:25.000000000 -0500
+@@ -666,6 +666,11 @@
+ 	;;
+ arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	case $target in
++	arm*b-*)
++		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++		;;
++	esac
+ 	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
diff --git a/openwrt/toolchain/gcc/3.4.1/arm-softfloat.patch.conditional b/openwrt/toolchain/gcc/3.4.1/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..19d1b90dac
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.1/arm-softfloat.patch.conditional
@@ -0,0 +1,270 @@
+Note... modified my mjn3 to not conflict with the big endian arm patch.
+Warning!!!  Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
+Also changed
+  #define SUBTARGET_EXTRA_ASM_SPEC "\
+  %{!mcpu=*:-mcpu=xscale} \
+  %{mhard-float:-mfpu=fpa} \
+  %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+to
+  #define SUBTARGET_EXTRA_ASM_SPEC "\
+  %{mhard-float:-mfpu=fpa} \
+  %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+in gcc/config/arm/linux-elf.h.
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here: 
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant.  His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp.  The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option.  If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+#   software floating point, using the VFP format.  The produced object file
+#   should have these flags in its header:
+#
+#     private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+#   which always uses the FPA format.  Object file header flags should be:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+#   using the FPA format.  This is done for compatibility reasons with many
+#   existing distributions.  Object file header flags should be:
+#
+#     private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line.  This
+# is probably the reason Robert Schwebel modified it to:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+#   software floating point instructions, but *nothing* is passed to the
+#   assembler, which results in an object file which has flags:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+#   This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+#   point instructions, and passes "-mfpu=fpa" to the assembler, which results
+#   in an object file which has the same flags as in the previous item, but now
+#   those *are* correct.
+#    
+# * If you compile with -msoft-float, the compiler generates software floating
+#   point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+#   order) to the assembler, which results in an object file with flags:
+#
+#   private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+#   This is not correct, because the last "-mfpu=" option on the assembler
+#   command line determines the actual FPU convention used (which should be FPA
+#   in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour.  Every
+# instance of the notation:
+#
+#   %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+#   %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+# 
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+#   be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+#   macros I could find.  I think that if you compile without any options, you
+#   would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+#   anymore.  (The required functions are now in libgcc.)
+
+diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
+--- gcc-3.4.1-old/gcc/config/arm/coff.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/coff.h	2004-09-02 21:51:15.000000000 -0500
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+ 
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+ 
+ /* This is COFF, but prefer stabs.  */
+diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
+--- gcc-3.4.1-old/gcc/config/arm/elf.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -46,7 +46,9 @@
+ 
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+ 
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+ 
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+ 
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h	2004-09-02 21:50:52.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-09-02 22:00:49.000000000 -0500
+@@ -44,12 +44,26 @@
+ #define TARGET_LINKER_EMULATION "armelf_linux"
+ #endif
+ 
+-/* Default is to use APCS-32 mode.  */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float 
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT \
+-		( ARM_FLAG_APCS_32 | \
+-		  ARM_FLAG_MMU_TRAPS | \
+-		  TARGET_ENDIAN_DEFAULT )
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_APCS_32	\
++	| ARM_FLAG_SOFT_FLOAT	\
++	| TARGET_ENDIAN_DEFAULT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_MMU_TRAPS )
++
++#undef  SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+@@ -57,7 +71,7 @@
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -72,7 +86,7 @@
+    %{shared:-lc} \
+    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+ 
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+ 
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
+--- gcc-3.4.1-old/gcc/config/arm/t-linux	2003-09-20 16:09:07.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/t-linux	2004-09-02 21:51:15.000000000 -0500
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+ 
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++	_fixsfsi _fixunssfsi
+ 
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/unknown-elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -30,7 +30,12 @@
+ 
+ /* Default to using APCS-32 and software floating point.  */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ /* Now we define the strings used to build the spec file.  */
+diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h	2003-07-01 18:26:43.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/xscale-elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -49,11 +49,12 @@
+ 		     endian, regardless of the endian-ness of the memory
+ 		     system.  */
+ 		     
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+-  %{mhard-float:-mfpu=fpa} \
+-  %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++  { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/openwrt/toolchain/gcc/3.4.2/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.4.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..29e4c802e2
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.1-dist/boehm-gc/configure gcc-3.4.1/boehm-gc/configure
+--- gcc-3.4.1-dist/boehm-gc/configure	2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure	2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.1-dist/boehm-gc/ltconfig gcc-3.4.1/boehm-gc/ltconfig
+--- gcc-3.4.1-dist/boehm-gc/ltconfig	2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig	2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+   fi
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++  file_magic_cmd=/usr/bin/file
++  file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   version_type=sunos
+   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-12 15:54:42.000000000 -0500
+@@ -81,6 +81,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+ 
+diff -urN gcc-3.4.1-dist/gcc/config/cris/linux.h gcc-3.4.1/gcc/config/cris/linux.h
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h	2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -93,6 +112,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.1/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.1-dist/gcc/config/i386/linux.h gcc-3.4.1/gcc/config/i386/linux.h
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h	2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -118,6 +118,15 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ 	%{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -126,6 +135,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.1-dist/gcc/config/mips/linux.h gcc-3.4.1/gcc/config/mips/linux.h
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h	2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -109,6 +109,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -118,6 +129,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/linux.h gcc-3.4.1/gcc/config/rs6000/linux.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h	2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+   "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h gcc-3.4.1/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h	2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h	2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+   mcall-linux  : %(link_os_linux)       ; \
+   mcall-gnu    : %(link_os_gnu)         ; \
+   mcall-netbsd : %(link_os_netbsd)      ; \
++  mcall-linux-uclibc : %(link_os_linux_uclibc); \
+   mcall-openbsd: %(link_os_openbsd)     ; \
+                : %(link_os_default)     }"
+ 
+@@ -1124,6 +1125,10 @@
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1290,6 +1295,7 @@
+   { "link_os_sim",		LINK_OS_SIM_SPEC },			\
+   { "link_os_freebsd",		LINK_OS_FREEBSD_SPEC },			\
+   { "link_os_linux",		LINK_OS_LINUX_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_gnu",		LINK_OS_GNU_SPEC },			\
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_openbsd",		LINK_OS_OPENBSD_SPEC },			\
+diff -urN gcc-3.4.1-dist/gcc/config/sh/linux.h gcc-3.4.1/gcc/config/sh/linux.h
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h	2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.1/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.1/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-sh64-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.1-dist/gcc/config/t-linux-uclibc gcc-3.4.1/gcc/config/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++#SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-04-21 10:12:35.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-12 15:59:46.000000000 -0500
+@@ -664,6 +664,12 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ 	gnu_ld=yes
+ 	gas=yes
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case ${target} in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case ${target} in
+@@ -1764,6 +1789,10 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ 	;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+-	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ 	case ${target} in
+ 	sh*be-*-* | sh*eb-*-*) ;;
+ 	*)
+@@ -1924,9 +1953,17 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case ${target} in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	case ${target} in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.1-dist/libtool.m4 gcc-3.4.1/libtool.m4
+--- gcc-3.4.1-dist/libtool.m4	2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4	2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.1-dist/ltconfig gcc-3.4.1/ltconfig
+--- gcc-3.4.1-dist/ltconfig	2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig	2004-08-12 15:55:48.000000000 -0500
+@@ -602,6 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1262,6 +1263,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.4.2/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.4.2/200-uclibc-locale.patch
new file mode 100644
index 0000000000..3fc4900b06
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 gcc-3.4.2/libstdc++-v3/acinclude.m4
+--- gcc-3.4.2-dist/libstdc++-v3/acinclude.m4	2004-07-15 12:42:45.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/acinclude.m4	2004-09-10 10:47:40.000000000 -0500
+@@ -996,7 +996,7 @@
+   AC_MSG_CHECKING([for C locale to use])
+   GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+     [use MODEL for target locale package],
+-    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+   
+   # If they didn't use this option switch, or if they specified --enable
+   # with no specific model, we'll have to look for one.  If they
+@@ -1012,6 +1012,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++        enable_clocale_flag=uclibc
++        ;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1138,6 +1141,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 gcc-3.4.2/libstdc++-v3/aclocal.m4
+--- gcc-3.4.2-dist/libstdc++-v3/aclocal.m4	2004-08-13 15:44:03.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/aclocal.m4	2004-09-10 10:47:40.000000000 -0500
+@@ -1025,6 +1025,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1151,6 +1154,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno>  // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c)        NULL
++#define __freelocale(a)             ((void)0)
++#define __duplocale(a)              __c_locale()
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++			      "name not valid"));
++      }
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++    if (_S_get_c_locale() != __cloc)
++      __freelocale(__cloc); 
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++  { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES", 
++#if _GLIBCXX_NUM_CATEGORIES != 0
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}
++
++namespace std
++{
++  const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++}  // namespace std
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-09-10 10:48:08.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring>              // get std::strlen
++#include <cstdio>               // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++ 
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = std::setlocale(LC_ALL, NULL);
++      char* __sav = new char[std::strlen(__old) + 1];
++      std::strcpy(__sav, __old);
++      std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      std::setlocale(LC_ALL, __sav);
++      delete [] __sav;
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++    // in case we fall back to wcrtomb and then continue, in a loop.
++    // NB: wcsnrtombs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++						      __from_end - __from_next);
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++					 __from_chunk_end - __from_next,
++					 __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // wcrtomb.
++	    for (; __from < __from_next; ++__from)
++	      __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++	    __state = __tmp_state;
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    extern_type __buf[MB_LEN_MAX];
++	    __tmp_state = __state;
++	    const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++	    if (__conv > static_cast<size_t>(__to_end - __to_next))
++	      __ret = partial;
++	    else
++	      {
++		memcpy(__to_next, __buf, __conv);
++		__state = __tmp_state;
++		__to_next += __conv;
++		++__from_next;
++	      }
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we store a L'\0' and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++								  __from_end
++								  - __from_next));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++				   __from_chunk_end - __from_next,
++				   __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (;; ++__to_next, __from += __conv)
++	      {
++		__conv = mbrtowc(__to_next, __from, __from_end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __from_next = __from;
++	    __state = __tmp_state;	    
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    // It is unclear what to return in this case (see DR 382). 
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    if (__to_next < __to_end)
++	      {
++		// XXX Probably wrong for stateful encodings
++		__tmp_state = __state;		
++		++__from_next;
++		*__to_next++ = L'\0';
++	      }
++	    else
++	      __ret = partial;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_encoding() const throw()
++  {
++    // XXX This implementation assumes that the encoding is
++    // stateless and is either single-byte or variable-width.
++    int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    if (MB_CUR_MAX == 1)
++      __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }  
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_max_length() const throw()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    // XXX Probably wrong for stateful encodings.
++    int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++  
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_length(state_type& __state, const extern_type* __from,
++	    const extern_type* __end, size_t __max) const
++  {
++    int __ret = 0;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we advance past it and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++  
++    // A dummy internal buffer is needed in order for mbsnrtocws to consider
++    // its fourth parameter (it wouldn't with NULL as first parameter).
++    wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) 
++							   * __max));
++    while (__from < __end && __max)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++								  __end
++								  - __from));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __end;
++
++	const extern_type* __tmp_from = __from;
++	size_t __conv = mbsnrtowcs(__to, &__from,
++				   __from_chunk_end - __from,
++				   __max, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (__from = __tmp_from;; __from += __conv)
++	      {
++		__conv = mbrtowc(NULL, __from, __end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __state = __tmp_state;
++	    __ret += __from - __tmp_from;
++	    break;
++	  }
++	if (!__from)
++	  __from = __from_chunk_end;
++	
++	__ret += __from - __tmp_from;
++	__max -= __conv;
++
++	if (__from < __end && __max)
++	  {
++	    // XXX Probably wrong for stateful encodings
++	    __tmp_state = __state;
++	    ++__from;
++	    ++__ret;
++	    --__max;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 		
++      if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	{
++	  this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++	  this->_S_create_c_locale(this->_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++	  this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++	  this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      if (__m & _M_bit[__bitcur]
++	  && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++	{
++	  __ret = true;
++	  break;
++	}
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (; __lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++	    __m |= _M_bit[__bitcur];
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++    while (__lo < __hi)
++      {
++	*__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++	++__lo;
++	++__dest;
++      }
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  {
++    if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++      return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    if (_M_narrow_ok)
++      while (__lo < __hi)
++	{
++	  if (*__lo >= 0 && *__lo < 128)
++	    *__dest = _M_narrow[*__lo];
++	  else
++	    {
++	      const int __c = wctob(*__lo);
++	      *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	    }
++	  ++__lo;
++	  ++__dest;
++	}
++    else
++      while (__lo < __hi)
++	{
++	  const int __c = wctob(*__lo);
++	  *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	  ++__lo;
++	  ++__dest;
++	}
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  void
++  ctype<wchar_t>::_M_initialize_ctype()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wint_t __i;
++    for (__i = 0; __i < 128; ++__i)
++      {
++	const int __c = wctob(__i);
++	if (__c == EOF)
++	  break;
++	else
++	  _M_narrow[__i] = static_cast<char>(__c);
++      }
++    if (__i == 128)
++      _M_narrow_ok = true;
++    else
++      _M_narrow_ok = false;
++    for (size_t __j = 0;
++	 __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++      _M_widen[__j] = btowc(__j);
++
++    for (size_t __k = 0; __k <= 11; ++__k)
++      { 
++	_M_bit[__k] = static_cast<mask>(_ISbit(__k));
++	_M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++  }
++#endif //  _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++# ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), 
++     _M_name_messages(_S_get_c_name())
++     { }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, const char* __s, 
++				size_t __refs) 
++     : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++     _M_name_messages(__s)
++     {
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       _M_name_messages = __tmp;
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++      if (_M_name_messages != _S_get_c_name())
++	delete [] _M_name_messages;
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++       if (this->_M_name_messages != locale::facet::_S_get_c_name())
++	 delete [] this->_M_name_messages;
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       this->_M_name_messages = __tmp;
++
++       if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	 {
++	   this->_S_destroy_c_locale(this->_M_c_locale_messages);
++	   this->_S_create_c_locale(this->_M_c_locale_messages, __s); 
++	 }
++     }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	__ret.field[0] = sign;
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[2] = space;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[1] = space;
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = sign;
++	    __ret.field[1] = symbol;	    
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;		
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	    else
++	      {
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = symbol;
++	    __ret.field[1] = sign;
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	    else
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, 
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == true
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, false>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == false
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { delete _M_data; }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<wchar_t, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  try
++	    {
++	      mbstate_t __state;
++	      size_t __len = strlen(__cpossign);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++	      _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++	      _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++	      
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++	      _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++	  catch (...)
++	    {
++	      delete _M_data;
++	      _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++	      __throw_exception_again;
++	    } 
++	  
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++  void
++  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++						       const char*)
++#else
++                                                       const char* __name)
++#endif
++  {
++    if (!_M_data)
++      _M_data = new __moneypunct_cache<wchar_t, false>;
++
++    if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++          _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  try
++            {
++              mbstate_t __state;
++              size_t __len;
++              __len = strlen(__cpossign);
++              if (__len)
++                {
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++              _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++              _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++              _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++          catch (...)
++	    {
++	      delete _M_data;
++              _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++              __throw_exception_again;
++	    }
++
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++	                                                __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++	                                                __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++	    _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, 
++							__cloc));
++
++	  // Check for NULL, which implies no grouping.
++	  if (_M_data->_M_thousands_sep == '\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = "true";
++      _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = "false";
++      _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { delete _M_data; }
++   
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<wchar_t>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++	      _M_data->_M_atoms_out[__i] = btowc(uc);
++	    }
++
++	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++	      _M_data->_M_atoms_in[__j] = btowc(uc);
++	    }
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#endif
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++	  if (_M_data->_M_thousands_sep == L'\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = L"true";
++      _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = L"false";
++      _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-09-10 10:48:00.000000000 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++					_M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      const size_t __len = strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++      // Make sure __s is null terminated.
++      if (__len == 0)
++	__s[0] = '\0';
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = "%m/%d/%y";
++	  _M_data->_M_date_era_format = "%m/%d/%y";
++	  _M_data->_M_time_format = "%H:%M:%S";
++	  _M_data->_M_time_era_format = "%H:%M:%S";
++	  _M_data->_M_date_time_format = "";
++	  _M_data->_M_date_time_era_format = "";
++	  _M_data->_M_am = "AM";
++	  _M_data->_M_pm = "PM";
++	  _M_data->_M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = "Sunday";
++	  _M_data->_M_day2 = "Monday";
++	  _M_data->_M_day3 = "Tuesday";
++	  _M_data->_M_day4 = "Wednesday";
++	  _M_data->_M_day5 = "Thursday";
++	  _M_data->_M_day6 = "Friday";
++	  _M_data->_M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = "Sun";
++	  _M_data->_M_aday2 = "Mon";
++	  _M_data->_M_aday3 = "Tue";
++	  _M_data->_M_aday4 = "Wed";
++	  _M_data->_M_aday5 = "Thu";
++	  _M_data->_M_aday6 = "Fri";
++	  _M_data->_M_aday7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = "January";
++	  _M_data->_M_month02 = "February";
++	  _M_data->_M_month03 = "March";
++	  _M_data->_M_month04 = "April";
++	  _M_data->_M_month05 = "May";
++	  _M_data->_M_month06 = "June";
++	  _M_data->_M_month07 = "July";
++	  _M_data->_M_month08 = "August";
++	  _M_data->_M_month09 = "September";
++	  _M_data->_M_month10 = "October";
++	  _M_data->_M_month11 = "November";
++	  _M_data->_M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = "Jan";
++	  _M_data->_M_amonth02 = "Feb";
++	  _M_data->_M_amonth03 = "Mar";
++	  _M_data->_M_amonth04 = "Apr";
++	  _M_data->_M_amonth05 = "May";
++	  _M_data->_M_amonth06 = "Jun";
++	  _M_data->_M_amonth07 = "Jul";
++	  _M_data->_M_amonth08 = "Aug";
++	  _M_data->_M_amonth09 = "Sep";
++	  _M_data->_M_amonth10 = "Oct";
++	  _M_data->_M_amonth11 = "Nov";
++	  _M_data->_M_amonth12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++      const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++					_M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++      // Make sure __s is null terminated.
++      if (__len == 0)
++	__s[0] = L'\0';
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = L"%m/%d/%y";
++	  _M_data->_M_date_era_format = L"%m/%d/%y";
++	  _M_data->_M_time_format = L"%H:%M:%S";
++	  _M_data->_M_time_era_format = L"%H:%M:%S";
++	  _M_data->_M_date_time_format = L"";
++	  _M_data->_M_date_time_era_format = L"";
++	  _M_data->_M_am = L"AM";
++	  _M_data->_M_pm = L"PM";
++	  _M_data->_M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = L"Sunday";
++	  _M_data->_M_day2 = L"Monday";
++	  _M_data->_M_day3 = L"Tuesday";
++	  _M_data->_M_day4 = L"Wednesday";
++	  _M_data->_M_day5 = L"Thursday";
++	  _M_data->_M_day6 = L"Friday";
++	  _M_data->_M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = L"Sun";
++	  _M_data->_M_aday2 = L"Mon";
++	  _M_data->_M_aday3 = L"Tue";
++	  _M_data->_M_aday4 = L"Wed";
++	  _M_data->_M_aday5 = L"Thu";
++	  _M_data->_M_aday6 = L"Fri";
++	  _M_data->_M_aday7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = L"January";
++	  _M_data->_M_month02 = L"February";
++	  _M_data->_M_month03 = L"March";
++	  _M_data->_M_month04 = L"April";
++	  _M_data->_M_month05 = L"May";
++	  _M_data->_M_month06 = L"June";
++	  _M_data->_M_month07 = L"July";
++	  _M_data->_M_month08 = L"August";
++	  _M_data->_M_month09 = L"September";
++	  _M_data->_M_month10 = L"October";
++	  _M_data->_M_month11 = L"November";
++	  _M_data->_M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = L"Jan";
++	  _M_data->_M_amonth02 = L"Feb";
++	  _M_data->_M_amonth03 = L"Mar";
++	  _M_data->_M_amonth04 = L"Apr";
++	  _M_data->_M_amonth05 = L"May";
++	  _M_data->_M_amonth06 = L"Jun";
++	  _M_data->_M_amonth07 = L"Jul";
++	  _M_data->_M_amonth08 = L"Aug";
++	  _M_data->_M_amonth09 = L"Sep";
++	  _M_data->_M_amonth10 = L"Oct";
++	  _M_data->_M_amonth11 = L"Nov";
++	  _M_data->_M_amonth12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) 
++    : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++				     size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(__s)
++    { 
++      char* __tmp = new char[std::strlen(__s) + 1];
++      std::strcpy(__tmp, __s);
++      _M_name_timepunct = __tmp;
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++      if (_M_name_timepunct != _S_get_c_name())
++	delete [] _M_name_timepunct;
++      delete _M_data; 
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++ 
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISalpha | _ISdigit | _ISpunct;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalpha | _ISdigit;
++  };
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { return __C_ctype_b; }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure gcc-3.4.2/libstdc++-v3/configure
+--- gcc-3.4.2-dist/libstdc++-v3/configure	2004-08-13 15:44:04.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure	2004-09-10 10:47:40.000000000 -0500
+@@ -3878,6 +3878,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_check_msgfmt="yes"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++  echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++  echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++
++
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure.host gcc-3.4.2/libstdc++-v3/configure.host
+--- gcc-3.4.2-dist/libstdc++-v3/configure.host	2004-08-27 14:52:30.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure.host	2004-09-10 10:47:40.000000000 -0500
+@@ -217,6 +217,12 @@
+     ;;
+ esac
+ 
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++  *-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
++esac
+ 
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+diff -urN gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.2/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4	2004-07-06 20:23:49.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/crossconfig.m4	2004-09-10 10:47:40.000000000 -0500
+@@ -138,6 +138,99 @@
+ 	;;
+     esac
+     ;;
++  *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++      machine/endian.h machine/param.h sys/machine.h sys/types.h \
++      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    AC_SUBST(SECTION_FLAGS)
++    GLIBCXX_CHECK_LINKER_FEATURES
++    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++    GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++    # For LFS.
++    AC_DEFINE(HAVE_INT64_T)
++    case "$target" in
++      *-uclinux*)
++        # Don't enable LFS with uClinux
++        ;;
++      *)
++        AC_DEFINE(_GLIBCXX_USE_LFS)
++    esac
++
++    # For showmanyc_helper().
++    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++    GLIBCXX_CHECK_POLL
++    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++    # For xsputn_2().
++    AC_CHECK_HEADERS(sys/uio.h)
++    GLIBCXX_CHECK_WRITEV
++
++#     AC_DEFINE(HAVE_ACOSF)
++#     AC_DEFINE(HAVE_ASINF)
++#     AC_DEFINE(HAVE_ATANF)
++#     AC_DEFINE(HAVE_ATAN2F)
++    AC_DEFINE(HAVE_CEILF)
++    AC_DEFINE(HAVE_COPYSIGN)
++#     AC_DEFINE(HAVE_COPYSIGNF)
++#     AC_DEFINE(HAVE_COSF)
++#     AC_DEFINE(HAVE_COSHF)
++#     AC_DEFINE(HAVE_EXPF)
++#     AC_DEFINE(HAVE_FABSF)
++    AC_DEFINE(HAVE_FINITE)
++    AC_DEFINE(HAVE_FINITEF)
++    AC_DEFINE(HAVE_FLOORF)
++#     AC_DEFINE(HAVE_FMODF)
++#     AC_DEFINE(HAVE_FREXPF)
++    AC_DEFINE(HAVE_HYPOT)
++#     AC_DEFINE(HAVE_HYPOTF)
++    AC_DEFINE(HAVE_ISINF)
++    AC_DEFINE(HAVE_ISINFF)
++    AC_DEFINE(HAVE_ISNAN)
++    AC_DEFINE(HAVE_ISNANF)
++#     AC_DEFINE(HAVE_LOGF)
++#     AC_DEFINE(HAVE_LOG10F)
++#     AC_DEFINE(HAVE_MODFF)
++#     AC_DEFINE(HAVE_SINF)
++#     AC_DEFINE(HAVE_SINHF)
++#     AC_DEFINE(HAVE_SINCOS)
++#     AC_DEFINE(HAVE_SINCOSF)
++    AC_DEFINE(HAVE_SQRTF)
++#     AC_DEFINE(HAVE_TANF)
++#     AC_DEFINE(HAVE_TANHF)
++    if test x"long_double_math_on_this_cpu" = x"yes"; then
++      AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++#       AC_DEFINE(HAVE_ACOSL)
++#       AC_DEFINE(HAVE_ASINL)
++#       AC_DEFINE(HAVE_ATANL)
++#       AC_DEFINE(HAVE_ATAN2L)
++#       AC_DEFINE(HAVE_CEILL)
++#       AC_DEFINE(HAVE_COPYSIGNL)
++#       AC_DEFINE(HAVE_COSL)
++#       AC_DEFINE(HAVE_COSHL)
++#       AC_DEFINE(HAVE_EXPL)
++#       AC_DEFINE(HAVE_FABSL)
++#       AC_DEFINE(HAVE_FINITEL)
++#       AC_DEFINE(HAVE_FLOORL)
++#       AC_DEFINE(HAVE_FMODL)
++#       AC_DEFINE(HAVE_FREXPL)
++#       AC_DEFINE(HAVE_HYPOTL)
++#       AC_DEFINE(HAVE_ISINFL)
++#       AC_DEFINE(HAVE_ISNANL)
++#       AC_DEFINE(HAVE_LOGL)
++#       AC_DEFINE(HAVE_LOG10L)
++#       AC_DEFINE(HAVE_MODFL)
++#       AC_DEFINE(HAVE_POWL)
++#       AC_DEFINE(HAVE_SINL)
++#       AC_DEFINE(HAVE_SINHL)
++#       AC_DEFINE(HAVE_SINCOSL)
++#       AC_DEFINE(HAVE_SQRTL)
++#       AC_DEFINE(HAVE_TANL)
++#       AC_DEFINE(HAVE_TANHL)
++    fi
++    ;;
+   *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+     AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+       machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -152,7 +245,7 @@
+     AC_DEFINE(HAVE_INT64_T)
+     case "$target" in
+       *-uclinux*)
+-        # Don't enable LFS with uClibc
++        # Don't enable LFS with uClinux
+         ;;
+       *)
+         AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h	2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h	2004-09-10 10:47:40.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+ 
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h	2004-07-20 03:52:12.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h	2004-09-10 10:47:40.000000000 -0500
+@@ -179,7 +179,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
diff --git a/openwrt/toolchain/gcc/3.4.2/300-libstdc++-pic.patch b/openwrt/toolchain/gcc/3.4.2/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..c030ba6205
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am~	2003-02-28 09:21:05.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.am	2003-02-28 09:28:50.000000000 +0100
+@@ -224,6 +224,10 @@
+ 	  @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+ 
+ 
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCPP_BUILD_DEBUG
+ all-local: build_debug
+
+--- gcc/libstdc++-v3/src/Makefile.in~	2004-02-21 09:55:48.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.in	2004-02-21 09:59:34.000000000 +0100
+@@ -585,7 +585,7 @@
+ 
+ install-data-am: install-data-local
+ 
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+ 
+ install-info: install-info-am
+ 
+@@ -618,6 +618,7 @@
+ 	distclean-tags distdir dvi dvi-am info info-am install \
+ 	install-am install-data install-data-am install-data-local \
+ 	install-exec install-exec-am install-info install-info-am \
++	install-exec-local \
+ 	install-man install-strip install-toolexeclibLTLIBRARIES \
+ 	installcheck installcheck-am installdirs maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-compile \
+@@ -707,6 +708,11 @@
+ install_debug:
+ 	(cd ${debugdir} && $(MAKE) \
+ 	toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # 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/openwrt/toolchain/gcc/3.4.2/300-pr15526.patch b/openwrt/toolchain/gcc/3.4.2/300-pr15526.patch
new file mode 100644
index 0000000000..f01c59f114
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/300-pr15526.patch
@@ -0,0 +1,53 @@
+# DP: 2004-09-26  Roger Sayle  <roger@eyesopen.com>
+# DP: 
+# DP: 	PR other/15526
+# DP: 	Backport from mainline
+# DP: 	2004-05-20  Falk Hueffner  <falk@debian.org>
+# DP: 	* libgcc2.c (__mulvsi3): Fix overflow test.
+
+diff -u -r1.170.6.1 -r1.170.6.2
+--- gcc/gcc/libgcc2.c	2004/07/17 21:18:47	1.170.6.1
++++ gcc/gcc/libgcc2.c	2004/09/26 20:47:14	1.170.6.2
+@@ -130,9 +130,7 @@
+ {
+   const DWtype w = (DWtype) a * (DWtype) b;
+ 
+-  if (((a >= 0) == (b >= 0))
+-      ? (UDWtype) w > (UDWtype) (((DWtype) 1 << (WORD_SIZE - 1)) - 1)
+-      : (UDWtype) w < (UDWtype) ((DWtype) -1 << (WORD_SIZE - 1)))
++  if ((Wtype) (w >> WORD_SIZE) != (Wtype) w >> (WORD_SIZE - 1))
+     abort ();
+ 
+   return w;
+
+/cvs/gcc/gcc/gcc/testsuite/gcc.dg/ftrapv-1.c,v  -->  standard output
+revision 1.1.22.1
+--- gcc/gcc/testsuite/gcc.dg/ftrapv-1.c
++++ /dev/null	2004-10-15 06:22:06.980596000 +0000
+@@ -0,0 +1,25 @@
++/* Copyright (C) 2004 Free Software Foundation.
++
++   PR other/15526
++   Verify correct overflow checking with -ftrapv.
++
++   Written by Falk Hueffner, 20th May 2004.  */
++
++/* { dg-do run } */
++/* { dg-options "-ftrapv" } */
++
++__attribute__((noinline)) int
++mulv(int a, int b)
++{
++  return a * b;
++}
++
++int
++main()
++{
++  mulv( 0,  0);
++  mulv( 0, -1);
++  mulv(-1,  0);
++  mulv(-1, -1);
++  return 0;
++}
+
diff --git a/openwrt/toolchain/gcc/3.4.2/300-pr17541.patch b/openwrt/toolchain/gcc/3.4.2/300-pr17541.patch
new file mode 100644
index 0000000000..ca5fa09abb
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/300-pr17541.patch
@@ -0,0 +1,234 @@
+# DP: 2004-09-21  Bud Davis  <bdavis9659@comcast.net>
+# DP: 	
+# DP: 	PR fortran/17541
+# DP: 	* bld.c (ffebld_constant_new_real2_val): Fix typo,
+# DP: 	
+# DP: 	PR fortran/17541
+# DP: 	* g77.f-torture/execute/pr17541.f: New test.
+
+Index: gcc/gcc/f/bld.c
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/f/Attic/bld.c,v
+retrieving revision 1.16.14.1
+retrieving revision 1.16.14.2
+diff -u -r1.16.14.1 -r1.16.14.2
+--- gcc/gcc/f/bld.c	12 Jul 2004 17:58:36 -0000	1.16.14.1
++++ gcc/gcc/f/bld.c	21 Sep 2004 12:54:27 -0000	1.16.14.2
+@@ -1333,7 +1333,7 @@
+      nc = malloc_new_kp (ffebld_constant_pool(),
+                          "FFEBLD_constREAL2",
+                          sizeof (*nc));
+-     nc->consttype = FFEBLD_constREAL1;
++     nc->consttype = FFEBLD_constREAL2;
+      nc->u.real2 = val;
+      nc->hook = FFECOM_constantNULL;
+      nc->llink = NULL;
+Index: gcc/gcc/testsuite/g77.f-torture/execute/pr17541.f
+===================================================================
+RCS file: gcc/gcc/testsuite/g77.f-torture/execute/pr17541.f
+diff -N gcc/gcc/testsuite/g77.f-torture/execute/pr17541.f
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ gcc/gcc/testsuite/g77.f-torture/execute/pr17541.f	21 Sep 2004 12:54:35 -0000	1.1.2.1
+@@ -0,0 +1,202 @@
++        program test
++        implicit none
++! check all types of data statements
++! pr 17541
++        real r(2)
++        double precision s(2)
++        integer*1 ib(2)
++        integer*2 ih(2)
++        integer*4 iw(2)
++        integer*8 id(3)
++        logical*1 lb(2)
++        logical*2 lh(2)
++        logical*4 lw(2)
++        logical*8 ld(2)
++        character*1 a(2)
++        character*5 b(2)
++        complex c1(2)
++        complex*8 c2(2)
++        data r / 1.0,2.0 /
++        data s / 2.d0,1.d0/
++        data ib / 1,-1 /
++        data ih / 2,100/
++        data iw / 4,3560000 /
++        data id / 8,Z'ABCDEF01',Z'5555AAAA' /
++        data a / 'a', 'z' /
++        data b / 'xyz','abc'/
++        data c1 /(1.0,2.0),(-1.0,-2.0)/
++        data c2 /(1.d0,2.d0),(-1.d0,-2.d0)/
++        data lb / .TRUE.,.FALSE. /
++        data lh / .TRUE.,.FALSE. /
++        data lw / .TRUE.,.FALSE. /
++        data ld / .TRUE.,.FALSE. /
++        logical dbug
++        data dbug /.FALSE./
++! check the reals first
++        if (r(1).ne.1.0) then
++           if (dbug) then
++             print*,r(1), ' should be 1.0 '
++           else
++             call abort
++           endif
++        endif
++        if (r(2).ne.2.0) then
++           if (dbug) then
++             print*,r(2), ' should be 2.0 '
++           else
++             call abort
++           endif
++        endif
++        if (s(1).ne.2.d0) then
++           if (dbug) then
++             print*,s(1), ' xxshould be 2.d0 '
++           else
++             call abort
++           endif
++        endif
++        if (s(2).ne.1.d0) then
++           if (dbug) then
++             print*,s(2), ' should be 1.d0 '
++           else
++             call abort
++           endif
++        endif
++! now the integers
++        if (ib(1).ne.1) then
++           if (dbug) then
++             print*,ib(1), ' should be 1 '
++           else
++             call abort
++           endif
++        endif
++        if (ib(2).ne.-1) then
++           if (dbug) then
++             print*,ib(2), ' should be -1 '
++           else
++             call abort
++           endif
++        endif
++        if (ih(1).ne.2) then
++           if (dbug) then
++             print*,ih(2), ' should be 2 '
++           else
++             call abort
++           endif
++        endif
++        if (ih(2).ne.100) then
++           if (dbug) then
++             print*,ih(2), ' should be 100 '
++           else
++             call abort
++           endif
++        endif
++        if (iw(1).ne.4) then
++           if (dbug) then
++             print*,iw(1), ' should be 4 '
++           else
++             call abort
++           endif
++        endif
++        if (iw(2).ne.3560000) then
++           if (dbug) then
++             print*,iw(2), ' should be 3560000 '
++           else
++             call abort
++           endif
++        endif
++        if (id(1).ne.8) then
++           if (dbug) print*,id(1), ' should be 8 '
++           call abort
++        endif
++        if (id(2).ne.Z'ABCDEF01') then
++           if (dbug) print*,id(2), " should be Z'ABCDEF01' "
++           call abort
++        endif
++        if (id(3).ne.Z'5555AAAA') then
++           if (dbug) print*,id(2), " should be Z'5555AAAA' "
++           call abort
++        endif
++! complex
++        if (c1(1).ne.(1.0,2.0)) then
++           if (dbug) then
++             print*,c1(1), ' should be (1.0,2.0) '
++           else
++             call abort
++           endif
++        endif
++        if (c1(2).ne.(-1.0,-2.0)) then
++           if (dbug) then
++             print*,c1(2), ' should be (-1.0,-2.0) '
++           else
++             call abort
++           endif
++        endif
++        if (c2(1).ne.(1.d0,2.d0)) then
++           if (dbug) then
++             print*,c2(1), ' should be (1.0,2.0) '
++           else
++             call abort
++           endif
++        endif
++        if (c2(2).ne.(-1.d0,-2.d0)) then
++           if (dbug) then
++             print*,c2(2), ' should be (-1.0,-2.0) '
++           else
++             call abort
++           endif
++        endif
++! character
++        if (a(1).ne.'a') then
++           if (dbug) then
++             print*,a(1), ' should be a '
++           else
++             call abort
++           endif
++        endif
++        if (b(1).ne.'xyz') then
++           if (dbug) then
++             print*,b(1), ' should be xyz '
++           else
++             call abort
++           endif
++        endif
++!logicals
++        if (.NOT.lb(1)) then
++           if (dbug) print*,lb(1), ' should be .T. '
++           call abort
++        endif
++        if (lb(2)) then
++           if (dbug) print*,lb(2), ' should be .F. '
++           call abort
++        endif
++        if (.NOT.lh(1)) then
++           if (dbug) print*,lh(1), ' should be .T. '
++           call abort
++        endif
++        if (lh(2)) then
++           if (dbug) print*,lh(2), ' should be .F. '
++           call abort
++        endif
++        if (.NOT.lw(1)) then
++           if (dbug) print*,lw(1), ' should be .T. '
++           call abort
++        endif
++        if (lw(2)) then
++           if (dbug) print*,lw(2), ' should be .F. '
++           call abort
++        endif
++        if (.NOT.ld(1)) then
++           if (dbug) then
++             print*,ld(1), ' should be .T. '
++           else
++             call abort
++           endif
++        endif
++        if (ld(2)) then
++           if (dbug) then
++             print*,ld(2), ' should be .F. '
++           else
++             call abort
++           endif
++        endif
++        end
diff --git a/openwrt/toolchain/gcc/3.4.2/300-pr17976.patch b/openwrt/toolchain/gcc/3.4.2/300-pr17976.patch
new file mode 100644
index 0000000000..78bb3559ff
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/300-pr17976.patch
@@ -0,0 +1,106 @@
+From: Mark Mitchell <mark@codesourcery.com>
+Sender: gcc-patches-owner@gcc.gnu.org
+To: gcc-patches@gcc.gnu.org
+Subject: C++ PATCH: PR 17976
+Date: Thu, 14 Oct 2004 21:24:41 -0700
+
+
+This was a case where we generated multiple destructor calls for the
+same global variable, in the (probably rare) situation that an
+"extern" declaration followed the definition.
+
+Tested on i686-pc-linux-gnu, applied on the mainline and on the 3.4
+branch.
+
+--
+Mark Mitchell
+CodeSourcery, LLC
+mark@codesourcery.com
+
+# DP: 2004-10-14  Mark Mitchell  <mark@codesourcery.com>
+# DP: 
+# DP: 	PR c++/17976
+# DP: 	* decl.c (cp_finish_decl): Do not call expand_static_init more
+# DP: 	than once for a single variable.
+# DP: 
+# DP: 2004-10-14  Mark Mitchell  <mark@codesourcery.com>
+# DP: 
+# DP: 	PR c++/17976
+# DP: 	* g++.dg/init/dtor3.C: New test.
+
+Index: testsuite/g++.dg/init/dtor3.C
+===================================================================
+RCS file: testsuite/g++.dg/init/dtor3.C
+diff -N testsuite/g++.dg/init/dtor3.C
+*** /dev/null	1 Jan 1970 00:00:00 -0000
+--- gcc/gcc/testsuite/g++.dg/init/dtor3.C	15 Oct 2004 04:02:22 -0000
+***************
+*** 0 ****
+--- 1,21 ----
++ // PR c++/17976
++ // { dg-do run }
++ 
++ extern "C" void abort();
++ struct A
++ {
++   static int i;
++   A(){}
++   ~A(){i++;if(i>1)abort();}
++ };
++ 
++ int A::i = 0;
++ 
++ A a;
++ extern A a;
++ 
++ int main()
++ {
++   return 0;
++ }
++ 
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v
+retrieving revision 1.1174.2.26
+retrieving revision 1.1174.2.27
+diff -u -r1.1174.2.26 -r1.1174.2.27
+--- gcc/gcc/cp/decl.c	2004/10/10 21:54:59	1.1174.2.26
++++ gcc/gcc/cp/decl.c	2004/10/15 04:23:46	1.1174.2.27
+@@ -4778,6 +4778,7 @@
+   tree cleanup;
+   const char *asmspec = NULL;
+   int was_readonly = 0;
++  bool var_definition_p = false;
+ 
+   if (decl == error_mark_node)
+     return;
+@@ -4930,6 +4931,11 @@
+ 	  /* Remember that the initialization for this variable has
+ 	     taken place.  */
+ 	  DECL_INITIALIZED_P (decl) = 1;
++	  /* This declaration is the definition of this variable,
++	     unless we are initializing a static data member within
++	     the class specifier.  */
++	  if (!DECL_EXTERNAL (decl))
++	    var_definition_p = true;
+ 	}
+       /* If the variable has an array type, lay out the type, even if
+ 	 there is no initializer.  It is valid to index through the
+@@ -5004,8 +5010,16 @@
+ 		initialize_local_var (decl, init);
+ 	    }
+ 
+-	  if (TREE_STATIC (decl))
+-	    expand_static_init (decl, init);
++	  /* If a variable is defined, and then a subsequent
++	     definintion with external linkage is encountered, we will
++	     get here twice for the same variable.  We want to avoid
++	     calling expand_static_init more than once.  For variables
++	     that are not static data members, we can call
++	     expand_static_init only when we actually process the
++	     initializer.  It is not legal to redeclare a static data
++	     member, so this issue does not arise in that case.  */
++	  if (var_definition_p && TREE_STATIC (decl))
++	    expand_static_init (decl, init); 
+ 	}
+     finish_end0:
+ 
diff --git a/openwrt/toolchain/gcc/3.4.2/400-mips-pr17565.patch b/openwrt/toolchain/gcc/3.4.2/400-mips-pr17565.patch
new file mode 100644
index 0000000000..7ae6aa56f6
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/400-mips-pr17565.patch
@@ -0,0 +1,102 @@
+[committed] Fix target/17565: asms in delay slots
+
+    * From: Richard Sandiford <rsandifo at redhat dot com>
+    * To: gcc-patches at gcc dot gnu dot org
+    * Date: Mon, 20 Sep 2004 07:55:58 +0100
+    * Subject: [committed] Fix target/17565: asms in delay slots
+
+The MIPS port was allowing asms to be put into delay slots if the
+compiler guesses they are only one instruction long.  This is wrong
+because of the possibility of it containing macros.
+
+The problem can be reproduced as an assembler warning
+in the following testcase:
+
+int foo (int n)
+{
+  register int k asm ("$16") = n;
+  if (k > 0)
+    {
+      bar ();
+      asm ("li %0,0x12345678" : "=r" (k));
+    }
+  return k;
+}
+
+because the multi-instruction asm statement goes into the delay
+slot of the call to bar().
+
+This is reduced from a much more serious linux problem.  Linux is fond
+of using empty asm statements, and since gcc estimates empty asms to be
+one instruction long, they too might be put into delay slots.  This
+actually has the effect of putting the following instruction into the
+delay slot instead.  Since there's no assembler warning, the problem was
+only detected as a run-time failure.
+
+The fix is simple: set the asm value of "can_delay" to "no".
+Tested on mipsisa64-elf, applied to mainline.
+
+This problem goes back to at least 2.95, so it isn't technically a
+regression.  On the other hand, it's the kind of bug that could trigger
+for different types of code in different releases, so I'm sure there's
+a testcase that fails (say) in 3.4 and not in 2.95.  Will probably ask
+Mark for permission to backport to 3.4.
+
+Richard
+
+
+	PR target/17565
+	* config/mips/mips.md (define_asm_attributes): Set can_delay to no.
+
+testsuite/
+	* gcc.target/mips/asm-1.c: New test.
+
+Index: config/mips/mips.md
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v
+retrieving revision 1.306
+diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.306 mips.md
+*** gcc/gcc/config/mips/mips.md	13 Sep 2004 19:32:05 -0000	1.306
+--- gcc/gcc/config/mips/mips.md	20 Sep 2004 06:52:31 -0000
+*************** (define_attr "may_clobber_hilo" "no,yes"
+*** 266,272 ****
+  
+  ;; Describe a user's asm statement.
+  (define_asm_attributes
+!   [(set_attr "type" "multi")])
+  
+  ;; .........................
+  ;;
+--- 266,273 ----
+  
+  ;; Describe a user's asm statement.
+  (define_asm_attributes
+!   [(set_attr "type" "multi")
+!    (set_attr "can_delay" "no")])
+  
+  ;; .........................
+  ;;
+Index: testsuite/gcc.target/mips/asm-1.c
+===================================================================
+RCS file: testsuite/gcc.target/mips/asm-1.c
+diff -N testsuite/gcc.target/mips/asm-1.c
+*** gcc/gcc/testsuite/gcc.target/mips/asm-1.c	1 Jan 1970 00:00:00 -0000
+--- gcc/gcc/testsuite/gcc.target/mips/asm-1.c	20 Sep 2004 06:52:31 -0000
+***************
+*** 0 ****
+--- 1,14 ----
++ /* PR target/17565.  GCC used to put the asm into the delay slot
++    of the call.  */
++ /* { dg-do assemble } */
++ /* { dg-options "-O" } */
++ int foo (int n)
++ {
++   register int k asm ("$16") = n;
++   if (k > 0)
++     {
++       bar ();
++       asm ("li %0,0x12345678" : "=r" (k));
++     }
++   return k;
++ }
+
diff --git a/openwrt/toolchain/gcc/3.4.2/401-ppc-eabi-typo.patch b/openwrt/toolchain/gcc/3.4.2/401-ppc-eabi-typo.patch
new file mode 100644
index 0000000000..dbb856868d
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/401-ppc-eabi-typo.patch
@@ -0,0 +1,20 @@
+revision 1.12
+date: 2004/07/16 15:13:40;  author: segher;  state: Exp;  lines: +1 -1
+        * config/rs6000/eabi.asm (__eabi_convert): Fix typo (cmpi vs. cmpwi).
+Index: gcc/config/rs6000/eabi.asm
+===================================================================
+RCS file: /cvs/gcc/gcc/gcc/config/rs6000/eabi.asm,v
+retrieving revision 1.11
+retrieving revision 1.12
+diff -u -b -B -w -p -r1.11 -r1.12
+--- gcc/gcc/config/rs6000/eabi.asm	20 Sep 2002 23:46:58 -0000	1.11
++++ gcc/gcc/config/rs6000/eabi.asm	16 Jul 2004 15:13:40 -0000	1.12
+@@ -252,7 +252,7 @@ FUNC_START(__eabi_convert)
+ 
+ .Lcvt:
+ 	lwzu	6,4(3)				/* pointer to convert */
+-	cmpi	0,6,0
++	cmpwi	0,6,0
+ 	beq-	.Lcvt2				/* if pointer is null, don't convert */
+ 
+         add	6,6,12				/* convert pointer */
diff --git a/openwrt/toolchain/gcc/3.4.2/402-mips-pr17770.patch b/openwrt/toolchain/gcc/3.4.2/402-mips-pr17770.patch
new file mode 100644
index 0000000000..87d603023c
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/402-mips-pr17770.patch
@@ -0,0 +1,12 @@
+--- gcc-3.4.2/gcc/config/mips/mips.md	2004-06-25 02:35:30.000000000 -0500
++++ gcc-3.4-cvs/gcc/config/mips/mips.md	2004-10-26 01:54:56.000000000 -0500
+@@ -4073,8 +4073,7 @@
+   "!TARGET_MIPS16"
+   "lwl\t%0,%2"
+   [(set_attr "type" "load")
+-   (set_attr "mode" "SI")
+-   (set_attr "hazard" "none")])
++   (set_attr "mode" "SI")])
+ 
+ (define_insn "mov_lwr"
+   [(set (match_operand:SI 0 "register_operand" "=d")
diff --git a/openwrt/toolchain/gcc/3.4.2/600-gcc34-arm-ldm-peephole.patch b/openwrt/toolchain/gcc/3.4.2/600-gcc34-arm-ldm-peephole.patch
new file mode 100644
index 0000000000..fb317e1537
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/600-gcc34-arm-ldm-peephole.patch
@@ -0,0 +1,79 @@
+--- gcc-3.4.0/gcc/config/arm/arm.md.arm-ldm-peephole	2004-01-13 08:24:37.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.md	2004-04-24 18:18:04.000000000 -0400
+@@ -8810,13 +8810,16 @@
+    (set_attr "length" "4,8,8")]
+ )
+ 
++; Try to convert LDR+LDR+arith into [add+]LDM+arith
++; On XScale, LDM is always slower than two LDRs, so only do this if
++; optimising for size.
+ (define_insn "*arith_adjacentmem"
+   [(set (match_operand:SI 0 "s_register_operand" "=r")
+ 	(match_operator:SI 1 "shiftable_operator"
+ 	 [(match_operand:SI 2 "memory_operand" "m")
+ 	  (match_operand:SI 3 "memory_operand" "m")]))
+    (clobber (match_scratch:SI 4 "=r"))]
+-  "TARGET_ARM && adjacent_mem_locations (operands[2], operands[3])"
++  "TARGET_ARM && (!arm_tune_xscale || optimize_size) && adjacent_mem_locations (operands[2], operands[3])"
+   "*
+   {
+     rtx ldm[3];
+@@ -8851,6 +8854,8 @@
+       }
+    if (val1 && val2)
+       {
++	/* This would be a loss on a Harvard core, but adjacent_mem_locations()
++	   will prevent it from happening.  */
+ 	rtx ops[3];
+ 	ldm[0] = ops[0] = operands[4];
+ 	ops[1] = XEXP (XEXP (operands[2], 0), 0);
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm-peephole	2004-04-24 18:16:25.000000000 -0400
++++ gcc-3.4.0/gcc/config/arm/arm.c	2004-04-24 18:18:04.000000000 -0400
+@@ -4593,8 +4593,11 @@
+ 	 arith_adjacentmem pattern to output an overlong sequence.  */
+       if (!const_ok_for_op (PLUS, val0) || !const_ok_for_op (PLUS, val1))
+ 	return 0;
+-      
+-      return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4);
++
++      /* For Harvard cores, only accept pairs where one offset is zero.
++         See comment in load_multiple_sequence.  */
++      return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4)
++	&& (!arm_ld_sched || val0 == 0 || val1 == 0);
+     }
+   return 0;
+ }
+@@ -4838,6 +4841,11 @@
+       *load_offset = unsorted_offsets[order[0]];
+     }
+ 
++  /* For XScale a two-word LDM is a performance loss, so only do this if
++     size is more important.  See comments in arm_gen_load_multiple.  */
++  if (nops == 2 && arm_tune_xscale && !optimize_size)
++    return 0;
++
+   if (unsorted_offsets[order[0]] == 0)
+     return 1; /* ldmia */
+ 
+@@ -5064,6 +5072,11 @@
+       *load_offset = unsorted_offsets[order[0]];
+     }
+ 
++  /* For XScale a two-word LDM is a performance loss, so only do this if
++     size is more important.  See comments in arm_gen_load_multiple.  */
++  if (nops == 2 && arm_tune_xscale && !optimize_size)
++    return 0;
++
+   if (unsorted_offsets[order[0]] == 0)
+     return 1; /* stmia */
+ 
+--- gcc-3.4.0/gcc/genpeep.c.arm-ldm-peephole	2003-07-05 01:27:22.000000000 -0400
++++ gcc-3.4.0/gcc/genpeep.c	2004-04-24 18:18:04.000000000 -0400
+@@ -381,6 +381,7 @@
+   printf ("#include \"recog.h\"\n");
+   printf ("#include \"except.h\"\n\n");
+   printf ("#include \"function.h\"\n\n");
++  printf ("#include \"flags.h\"\n\n");
+ 
+   printf ("#ifdef HAVE_peephole\n");
+   printf ("extern rtx peep_operand[];\n\n");
diff --git a/openwrt/toolchain/gcc/3.4.2/601-gcc34-arm-ldm.patch b/openwrt/toolchain/gcc/3.4.2/601-gcc34-arm-ldm.patch
new file mode 100644
index 0000000000..142052fdf0
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/601-gcc34-arm-ldm.patch
@@ -0,0 +1,119 @@
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm	2004-02-27 09:51:05.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.c	2004-04-24 18:16:25.000000000 -0400
+@@ -8520,6 +8520,26 @@
+   return_used_this_function = 0;  
+ }
+ 
++/* Return the number (counting from 0) of
++   the least significant set bit in MASK.  */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++     int mask;
++{
++  int bit;
++
++  for (bit = 0;
++       (mask & (1 << bit)) == 0;
++       ++bit)
++    continue;
++
++  return bit;
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -8753,27 +8773,47 @@
+ 	  saved_regs_mask |=   (1 << PC_REGNUM);
+ 	}
+ 
+-      /* Load the registers off the stack.  If we only have one register
+-	 to load use the LDR instruction - it is faster.  */
+-      if (saved_regs_mask == (1 << LR_REGNUM))
+-	{
+-	  /* The exception handler ignores the LR, so we do
+-	     not really need to load it off the stack.  */
+-	  if (eh_ofs)
+-	    asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+-	  else
+-	    asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+-	}
+-      else if (saved_regs_mask)
++      if (saved_regs_mask)
+ 	{
+-	  if (saved_regs_mask & (1 << SP_REGNUM))
+-	    /* Note - write back to the stack register is not enabled
+-	       (ie "ldmfd sp!...").  We know that the stack pointer is
+-	       in the list of registers and if we add writeback the
+-	       instruction becomes UNPREDICTABLE.  */
+-	    print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++	  /* Load the registers off the stack.  If we only have one register
++	     to load use the LDR instruction - it is faster.  */
++	  if (bit_count (saved_regs_mask) == 1)
++	    {
++	      int reg = number_of_first_bit_set (saved_regs_mask);
++
++	      switch (reg)
++		{
++		case SP_REGNUM:
++		  /* Mustn't use base writeback when loading SP.  */
++		  asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++		  break;
++		  
++		case LR_REGNUM:
++		  if (eh_ofs)
++		    {
++		      /* The exception handler ignores the LR, so we do
++			 not really need to load it off the stack.  */
++		      asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++		      break;
++		    }
++		  /* else fall through */
++		  
++		default:
++		  asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++		  break;
++		}
++	    }
+ 	  else
+-	    print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++	    {
++	      if (saved_regs_mask & (1 << SP_REGNUM))
++		/* Note - write back to the stack register is not enabled
++		   (ie "ldmfd sp!...").  We know that the stack pointer is
++		   in the list of registers and if we add writeback the
++		   instruction becomes UNPREDICTABLE.  */
++		print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++	      else
++		print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++	    }
+ 	}
+ 
+       if (current_function_pretend_args_size)
+@@ -11401,22 +11441,6 @@
+     }
+ }
+ 
+-/* Return the number (counting from 0) of
+-   the least significant set bit in MASK.  */
+-
+-inline static int
+-number_of_first_bit_set (int mask)
+-{
+-  int bit;
+-
+-  for (bit = 0;
+-       (mask & (1 << bit)) == 0;
+-       ++bit)
+-    continue;
+-
+-  return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+    If 'reg_containing_return_addr' is -1, then the return address is
+    actually on the stack, at the stack pointer.  */
diff --git a/openwrt/toolchain/gcc/3.4.2/602-sdk-libstdc++-includes.patch b/openwrt/toolchain/gcc/3.4.2/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~	2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am	2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+ 
+ libmath_la_SOURCES = stubs.c
+ 
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+ 
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old	2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am	2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ 	$(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ 
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+ 
+ 
+ 
diff --git a/openwrt/toolchain/gcc/3.4.2/700-pr15068-fix.patch b/openwrt/toolchain/gcc/3.4.2/700-pr15068-fix.patch
new file mode 100644
index 0000000000..2977765c5f
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/700-pr15068-fix.patch
@@ -0,0 +1,44 @@
+See http://gcc.gnu.org/PR15068
+
+Fixes error
+
+../sysdeps/generic/s_fmax.c: In function `__fmax':
+../sysdeps/generic/s_fmax.c:28: internal compiler error: in elim_reg_cond, at flow.c:3257
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <URL:http://gcc.gnu.org/bugs.html> for instructions.
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/build-glibc/math/s_fmax.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822/math'
+make[1]: *** [math/others] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822'
+make: *** [all] Error 2
+
+[ rediffed against gcc-3.4.1, with elbow grease, ending up with same thing as
+http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3 ]
+
+--- gcc-3.4.1/gcc/flow.c.old	2004-02-27 19:39:19.000000000 -0800
++++ gcc-3.4.1/gcc/flow.c	2004-08-26 07:29:46.000000000 -0700
+@@ -1878,6 +1878,7 @@
+ 	  rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ 	  rtx cond_true = XEXP (set_src, 0);
+ 	  rtx reg = XEXP (cond_true, 0);
++ 	  enum rtx_code inv_cond;
+ 
+ 	  if (GET_CODE (reg) == SUBREG)
+ 	    reg = SUBREG_REG (reg);
+@@ -1886,11 +1887,13 @@
+ 	     in the form of a comparison of a register against zero.  
+ 	     If the condition is more complex than that, then it is safe
+ 	     not to record any information.  */
+-	  if (GET_CODE (reg) == REG
++ 	  inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ 	  if (inv_cond != UNKNOWN
++	      && GET_CODE (reg) == REG
+ 	      && XEXP (cond_true, 1) == const0_rtx)
+ 	    {
+ 	      rtx cond_false
+-		= gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++		= gen_rtx_fmt_ee (inv_cond,
+ 				  GET_MODE (cond_true), XEXP (cond_true, 0),
+ 				  XEXP (cond_true, 1));
+ 	      if (GET_CODE (XEXP (set_src, 1)) == PC)
diff --git a/openwrt/toolchain/gcc/3.4.2/800-arm-bigendian.patch b/openwrt/toolchain/gcc/3.4.2/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files.  */
+ #define NO_IMPLICIT_EXTERN_C
+ 
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode.  */
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++		( ARM_FLAG_APCS_32 | \
++		  ARM_FLAG_MMU_TRAPS | \
++		  TARGET_ENDIAN_DEFAULT )
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -101,7 +118,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+ 
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ 	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	case $target in
++	arm*b-*)
++		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++		;;
++	esac
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
diff --git a/openwrt/toolchain/gcc/3.4.2/810-arm-bigendian-uclibc.patch b/openwrt/toolchain/gcc/3.4.2/810-arm-bigendian-uclibc.patch
new file mode 100644
index 0000000000..a4d87e2317
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/810-arm-bigendian-uclibc.patch
@@ -0,0 +1,27 @@
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-16 16:06:24.000000000 -0500
+@@ -107,7 +107,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-16 16:03:25.000000000 -0500
+@@ -666,6 +666,11 @@
+ 	;;
+ arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	case $target in
++	arm*b-*)
++		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++		;;
++	esac
+ 	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
diff --git a/openwrt/toolchain/gcc/3.4.2/arm-softfloat.patch.conditional b/openwrt/toolchain/gcc/3.4.2/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..19d1b90dac
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.2/arm-softfloat.patch.conditional
@@ -0,0 +1,270 @@
+Note... modified my mjn3 to not conflict with the big endian arm patch.
+Warning!!!  Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
+Also changed
+  #define SUBTARGET_EXTRA_ASM_SPEC "\
+  %{!mcpu=*:-mcpu=xscale} \
+  %{mhard-float:-mfpu=fpa} \
+  %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+to
+  #define SUBTARGET_EXTRA_ASM_SPEC "\
+  %{mhard-float:-mfpu=fpa} \
+  %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+in gcc/config/arm/linux-elf.h.
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here: 
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant.  His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp.  The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option.  If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+#   software floating point, using the VFP format.  The produced object file
+#   should have these flags in its header:
+#
+#     private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+#   which always uses the FPA format.  Object file header flags should be:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+#   using the FPA format.  This is done for compatibility reasons with many
+#   existing distributions.  Object file header flags should be:
+#
+#     private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line.  This
+# is probably the reason Robert Schwebel modified it to:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+#   software floating point instructions, but *nothing* is passed to the
+#   assembler, which results in an object file which has flags:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+#   This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+#   point instructions, and passes "-mfpu=fpa" to the assembler, which results
+#   in an object file which has the same flags as in the previous item, but now
+#   those *are* correct.
+#    
+# * If you compile with -msoft-float, the compiler generates software floating
+#   point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+#   order) to the assembler, which results in an object file with flags:
+#
+#   private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+#   This is not correct, because the last "-mfpu=" option on the assembler
+#   command line determines the actual FPU convention used (which should be FPA
+#   in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour.  Every
+# instance of the notation:
+#
+#   %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+#   %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+# 
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+#   be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+#   macros I could find.  I think that if you compile without any options, you
+#   would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+#   anymore.  (The required functions are now in libgcc.)
+
+diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
+--- gcc-3.4.1-old/gcc/config/arm/coff.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/coff.h	2004-09-02 21:51:15.000000000 -0500
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+ 
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+ 
+ /* This is COFF, but prefer stabs.  */
+diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
+--- gcc-3.4.1-old/gcc/config/arm/elf.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -46,7 +46,9 @@
+ 
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+ 
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+ 
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+ 
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h	2004-09-02 21:50:52.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-09-02 22:00:49.000000000 -0500
+@@ -44,12 +44,26 @@
+ #define TARGET_LINKER_EMULATION "armelf_linux"
+ #endif
+ 
+-/* Default is to use APCS-32 mode.  */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float 
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT \
+-		( ARM_FLAG_APCS_32 | \
+-		  ARM_FLAG_MMU_TRAPS | \
+-		  TARGET_ENDIAN_DEFAULT )
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_APCS_32	\
++	| ARM_FLAG_SOFT_FLOAT	\
++	| TARGET_ENDIAN_DEFAULT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_MMU_TRAPS )
++
++#undef  SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+@@ -57,7 +71,7 @@
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -72,7 +86,7 @@
+    %{shared:-lc} \
+    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+ 
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+ 
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
+--- gcc-3.4.1-old/gcc/config/arm/t-linux	2003-09-20 16:09:07.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/t-linux	2004-09-02 21:51:15.000000000 -0500
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+ 
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++	_fixsfsi _fixunssfsi
+ 
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/unknown-elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -30,7 +30,12 @@
+ 
+ /* Default to using APCS-32 and software floating point.  */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ /* Now we define the strings used to build the spec file.  */
+diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h	2003-07-01 18:26:43.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/xscale-elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -49,11 +49,12 @@
+ 		     endian, regardless of the endian-ness of the memory
+ 		     system.  */
+ 		     
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+-  %{mhard-float:-mfpu=fpa} \
+-  %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++  { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/openwrt/toolchain/gcc/3.4.3/100-uclibc-conf.patch b/openwrt/toolchain/gcc/3.4.3/100-uclibc-conf.patch
new file mode 100644
index 0000000000..29e4c802e2
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/100-uclibc-conf.patch
@@ -0,0 +1,442 @@
+diff -urN gcc-3.4.1-dist/boehm-gc/configure gcc-3.4.1/boehm-gc/configure
+--- gcc-3.4.1-dist/boehm-gc/configure	2004-07-01 14:14:03.000000000 -0500
++++ gcc-3.4.1/boehm-gc/configure	2004-08-12 16:22:57.000000000 -0500
+@@ -1947,6 +1947,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN gcc-3.4.1-dist/boehm-gc/ltconfig gcc-3.4.1/boehm-gc/ltconfig
+--- gcc-3.4.1-dist/boehm-gc/ltconfig	2002-11-20 09:59:06.000000000 -0600
++++ gcc-3.4.1/boehm-gc/ltconfig	2004-08-12 15:54:42.000000000 -0500
+@@ -1981,6 +1981,23 @@
+   fi
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++  file_magic_cmd=/usr/bin/file
++  file_magic_test_file=`echo /lib/libuClibc-*.so`
++
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   version_type=sunos
+   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-01-31 00:18:11.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-12 15:54:42.000000000 -0500
+@@ -81,6 +81,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -91,6 +103,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
+ 
+diff -urN gcc-3.4.1-dist/gcc/config/cris/linux.h gcc-3.4.1/gcc/config/cris/linux.h
+--- gcc-3.4.1-dist/gcc/config/cris/linux.h	2003-11-28 21:08:09.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -79,6 +79,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -93,6 +112,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc gcc-3.4.1/gcc/config/cris/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/cris/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.4.1-dist/gcc/config/i386/linux.h gcc-3.4.1/gcc/config/i386/linux.h
+--- gcc-3.4.1-dist/gcc/config/i386/linux.h	2003-11-28 21:08:10.000000000 -0600
++++ gcc-3.4.1/gcc/config/i386/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -118,6 +118,15 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+ 	%{static:-static}}}"
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -126,6 +135,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.4.1-dist/gcc/config/mips/linux.h gcc-3.4.1/gcc/config/mips/linux.h
+--- gcc-3.4.1-dist/gcc/config/mips/linux.h	2004-06-15 20:42:24.000000000 -0500
++++ gcc-3.4.1/gcc/config/mips/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -109,6 +109,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -118,6 +129,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/linux.h gcc-3.4.1/gcc/config/rs6000/linux.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/linux.h	2004-02-25 09:11:19.000000000 -0600
++++ gcc-3.4.1/gcc/config/rs6000/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -61,7 +61,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+   "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -urN gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h gcc-3.4.1/gcc/config/rs6000/sysv4.h
+--- gcc-3.4.1-dist/gcc/config/rs6000/sysv4.h	2004-06-10 01:39:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/rs6000/sysv4.h	2004-08-12 15:54:43.000000000 -0500
+@@ -947,6 +947,7 @@
+   mcall-linux  : %(link_os_linux)       ; \
+   mcall-gnu    : %(link_os_gnu)         ; \
+   mcall-netbsd : %(link_os_netbsd)      ; \
++  mcall-linux-uclibc : %(link_os_linux_uclibc); \
+   mcall-openbsd: %(link_os_openbsd)     ; \
+                : %(link_os_default)     }"
+ 
+@@ -1124,6 +1125,10 @@
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+ 
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1290,6 +1295,7 @@
+   { "link_os_sim",		LINK_OS_SIM_SPEC },			\
+   { "link_os_freebsd",		LINK_OS_FREEBSD_SPEC },			\
+   { "link_os_linux",		LINK_OS_LINUX_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_gnu",		LINK_OS_GNU_SPEC },			\
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_openbsd",		LINK_OS_OPENBSD_SPEC },			\
+diff -urN gcc-3.4.1-dist/gcc/config/sh/linux.h gcc-3.4.1/gcc/config/sh/linux.h
+--- gcc-3.4.1-dist/gcc/config/sh/linux.h	2004-01-11 20:29:13.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/linux.h	2004-08-12 15:54:43.000000000 -0500
+@@ -73,12 +73,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc gcc-3.4.1/gcc/config/sh/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++TARGET_LIBGCC2_CFLAGS = -fpic -DNO_FPSCR_VALUES
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+diff -urN gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc gcc-3.4.1/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.4.1-dist/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/sh/t-sh64-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.4.1-dist/gcc/config/t-linux-uclibc gcc-3.4.1/gcc/config/t-linux-uclibc
+--- gcc-3.4.1-dist/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.1/gcc/config/t-linux-uclibc	2004-08-12 15:54:43.000000000 -0500
+@@ -0,0 +1,15 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++#SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-04-21 10:12:35.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-12 15:59:46.000000000 -0500
+@@ -664,6 +664,12 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -725,6 +731,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -988,6 +998,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1547,6 +1562,16 @@
+ 	gnu_ld=yes
+ 	gas=yes
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case ${target} in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case ${target} in
+@@ -1764,6 +1789,10 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+@@ -1916,7 +1945,7 @@
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h"
+ 	;;
+ sh-*-linux* | sh[2346lbe]*-*-linux*)
+-	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux"
++	tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver"
+ 	case ${target} in
+ 	sh*be-*-* | sh*eb-*-*) ;;
+ 	*)
+@@ -1924,9 +1953,17 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case ${target} in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} t-linux-uclibc sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} t-linux sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	case ${target} in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.4.1-dist/libtool.m4 gcc-3.4.1/libtool.m4
+--- gcc-3.4.1-dist/libtool.m4	2004-05-18 04:08:37.000000000 -0500
++++ gcc-3.4.1/libtool.m4	2004-08-12 15:54:43.000000000 -0500
+@@ -689,6 +689,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gcc-3.4.1-dist/ltconfig gcc-3.4.1/ltconfig
+--- gcc-3.4.1-dist/ltconfig	2004-03-05 15:05:41.000000000 -0600
++++ gcc-3.4.1/ltconfig	2004-08-12 15:55:48.000000000 -0500
+@@ -602,6 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1262,6 +1263,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff --git a/openwrt/toolchain/gcc/3.4.3/200-uclibc-locale.patch b/openwrt/toolchain/gcc/3.4.3/200-uclibc-locale.patch
new file mode 100644
index 0000000000..3fc4900b06
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/200-uclibc-locale.patch
@@ -0,0 +1,3246 @@
+diff -urN gcc-3.4.2-dist/libstdc++-v3/acinclude.m4 gcc-3.4.2/libstdc++-v3/acinclude.m4
+--- gcc-3.4.2-dist/libstdc++-v3/acinclude.m4	2004-07-15 12:42:45.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/acinclude.m4	2004-09-10 10:47:40.000000000 -0500
+@@ -996,7 +996,7 @@
+   AC_MSG_CHECKING([for C locale to use])
+   GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+     [use MODEL for target locale package],
+-    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+   
+   # If they didn't use this option switch, or if they specified --enable
+   # with no specific model, we'll have to look for one.  If they
+@@ -1012,6 +1012,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++        enable_clocale_flag=uclibc
++        ;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1138,6 +1141,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/aclocal.m4 gcc-3.4.2/libstdc++-v3/aclocal.m4
+--- gcc-3.4.2-dist/libstdc++-v3/aclocal.m4	2004-08-13 15:44:03.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/aclocal.m4	2004-09-10 10:47:40.000000000 -0500
+@@ -1025,6 +1025,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      x*-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1151,6 +1154,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,59 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno>  // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c)        NULL
++#define __freelocale(a)             ((void)0)
++#define __duplocale(a)              __c_locale()
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++			      "name not valid"));
++      }
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++    if (_S_get_c_locale() != __cloc)
++      __freelocale(__cloc); 
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++  { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES", 
++#if _GLIBCXX_NUM_CATEGORIES != 0
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}
++
++namespace std
++{
++  const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++}  // namespace std
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-09-10 10:48:08.000000000 -0500
+@@ -0,0 +1,115 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring>              // get std::strlen
++#include <cstdio>               // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++ 
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = std::setlocale(LC_ALL, NULL);
++      char* __sav = new char[std::strlen(__old) + 1];
++      std::strcpy(__sav, __old);
++      std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      std::setlocale(LC_ALL, __sav);
++      delete [] __sav;
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++    // in case we fall back to wcrtomb and then continue, in a loop.
++    // NB: wcsnrtombs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++						      __from_end - __from_next);
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++					 __from_chunk_end - __from_next,
++					 __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // wcrtomb.
++	    for (; __from < __from_next; ++__from)
++	      __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++	    __state = __tmp_state;
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    extern_type __buf[MB_LEN_MAX];
++	    __tmp_state = __state;
++	    const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++	    if (__conv > static_cast<size_t>(__to_end - __to_next))
++	      __ret = partial;
++	    else
++	      {
++		memcpy(__to_next, __buf, __conv);
++		__state = __tmp_state;
++		__to_next += __conv;
++		++__from_next;
++	      }
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we store a L'\0' and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++	 __from_next < __from_end && __to_next < __to_end
++	 && __ret == ok;)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++								  __from_end
++								  - __from_next));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __from_end;
++
++	__from = __from_next;
++	size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++				   __from_chunk_end - __from_next,
++				   __to_end - __to_next, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (;; ++__to_next, __from += __conv)
++	      {
++		__conv = mbrtowc(__to_next, __from, __from_end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __from_next = __from;
++	    __state = __tmp_state;	    
++	    __ret = error;
++	  }
++	else if (__from_next && __from_next < __from_chunk_end)
++	  {
++	    // It is unclear what to return in this case (see DR 382). 
++	    __to_next += __conv;
++	    __ret = partial;
++	  }
++	else
++	  {
++	    __from_next = __from_chunk_end;
++	    __to_next += __conv;
++	  }
++
++	if (__from_next < __from_end && __ret == ok)
++	  {
++	    if (__to_next < __to_end)
++	      {
++		// XXX Probably wrong for stateful encodings
++		__tmp_state = __state;		
++		++__from_next;
++		*__to_next++ = L'\0';
++	      }
++	    else
++	      __ret = partial;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_encoding() const throw()
++  {
++    // XXX This implementation assumes that the encoding is
++    // stateless and is either single-byte or variable-width.
++    int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    if (MB_CUR_MAX == 1)
++      __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }  
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_max_length() const throw()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    // XXX Probably wrong for stateful encodings.
++    int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++  
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_length(state_type& __state, const extern_type* __from,
++	    const extern_type* __end, size_t __max) const
++  {
++    int __ret = 0;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we advance past it and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++  
++    // A dummy internal buffer is needed in order for mbsnrtocws to consider
++    // its fourth parameter (it wouldn't with NULL as first parameter).
++    wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) 
++							   * __max));
++    while (__from < __end && __max)
++      {
++	const extern_type* __from_chunk_end;
++	__from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++								  __end
++								  - __from));
++	if (!__from_chunk_end)
++	  __from_chunk_end = __end;
++
++	const extern_type* __tmp_from = __from;
++	size_t __conv = mbsnrtowcs(__to, &__from,
++				   __from_chunk_end - __from,
++				   __max, &__state);
++	if (__conv == static_cast<size_t>(-1))
++	  {
++	    // In case of error, in order to stop at the exact place we
++	    // have to start again from the beginning with a series of
++	    // mbrtowc.
++	    for (__from = __tmp_from;; __from += __conv)
++	      {
++		__conv = mbrtowc(NULL, __from, __end - __from,
++				 &__tmp_state);
++		if (__conv == static_cast<size_t>(-1)
++		    || __conv == static_cast<size_t>(-2))
++		  break;
++	      }
++	    __state = __tmp_state;
++	    __ret += __from - __tmp_from;
++	    break;
++	  }
++	if (!__from)
++	  __from = __from_chunk_end;
++	
++	__ret += __from - __tmp_from;
++	__max -= __conv;
++
++	if (__from < __end && __max)
++	  {
++	    // XXX Probably wrong for stateful encodings
++	    __tmp_state = __state;
++	    ++__from;
++	    ++__ret;
++	    --__max;
++	  }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 		
++      if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	{
++	  this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++	  this->_S_create_c_locale(this->_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++	  this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++	  this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      if (__m & _M_bit[__bitcur]
++	  && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++	{
++	  __ret = true;
++	  break;
++	}
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (; __lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++	    __m |= _M_bit[__bitcur];
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++    while (__lo < __hi)
++      {
++	*__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++	++__lo;
++	++__dest;
++      }
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  {
++    if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++      return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    if (_M_narrow_ok)
++      while (__lo < __hi)
++	{
++	  if (*__lo >= 0 && *__lo < 128)
++	    *__dest = _M_narrow[*__lo];
++	  else
++	    {
++	      const int __c = wctob(*__lo);
++	      *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	    }
++	  ++__lo;
++	  ++__dest;
++	}
++    else
++      while (__lo < __hi)
++	{
++	  const int __c = wctob(*__lo);
++	  *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++	  ++__lo;
++	  ++__dest;
++	}
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  void
++  ctype<wchar_t>::_M_initialize_ctype()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wint_t __i;
++    for (__i = 0; __i < 128; ++__i)
++      {
++	const int __c = wctob(__i);
++	if (__c == EOF)
++	  break;
++	else
++	  _M_narrow[__i] = static_cast<char>(__c);
++      }
++    if (__i == 128)
++      _M_narrow_ok = true;
++    else
++      _M_narrow_ok = false;
++    for (size_t __j = 0;
++	 __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++      _M_widen[__j] = btowc(__j);
++
++    for (size_t __k = 0; __k <= 11; ++__k)
++      { 
++	_M_bit[__k] = static_cast<mask>(_ISbit(__k));
++	_M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++  }
++#endif //  _GLIBCXX_USE_WCHAR_T
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++# ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), 
++     _M_name_messages(_S_get_c_name())
++     { }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, const char* __s, 
++				size_t __refs) 
++     : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++     _M_name_messages(__s)
++     {
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       _M_name_messages = __tmp;
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++      if (_M_name_messages != _S_get_c_name())
++	delete [] _M_name_messages;
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++       if (this->_M_name_messages != locale::facet::_S_get_c_name())
++	 delete [] this->_M_name_messages;
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       this->_M_name_messages = __tmp;
++
++       if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++	 {
++	   this->_S_destroy_c_locale(this->_M_c_locale_messages);
++	   this->_S_create_c_locale(this->_M_c_locale_messages, __s); 
++	 }
++     }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,698 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	__ret.field[0] = sign;
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[2] = space;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[1] = space;
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = sign;
++	    __ret.field[1] = symbol;	    
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;		
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	    else
++	      {
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol.
++	if (__precedes)
++	  {
++	    __ret.field[0] = symbol;
++	    __ret.field[1] = sign;
++	    if (__space)
++	      {
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[2] = value;
++		__ret.field[3] = none;
++	      }
++	  }
++	else
++	  {
++	    __ret.field[0] = value;
++	    if (__space)
++	      {
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	    else
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++		__ret.field[3] = none;
++	      }
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, 
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == true
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<char, false>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = "";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = "";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = "";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++							__cloc));
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	  _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_data->_M_negative_sign = "()";
++	  else
++	    _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++							__cloc);
++	  _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++	  // _Intl == false
++	  _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { delete _M_data; }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!_M_data)
++	_M_data = new __moneypunct_cache<wchar_t, true>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  try
++	    {
++	      mbstate_t __state;
++	      size_t __len = strlen(__cpossign);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++	      _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++	      _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++	      
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++	      _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++	  catch (...)
++	    {
++	      delete _M_data;
++	      _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++	      __throw_exception_again;
++	    } 
++	  
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++						      __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++							__pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++							__nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++  void
++  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++						       const char*)
++#else
++                                                       const char* __name)
++#endif
++  {
++    if (!_M_data)
++      _M_data = new __moneypunct_cache<wchar_t, false>;
++
++    if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++	  _M_data->_M_grouping = "";
++          _M_data->_M_grouping_size = 0;
++	  _M_data->_M_curr_symbol = L"";
++	  _M_data->_M_curr_symbol_size = 0;
++	  _M_data->_M_positive_sign = L"";
++	  _M_data->_M_positive_sign_size = 0;
++	  _M_data->_M_negative_sign = L"";
++	  _M_data->_M_negative_sign_size = 0;
++	  _M_data->_M_frac_digits = 0;
++	  _M_data->_M_pos_format = money_base::_S_default_pattern;
++	  _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(money_base::_S_atoms[__i]);
++	      _M_data->_M_atoms[__i] = btowc(uc);
++	    }
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++	  _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  wchar_t* __wcs_ps = 0;
++	  wchar_t* __wcs_ns = 0;
++	  const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  try
++            {
++              mbstate_t __state;
++              size_t __len;
++              __len = strlen(__cpossign);
++              if (__len)
++                {
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ps = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++		  _M_data->_M_positive_sign = __wcs_ps;
++		}
++	      else
++		_M_data->_M_positive_sign = L"";
++              _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++	      
++	      __len = strlen(__cnegsign);
++	      if (!__nposn)
++		_M_data->_M_negative_sign = L"()";
++	      else if (__len)
++		{ 
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  __wcs_ns = new wchar_t[__len];
++		  mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++		  _M_data->_M_negative_sign = __wcs_ns;
++		}
++	      else
++		_M_data->_M_negative_sign = L"";
++              _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++	      // _Intl == true.
++	      __len = strlen(__ccurr);
++	      if (__len)
++		{
++		  ++__len;
++		  memset(&__state, 0, sizeof(mbstate_t));
++		  wchar_t* __wcs = new wchar_t[__len];
++		  mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++		  _M_data->_M_curr_symbol = __wcs;
++		}
++	      else
++		_M_data->_M_curr_symbol = L"";
++              _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++	    }
++          catch (...)
++	    {
++	      delete _M_data;
++              _M_data = 0;
++	      delete __wcs_ps;
++	      delete __wcs_ns;	      
++#ifdef __UCLIBC_HAS_XLOCALE__
++	      __uselocale(__old);
++#else
++	      setlocale(LC_ALL, __old);
++	      free(__old);
++#endif
++              __throw_exception_again;
++	    }
++
++	  _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++	                                                __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++	                                                __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++	delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++	delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++	delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,183 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = '.';
++	  _M_data->_M_thousands_sep = ',';
++
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++	    _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++	}
++      else
++	{
++	  // Named locale.
++	  _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, 
++							__cloc));
++	  _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, 
++							__cloc));
++
++	  // Check for NULL, which implies no grouping.
++	  if (_M_data->_M_thousands_sep == '\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = "true";
++      _M_data->_M_truename_size = strlen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = "false";
++      _M_data->_M_falsename_size = strlen(_M_data->_M_falsename);
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { delete _M_data; }
++   
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __numpunct_cache<wchar_t>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_data->_M_grouping = "";
++	  _M_data->_M_grouping_size = 0;
++	  _M_data->_M_use_grouping = false;
++
++	  _M_data->_M_decimal_point = L'.';
++	  _M_data->_M_thousands_sep = L',';
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(_S_get_c_locale());
++#endif
++	  // Use ctype::widen code without the facet...
++	  unsigned char uc;
++	  for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_out[__i]);
++	      _M_data->_M_atoms_out[__i] = btowc(uc);
++	    }
++
++	  for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++	    {
++	      uc = static_cast<unsigned char>(__num_base::_S_atoms_in[__j]);
++	      _M_data->_M_atoms_in[__j] = btowc(uc);
++	    }
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#endif
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  union __s_and_w { const char *__s; unsigned int __w; } __u;
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++	  _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
++
++	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++	  _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
++#endif
++
++	  if (_M_data->_M_thousands_sep == L'\0')
++	    _M_data->_M_grouping = "";
++	  else
++	    _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	  _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++	}
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = L"true";
++      _M_data->_M_truename_size = wcslen(_M_data->_M_truename);
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = L"false";
++      _M_data->_M_falsename_size = wcslen(_M_data->_M_falsename);
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { delete _M_data; }
++ #endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-09-10 10:48:00.000000000 -0500
+@@ -0,0 +1,356 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++					_M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      const size_t __len = strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++      // Make sure __s is null terminated.
++      if (__len == 0)
++	__s[0] = '\0';
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<char>;
++
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = "%m/%d/%y";
++	  _M_data->_M_date_era_format = "%m/%d/%y";
++	  _M_data->_M_time_format = "%H:%M:%S";
++	  _M_data->_M_time_era_format = "%H:%M:%S";
++	  _M_data->_M_date_time_format = "";
++	  _M_data->_M_date_time_era_format = "";
++	  _M_data->_M_am = "AM";
++	  _M_data->_M_pm = "PM";
++	  _M_data->_M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = "Sunday";
++	  _M_data->_M_day2 = "Monday";
++	  _M_data->_M_day3 = "Tuesday";
++	  _M_data->_M_day4 = "Wednesday";
++	  _M_data->_M_day5 = "Thursday";
++	  _M_data->_M_day6 = "Friday";
++	  _M_data->_M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = "Sun";
++	  _M_data->_M_aday2 = "Mon";
++	  _M_data->_M_aday3 = "Tue";
++	  _M_data->_M_aday4 = "Wed";
++	  _M_data->_M_aday5 = "Thu";
++	  _M_data->_M_aday6 = "Fri";
++	  _M_data->_M_aday7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = "January";
++	  _M_data->_M_month02 = "February";
++	  _M_data->_M_month03 = "March";
++	  _M_data->_M_month04 = "April";
++	  _M_data->_M_month05 = "May";
++	  _M_data->_M_month06 = "June";
++	  _M_data->_M_month07 = "July";
++	  _M_data->_M_month08 = "August";
++	  _M_data->_M_month09 = "September";
++	  _M_data->_M_month10 = "October";
++	  _M_data->_M_month11 = "November";
++	  _M_data->_M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = "Jan";
++	  _M_data->_M_amonth02 = "Feb";
++	  _M_data->_M_amonth03 = "Mar";
++	  _M_data->_M_amonth04 = "Apr";
++	  _M_data->_M_amonth05 = "May";
++	  _M_data->_M_amonth06 = "Jun";
++	  _M_data->_M_amonth07 = "Jul";
++	  _M_data->_M_amonth08 = "Aug";
++	  _M_data->_M_amonth09 = "Sep";
++	  _M_data->_M_amonth10 = "Oct";
++	  _M_data->_M_amonth11 = "Nov";
++	  _M_data->_M_amonth12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++      const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++					_M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++      // Make sure __s is null terminated.
++      if (__len == 0)
++	__s[0] = L'\0';
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++	_M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_get_c_locale();
++
++	  _M_data->_M_date_format = L"%m/%d/%y";
++	  _M_data->_M_date_era_format = L"%m/%d/%y";
++	  _M_data->_M_time_format = L"%H:%M:%S";
++	  _M_data->_M_time_era_format = L"%H:%M:%S";
++	  _M_data->_M_date_time_format = L"";
++	  _M_data->_M_date_time_era_format = L"";
++	  _M_data->_M_am = L"AM";
++	  _M_data->_M_pm = L"PM";
++	  _M_data->_M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = L"Sunday";
++	  _M_data->_M_day2 = L"Monday";
++	  _M_data->_M_day3 = L"Tuesday";
++	  _M_data->_M_day4 = L"Wednesday";
++	  _M_data->_M_day5 = L"Thursday";
++	  _M_data->_M_day6 = L"Friday";
++	  _M_data->_M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = L"Sun";
++	  _M_data->_M_aday2 = L"Mon";
++	  _M_data->_M_aday3 = L"Tue";
++	  _M_data->_M_aday4 = L"Wed";
++	  _M_data->_M_aday5 = L"Thu";
++	  _M_data->_M_aday6 = L"Fri";
++	  _M_data->_M_aday7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = L"January";
++	  _M_data->_M_month02 = L"February";
++	  _M_data->_M_month03 = L"March";
++	  _M_data->_M_month04 = L"April";
++	  _M_data->_M_month05 = L"May";
++	  _M_data->_M_month06 = L"June";
++	  _M_data->_M_month07 = L"July";
++	  _M_data->_M_month08 = L"August";
++	  _M_data->_M_month09 = L"September";
++	  _M_data->_M_month10 = L"October";
++	  _M_data->_M_month11 = L"November";
++	  _M_data->_M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = L"Jan";
++	  _M_data->_M_amonth02 = L"Feb";
++	  _M_data->_M_amonth03 = L"Mar";
++	  _M_data->_M_amonth04 = L"Apr";
++	  _M_data->_M_amonth05 = L"May";
++	  _M_data->_M_amonth06 = L"Jun";
++	  _M_data->_M_amonth07 = L"Jul";
++	  _M_data->_M_amonth08 = L"Aug";
++	  _M_data->_M_amonth09 = L"Sep";
++	  _M_data->_M_amonth10 = L"Oct";
++	  _M_data->_M_amonth11 = L"Nov";
++	  _M_data->_M_amonth12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_data->_M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_data->_M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_data->_M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_data->_M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_data->_M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_data->_M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_data->_M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_data->_M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_data->_M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_data->_M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_data->_M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_data->_M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_data->_M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_data->_M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_data->_M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_data->_M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_data->_M_aday1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_data->_M_aday2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_data->_M_aday3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_data->_M_aday4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_data->_M_aday5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_data->_M_aday6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_data->_M_aday7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_data->_M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_data->_M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_data->_M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_data->_M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_data->_M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_data->_M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_data->_M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_data->_M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_data->_M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_data->_M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_data->_M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_data->_M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_data->_M_amonth01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_data->_M_amonth02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_data->_M_amonth03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_data->_M_amonth04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_data->_M_amonth05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_data->_M_amonth06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_data->_M_amonth07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_data->_M_amonth08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_data->_M_amonth09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_data->_M_amonth10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_data->_M_amonth11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_data->_M_amonth12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/locale/uclibc/time_members.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) 
++    : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++				     size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++    _M_name_timepunct(__s)
++    { 
++      char* __tmp = new char[std::strlen(__s) + 1];
++      std::strcpy(__tmp, __s);
++      _M_name_timepunct = __tmp;
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++      if (_M_name_timepunct != _S_get_c_name())
++	delete [] _M_name_timepunct;
++      delete _M_data; 
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,58 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++ 
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISalpha | _ISdigit | _ISpunct;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalpha | _ISdigit;
++  };
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_inline.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { return __C_ctype_b; }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.4.2-dist/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/config/os/uclibc/os_defines.h	2004-09-10 10:47:40.000000000 -0500
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute 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 library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure gcc-3.4.2/libstdc++-v3/configure
+--- gcc-3.4.2-dist/libstdc++-v3/configure	2004-08-13 15:44:04.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure	2004-09-10 10:47:40.000000000 -0500
+@@ -3878,6 +3878,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5545,6 +5550,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
+         cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+@@ -5759,6 +5767,77 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_check_msgfmt="yes"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++  echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++  echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++
++
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+ 
+   # This is where the testsuite looks for locale catalogs, using the
+diff -urN gcc-3.4.2-dist/libstdc++-v3/configure.host gcc-3.4.2/libstdc++-v3/configure.host
+--- gcc-3.4.2-dist/libstdc++-v3/configure.host	2004-08-27 14:52:30.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/configure.host	2004-09-10 10:47:40.000000000 -0500
+@@ -217,6 +217,12 @@
+     ;;
+ esac
+ 
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++  *-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
++esac
+ 
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+diff -urN gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4 gcc-3.4.2/libstdc++-v3/crossconfig.m4
+--- gcc-3.4.2-dist/libstdc++-v3/crossconfig.m4	2004-07-06 20:23:49.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/crossconfig.m4	2004-09-10 10:47:40.000000000 -0500
+@@ -138,6 +138,99 @@
+ 	;;
+     esac
+     ;;
++  *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++      machine/endian.h machine/param.h sys/machine.h sys/types.h \
++      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    AC_SUBST(SECTION_FLAGS)
++    GLIBCXX_CHECK_LINKER_FEATURES
++    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++    GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++    # For LFS.
++    AC_DEFINE(HAVE_INT64_T)
++    case "$target" in
++      *-uclinux*)
++        # Don't enable LFS with uClinux
++        ;;
++      *)
++        AC_DEFINE(_GLIBCXX_USE_LFS)
++    esac
++
++    # For showmanyc_helper().
++    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++    GLIBCXX_CHECK_POLL
++    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++    # For xsputn_2().
++    AC_CHECK_HEADERS(sys/uio.h)
++    GLIBCXX_CHECK_WRITEV
++
++#     AC_DEFINE(HAVE_ACOSF)
++#     AC_DEFINE(HAVE_ASINF)
++#     AC_DEFINE(HAVE_ATANF)
++#     AC_DEFINE(HAVE_ATAN2F)
++    AC_DEFINE(HAVE_CEILF)
++    AC_DEFINE(HAVE_COPYSIGN)
++#     AC_DEFINE(HAVE_COPYSIGNF)
++#     AC_DEFINE(HAVE_COSF)
++#     AC_DEFINE(HAVE_COSHF)
++#     AC_DEFINE(HAVE_EXPF)
++#     AC_DEFINE(HAVE_FABSF)
++    AC_DEFINE(HAVE_FINITE)
++    AC_DEFINE(HAVE_FINITEF)
++    AC_DEFINE(HAVE_FLOORF)
++#     AC_DEFINE(HAVE_FMODF)
++#     AC_DEFINE(HAVE_FREXPF)
++    AC_DEFINE(HAVE_HYPOT)
++#     AC_DEFINE(HAVE_HYPOTF)
++    AC_DEFINE(HAVE_ISINF)
++    AC_DEFINE(HAVE_ISINFF)
++    AC_DEFINE(HAVE_ISNAN)
++    AC_DEFINE(HAVE_ISNANF)
++#     AC_DEFINE(HAVE_LOGF)
++#     AC_DEFINE(HAVE_LOG10F)
++#     AC_DEFINE(HAVE_MODFF)
++#     AC_DEFINE(HAVE_SINF)
++#     AC_DEFINE(HAVE_SINHF)
++#     AC_DEFINE(HAVE_SINCOS)
++#     AC_DEFINE(HAVE_SINCOSF)
++    AC_DEFINE(HAVE_SQRTF)
++#     AC_DEFINE(HAVE_TANF)
++#     AC_DEFINE(HAVE_TANHF)
++    if test x"long_double_math_on_this_cpu" = x"yes"; then
++      AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++#       AC_DEFINE(HAVE_ACOSL)
++#       AC_DEFINE(HAVE_ASINL)
++#       AC_DEFINE(HAVE_ATANL)
++#       AC_DEFINE(HAVE_ATAN2L)
++#       AC_DEFINE(HAVE_CEILL)
++#       AC_DEFINE(HAVE_COPYSIGNL)
++#       AC_DEFINE(HAVE_COSL)
++#       AC_DEFINE(HAVE_COSHL)
++#       AC_DEFINE(HAVE_EXPL)
++#       AC_DEFINE(HAVE_FABSL)
++#       AC_DEFINE(HAVE_FINITEL)
++#       AC_DEFINE(HAVE_FLOORL)
++#       AC_DEFINE(HAVE_FMODL)
++#       AC_DEFINE(HAVE_FREXPL)
++#       AC_DEFINE(HAVE_HYPOTL)
++#       AC_DEFINE(HAVE_ISINFL)
++#       AC_DEFINE(HAVE_ISNANL)
++#       AC_DEFINE(HAVE_LOGL)
++#       AC_DEFINE(HAVE_LOG10L)
++#       AC_DEFINE(HAVE_MODFL)
++#       AC_DEFINE(HAVE_POWL)
++#       AC_DEFINE(HAVE_SINL)
++#       AC_DEFINE(HAVE_SINHL)
++#       AC_DEFINE(HAVE_SINCOSL)
++#       AC_DEFINE(HAVE_SQRTL)
++#       AC_DEFINE(HAVE_TANL)
++#       AC_DEFINE(HAVE_TANHL)
++    fi
++    ;;
+   *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+     AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+       machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -152,7 +245,7 @@
+     AC_DEFINE(HAVE_INT64_T)
+     case "$target" in
+       *-uclinux*)
+-        # Don't enable LFS with uClibc
++        # Don't enable LFS with uClinux
+         ;;
+       *)
+         AC_DEFINE(_GLIBCXX_USE_LFS)
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_compatibility/wchar.h	2003-12-08 21:51:45.000000000 -0600
++++ gcc-3.4.2/libstdc++-v3/include/c_compatibility/wchar.h	2004-09-10 10:47:40.000000000 -0500
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+ 
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+diff -urN gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.4.2-dist/libstdc++-v3/include/c_std/std_cwchar.h	2004-07-20 03:52:12.000000000 -0500
++++ gcc-3.4.2/libstdc++-v3/include/c_std/std_cwchar.h	2004-09-10 10:47:40.000000000 -0500
+@@ -179,7 +179,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
diff --git a/openwrt/toolchain/gcc/3.4.3/300-libstdc++-pic.patch b/openwrt/toolchain/gcc/3.4.3/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..c030ba6205
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/300-libstdc++-pic.patch
@@ -0,0 +1,47 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc/libstdc++-v3/src/Makefile.am~	2003-02-28 09:21:05.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.am	2003-02-28 09:28:50.000000000 +0100
+@@ -224,6 +224,10 @@
+ 	  @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+ 
+ 
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCPP_BUILD_DEBUG
+ all-local: build_debug
+
+--- gcc/libstdc++-v3/src/Makefile.in~	2004-02-21 09:55:48.000000000 +0100
++++ gcc/libstdc++-v3/src/Makefile.in	2004-02-21 09:59:34.000000000 +0100
+@@ -585,7 +585,7 @@
+ 
+ install-data-am: install-data-local
+ 
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+ 
+ install-info: install-info-am
+ 
+@@ -618,6 +618,7 @@
+ 	distclean-tags distdir dvi dvi-am info info-am install \
+ 	install-am install-data install-data-am install-data-local \
+ 	install-exec install-exec-am install-info install-info-am \
++	install-exec-local \
+ 	install-man install-strip install-toolexeclibLTLIBRARIES \
+ 	installcheck installcheck-am installdirs maintainer-clean \
+ 	maintainer-clean-generic mostlyclean mostlyclean-compile \
+@@ -707,6 +708,11 @@
+ install_debug:
+ 	(cd ${debugdir} && $(MAKE) \
+ 	toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # 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/openwrt/toolchain/gcc/3.4.3/600-gcc34-arm-ldm-peephole.patch b/openwrt/toolchain/gcc/3.4.3/600-gcc34-arm-ldm-peephole.patch
new file mode 100644
index 0000000000..fb317e1537
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/600-gcc34-arm-ldm-peephole.patch
@@ -0,0 +1,79 @@
+--- gcc-3.4.0/gcc/config/arm/arm.md.arm-ldm-peephole	2004-01-13 08:24:37.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.md	2004-04-24 18:18:04.000000000 -0400
+@@ -8810,13 +8810,16 @@
+    (set_attr "length" "4,8,8")]
+ )
+ 
++; Try to convert LDR+LDR+arith into [add+]LDM+arith
++; On XScale, LDM is always slower than two LDRs, so only do this if
++; optimising for size.
+ (define_insn "*arith_adjacentmem"
+   [(set (match_operand:SI 0 "s_register_operand" "=r")
+ 	(match_operator:SI 1 "shiftable_operator"
+ 	 [(match_operand:SI 2 "memory_operand" "m")
+ 	  (match_operand:SI 3 "memory_operand" "m")]))
+    (clobber (match_scratch:SI 4 "=r"))]
+-  "TARGET_ARM && adjacent_mem_locations (operands[2], operands[3])"
++  "TARGET_ARM && (!arm_tune_xscale || optimize_size) && adjacent_mem_locations (operands[2], operands[3])"
+   "*
+   {
+     rtx ldm[3];
+@@ -8851,6 +8854,8 @@
+       }
+    if (val1 && val2)
+       {
++	/* This would be a loss on a Harvard core, but adjacent_mem_locations()
++	   will prevent it from happening.  */
+ 	rtx ops[3];
+ 	ldm[0] = ops[0] = operands[4];
+ 	ops[1] = XEXP (XEXP (operands[2], 0), 0);
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm-peephole	2004-04-24 18:16:25.000000000 -0400
++++ gcc-3.4.0/gcc/config/arm/arm.c	2004-04-24 18:18:04.000000000 -0400
+@@ -4593,8 +4593,11 @@
+ 	 arith_adjacentmem pattern to output an overlong sequence.  */
+       if (!const_ok_for_op (PLUS, val0) || !const_ok_for_op (PLUS, val1))
+ 	return 0;
+-      
+-      return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4);
++
++      /* For Harvard cores, only accept pairs where one offset is zero.
++         See comment in load_multiple_sequence.  */
++      return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4)
++	&& (!arm_ld_sched || val0 == 0 || val1 == 0);
+     }
+   return 0;
+ }
+@@ -4838,6 +4841,11 @@
+       *load_offset = unsorted_offsets[order[0]];
+     }
+ 
++  /* For XScale a two-word LDM is a performance loss, so only do this if
++     size is more important.  See comments in arm_gen_load_multiple.  */
++  if (nops == 2 && arm_tune_xscale && !optimize_size)
++    return 0;
++
+   if (unsorted_offsets[order[0]] == 0)
+     return 1; /* ldmia */
+ 
+@@ -5064,6 +5072,11 @@
+       *load_offset = unsorted_offsets[order[0]];
+     }
+ 
++  /* For XScale a two-word LDM is a performance loss, so only do this if
++     size is more important.  See comments in arm_gen_load_multiple.  */
++  if (nops == 2 && arm_tune_xscale && !optimize_size)
++    return 0;
++
+   if (unsorted_offsets[order[0]] == 0)
+     return 1; /* stmia */
+ 
+--- gcc-3.4.0/gcc/genpeep.c.arm-ldm-peephole	2003-07-05 01:27:22.000000000 -0400
++++ gcc-3.4.0/gcc/genpeep.c	2004-04-24 18:18:04.000000000 -0400
+@@ -381,6 +381,7 @@
+   printf ("#include \"recog.h\"\n");
+   printf ("#include \"except.h\"\n\n");
+   printf ("#include \"function.h\"\n\n");
++  printf ("#include \"flags.h\"\n\n");
+ 
+   printf ("#ifdef HAVE_peephole\n");
+   printf ("extern rtx peep_operand[];\n\n");
diff --git a/openwrt/toolchain/gcc/3.4.3/601-gcc34-arm-ldm.patch b/openwrt/toolchain/gcc/3.4.3/601-gcc34-arm-ldm.patch
new file mode 100644
index 0000000000..142052fdf0
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/601-gcc34-arm-ldm.patch
@@ -0,0 +1,119 @@
+--- gcc-3.4.0/gcc/config/arm/arm.c.arm-ldm	2004-02-27 09:51:05.000000000 -0500
++++ gcc-3.4.0/gcc/config/arm/arm.c	2004-04-24 18:16:25.000000000 -0400
+@@ -8520,6 +8520,26 @@
+   return_used_this_function = 0;  
+ }
+ 
++/* Return the number (counting from 0) of
++   the least significant set bit in MASK.  */
++
++#ifdef __GNUC__
++inline
++#endif
++static int
++number_of_first_bit_set (mask)
++     int mask;
++{
++  int bit;
++
++  for (bit = 0;
++       (mask & (1 << bit)) == 0;
++       ++bit)
++    continue;
++
++  return bit;
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -8753,27 +8773,47 @@
+ 	  saved_regs_mask |=   (1 << PC_REGNUM);
+ 	}
+ 
+-      /* Load the registers off the stack.  If we only have one register
+-	 to load use the LDR instruction - it is faster.  */
+-      if (saved_regs_mask == (1 << LR_REGNUM))
+-	{
+-	  /* The exception handler ignores the LR, so we do
+-	     not really need to load it off the stack.  */
+-	  if (eh_ofs)
+-	    asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
+-	  else
+-	    asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+-	}
+-      else if (saved_regs_mask)
++      if (saved_regs_mask)
+ 	{
+-	  if (saved_regs_mask & (1 << SP_REGNUM))
+-	    /* Note - write back to the stack register is not enabled
+-	       (ie "ldmfd sp!...").  We know that the stack pointer is
+-	       in the list of registers and if we add writeback the
+-	       instruction becomes UNPREDICTABLE.  */
+-	    print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++	  /* Load the registers off the stack.  If we only have one register
++	     to load use the LDR instruction - it is faster.  */
++	  if (bit_count (saved_regs_mask) == 1)
++	    {
++	      int reg = number_of_first_bit_set (saved_regs_mask);
++
++	      switch (reg)
++		{
++		case SP_REGNUM:
++		  /* Mustn't use base writeback when loading SP.  */
++		  asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
++		  break;
++		  
++		case LR_REGNUM:
++		  if (eh_ofs)
++		    {
++		      /* The exception handler ignores the LR, so we do
++			 not really need to load it off the stack.  */
++		      asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
++		      break;
++		    }
++		  /* else fall through */
++		  
++		default:
++		  asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
++		  break;
++		}
++	    }
+ 	  else
+-	    print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++	    {
++	      if (saved_regs_mask & (1 << SP_REGNUM))
++		/* Note - write back to the stack register is not enabled
++		   (ie "ldmfd sp!...").  We know that the stack pointer is
++		   in the list of registers and if we add writeback the
++		   instruction becomes UNPREDICTABLE.  */
++		print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
++	      else
++		print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
++	    }
+ 	}
+ 
+       if (current_function_pretend_args_size)
+@@ -11401,22 +11441,6 @@
+     }
+ }
+ 
+-/* Return the number (counting from 0) of
+-   the least significant set bit in MASK.  */
+-
+-inline static int
+-number_of_first_bit_set (int mask)
+-{
+-  int bit;
+-
+-  for (bit = 0;
+-       (mask & (1 << bit)) == 0;
+-       ++bit)
+-    continue;
+-
+-  return bit;
+-}
+-
+ /* Generate code to return from a thumb function.
+    If 'reg_containing_return_addr' is -1, then the return address is
+    actually on the stack, at the stack pointer.  */
diff --git a/openwrt/toolchain/gcc/3.4.3/602-sdk-libstdc++-includes.patch b/openwrt/toolchain/gcc/3.4.3/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~	2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am	2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+ 
+ libmath_la_SOURCES = stubs.c
+ 
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+ 
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old	2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am	2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ 	$(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ 
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+ 
+ 
+ 
diff --git a/openwrt/toolchain/gcc/3.4.3/700-pr15068-fix.patch b/openwrt/toolchain/gcc/3.4.3/700-pr15068-fix.patch
new file mode 100644
index 0000000000..2977765c5f
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/700-pr15068-fix.patch
@@ -0,0 +1,44 @@
+See http://gcc.gnu.org/PR15068
+
+Fixes error
+
+../sysdeps/generic/s_fmax.c: In function `__fmax':
+../sysdeps/generic/s_fmax.c:28: internal compiler error: in elim_reg_cond, at flow.c:3257
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <URL:http://gcc.gnu.org/bugs.html> for instructions.
+make[2]: *** [/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/build-glibc/math/s_fmax.o] Error 1
+make[2]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822/math'
+make[1]: *** [math/others] Error 2
+make[1]: Leaving directory `/home/dank/wk/crosstool-0.28-rc35/build/arm-unknown-linux-gnu/gcc-3.4.1-glibc-20040822/glibc-20040822'
+make: *** [all] Error 2
+
+[ rediffed against gcc-3.4.1, with elbow grease, ending up with same thing as
+http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3 ]
+
+--- gcc-3.4.1/gcc/flow.c.old	2004-02-27 19:39:19.000000000 -0800
++++ gcc-3.4.1/gcc/flow.c	2004-08-26 07:29:46.000000000 -0700
+@@ -1878,6 +1878,7 @@
+ 	  rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ 	  rtx cond_true = XEXP (set_src, 0);
+ 	  rtx reg = XEXP (cond_true, 0);
++ 	  enum rtx_code inv_cond;
+ 
+ 	  if (GET_CODE (reg) == SUBREG)
+ 	    reg = SUBREG_REG (reg);
+@@ -1886,11 +1887,13 @@
+ 	     in the form of a comparison of a register against zero.  
+ 	     If the condition is more complex than that, then it is safe
+ 	     not to record any information.  */
+-	  if (GET_CODE (reg) == REG
++ 	  inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ 	  if (inv_cond != UNKNOWN
++	      && GET_CODE (reg) == REG
+ 	      && XEXP (cond_true, 1) == const0_rtx)
+ 	    {
+ 	      rtx cond_false
+-		= gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++		= gen_rtx_fmt_ee (inv_cond,
+ 				  GET_MODE (cond_true), XEXP (cond_true, 0),
+ 				  XEXP (cond_true, 1));
+ 	      if (GET_CODE (XEXP (set_src, 1)) == PC)
diff --git a/openwrt/toolchain/gcc/3.4.3/800-arm-bigendian.patch b/openwrt/toolchain/gcc/3.4.3/800-arm-bigendian.patch
new file mode 100644
index 0000000000..0bae8f474c
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/800-arm-bigendian.patch
@@ -0,0 +1,70 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-16 15:43:40.000000000 -0500
+@@ -30,17 +30,34 @@
+ /* Do not assume anything about header files.  */
+ #define NO_IMPLICIT_EXTERN_C
+ 
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ /* Default is to use APCS-32 mode.  */
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT \
++		( ARM_FLAG_APCS_32 | \
++		  ARM_FLAG_MMU_TRAPS | \
++		  TARGET_ENDIAN_DEFAULT )
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -101,7 +118,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #endif
+ 
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-08-16 16:01:50.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-16 16:01:25.000000000 -0500
+@@ -672,6 +672,11 @@
+ 	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	case $target in
++	arm*b-*)
++		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++		;;
++	esac
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
diff --git a/openwrt/toolchain/gcc/3.4.3/810-arm-bigendian-uclibc.patch b/openwrt/toolchain/gcc/3.4.3/810-arm-bigendian-uclibc.patch
new file mode 100644
index 0000000000..a4d87e2317
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/810-arm-bigendian-uclibc.patch
@@ -0,0 +1,27 @@
+diff -urN gcc-3.4.1-dist/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-dist/gcc/config/arm/linux-elf.h	2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-08-16 16:06:24.000000000 -0500
+@@ -107,7 +107,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+diff -urN gcc-3.4.1-dist/gcc/config.gcc gcc-3.4.1/gcc/config.gcc
+--- gcc-3.4.1-dist/gcc/config.gcc	2004-08-16 16:08:18.000000000 -0500
++++ gcc-3.4.1/gcc/config.gcc	2004-08-16 16:03:25.000000000 -0500
+@@ -666,6 +666,11 @@
+ 	;;
+ arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
+ 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++	case $target in
++	arm*b-*)
++		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++		;;
++	esac
+ 	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
diff --git a/openwrt/toolchain/gcc/3.4.3/arm-softfloat.patch.conditional b/openwrt/toolchain/gcc/3.4.3/arm-softfloat.patch.conditional
new file mode 100644
index 0000000000..19d1b90dac
--- /dev/null
+++ b/openwrt/toolchain/gcc/3.4.3/arm-softfloat.patch.conditional
@@ -0,0 +1,270 @@
+Note... modified my mjn3 to not conflict with the big endian arm patch.
+Warning!!!  Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
+Also changed
+  #define SUBTARGET_EXTRA_ASM_SPEC "\
+  %{!mcpu=*:-mcpu=xscale} \
+  %{mhard-float:-mfpu=fpa} \
+  %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+to
+  #define SUBTARGET_EXTRA_ASM_SPEC "\
+  %{mhard-float:-mfpu=fpa} \
+  %{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+in gcc/config/arm/linux-elf.h.
+#
+# Submitted:
+#
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# Description:
+#
+# Nicholas Pitre released this patch for gcc soft-float support here: 
+# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
+#
+# This version has been adapted to work with gcc 3.4.0.
+#
+# The original patch doesn't distinguish between softfpa and softvfp modes
+# in the way Nicholas Pitre probably meant.  His description is:
+#
+# "Default is to use APCS-32 mode with soft-vfp.  The old Linux default for
+# floats can be achieved with -mhard-float or with the configure
+# --with-float=hard option.  If -msoft-float or --with-float=soft is used then
+# software float support will be used just like the default but with the legacy
+# big endian word ordering for double float representation instead."
+#
+# Which means the following:
+#
+# * If you compile without -mhard-float or -msoft-float, you should get
+#   software floating point, using the VFP format.  The produced object file
+#   should have these flags in its header:
+#
+#     private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+# * If you compile with -mhard-float, you should get hardware floating point,
+#   which always uses the FPA format.  Object file header flags should be:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+# * If you compile with -msoft-float, you should get software floating point,
+#   using the FPA format.  This is done for compatibility reasons with many
+#   existing distributions.  Object file header flags should be:
+#
+#     private flags = 200: [APCS-32] [FPA float format] [software FP]
+#
+# The original patch from Nicholas Pitre contained the following constructs:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
+#
+# However, gcc doesn't accept this ";:" notation, used in the 3rd line.  This
+# is probably the reason Robert Schwebel modified it to:
+#
+#   #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+#     %{mhard-float:-mfpu=fpa} \
+#     %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
+#
+# But this causes the following behaviour:
+#
+# * If you compile without -mhard-float or -msoft-float, the compiler generates
+#   software floating point instructions, but *nothing* is passed to the
+#   assembler, which results in an object file which has flags:
+#
+#     private flags = 0: [APCS-32] [FPA float format]
+#
+#   This is not correct!
+#
+# * If you compile with -mhard-float, the compiler generates hardware floating
+#   point instructions, and passes "-mfpu=fpa" to the assembler, which results
+#   in an object file which has the same flags as in the previous item, but now
+#   those *are* correct.
+#    
+# * If you compile with -msoft-float, the compiler generates software floating
+#   point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
+#   order) to the assembler, which results in an object file with flags:
+#
+#   private flags = 600: [APCS-32] [VFP float format] [software FP]
+#
+#   This is not correct, because the last "-mfpu=" option on the assembler
+#   command line determines the actual FPU convention used (which should be FPA
+#   in this case).
+#
+# Therefore, I modified this patch to get the desired behaviour.  Every
+# instance of the notation:
+#
+#   %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
+#
+# was changed to:
+#
+#   %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
+#
+# I also did the following:
+# 
+# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
+#   be consistent with Nicholas' original patch.
+# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
+#   macros I could find.  I think that if you compile without any options, you
+#   would like to get the defaults. :)
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+#   anymore.  (The required functions are now in libgcc.)
+
+diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
+--- gcc-3.4.1-old/gcc/config/arm/coff.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/coff.h	2004-09-02 21:51:15.000000000 -0500
+@@ -31,11 +31,16 @@
+ #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
+ 
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+ 
+ /* This is COFF, but prefer stabs.  */
+diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
+--- gcc-3.4.1-old/gcc/config/arm/elf.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -46,7 +46,9 @@
+ 
+ #ifndef SUBTARGET_ASM_FLOAT_SPEC
+ #define SUBTARGET_ASM_FLOAT_SPEC "\
+-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
++%{mapcs-float:-mfloat} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ #endif
+ 
+ #ifndef ASM_SPEC
+@@ -106,12 +108,17 @@
+ #endif
+ 
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
++  { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
+ #endif
+ 
+ #define TARGET_ASM_FILE_START_APP_OFF true
+diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h	2004-09-02 21:50:52.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/linux-elf.h	2004-09-02 22:00:49.000000000 -0500
+@@ -44,12 +44,26 @@
+ #define TARGET_LINKER_EMULATION "armelf_linux"
+ #endif
+ 
+-/* Default is to use APCS-32 mode.  */
++/*
++ * Default is to use APCS-32 mode with soft-vfp.
++ * The old Linux default for floats can be achieved with -mhard-float
++ * or with the configure --with-float=hard option.
++ * If -msoft-float or --with-float=soft is used then software float 
++ * support will be used just like the default but with the legacy
++ * big endian word ordering for double float representation instead.
++ */
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT \
+-		( ARM_FLAG_APCS_32 | \
+-		  ARM_FLAG_MMU_TRAPS | \
+-		  TARGET_ENDIAN_DEFAULT )
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_APCS_32	\
++	| ARM_FLAG_SOFT_FLOAT	\
++	| TARGET_ENDIAN_DEFAULT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_MMU_TRAPS )
++
++#undef  SUBTARGET_EXTRA_ASM_SPEC
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+ 
+@@ -57,7 +71,7 @@
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
++	{ "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
+ 
+ #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+ 
+@@ -72,7 +86,7 @@
+    %{shared:-lc} \
+    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+ 
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+ 
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
+--- gcc-3.4.1-old/gcc/config/arm/t-linux	2003-09-20 16:09:07.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/t-linux	2004-09-02 21:51:15.000000000 -0500
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+ 
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++	_fixsfsi _fixunssfsi
+ 
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
+diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h	2004-02-24 08:25:22.000000000 -0600
++++ gcc-3.4.1/gcc/config/arm/unknown-elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -30,7 +30,12 @@
+ 
+ /* Default to using APCS-32 and software floating point.  */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
++#define TARGET_DEFAULT		\
++	( ARM_FLAG_SOFT_FLOAT	\
++	| ARM_FLAG_VFP		\
++	| ARM_FLAG_APCS_32	\
++	| ARM_FLAG_APCS_FRAME	\
++	| ARM_FLAG_MMU_TRAPS )
+ #endif
+ 
+ /* Now we define the strings used to build the spec file.  */
+diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
+--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h	2003-07-01 18:26:43.000000000 -0500
++++ gcc-3.4.1/gcc/config/arm/xscale-elf.h	2004-09-02 21:51:15.000000000 -0500
+@@ -49,11 +49,12 @@
+ 		     endian, regardless of the endian-ness of the memory
+ 		     system.  */
+ 		     
+-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
+-  %{mhard-float:-mfpu=fpa} \
+-  %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
++#define SUBTARGET_EXTRA_ASM_SPEC "\
++%{!mcpu=*:-mcpu=xscale} \
++%{mhard-float:-mfpu=fpa} \
++%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
+ 
+ #ifndef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
++  { "mlittle-endian", "mno-thumb-interwork", "marm" }
+ #endif
diff --git a/openwrt/toolchain/gcc/Config.in b/openwrt/toolchain/gcc/Config.in
new file mode 100644
index 0000000000..9403aba278
--- /dev/null
+++ b/openwrt/toolchain/gcc/Config.in
@@ -0,0 +1,76 @@
+# Choose gcc version.
+# WARNING -- 2.95 currently only builds for i386, arm, mips*, and powerpc.
+# WARNING -- 2.95 does not currently build natively for the target.
+
+comment "Gcc Options"
+
+choice
+	prompt "GCC compiler Version"
+	default BR2_GCC_VERSION_3_4_2
+	help
+	  Select the version of gcc you wish to use.
+
+	config BR2_GCC_VERSION_2_95
+		bool "gcc 2.95"
+		depends on BR2_arm || BR2_i386 || BR2_mips || BR2_powerpc
+
+	config BR2_GCC_VERSION_3_3_3
+		bool "gcc 3.3.3"
+
+	config BR2_GCC_VERSION_3_3_4
+		bool "gcc 3.3.4"
+
+	config BR2_GCC_VERSION_3_3_5
+		bool "gcc 3.3.5"
+
+	config BR2_GCC_VERSION_3_4_0
+		bool "gcc 3.4.0"
+
+	config BR2_GCC_VERSION_3_4_1
+		bool "gcc 3.4.1"
+
+	config BR2_GCC_VERSION_3_4_2
+		bool "gcc 3.4.2"
+
+	config BR2_GCC_VERSION_3_4_3
+		bool "gcc 3.4.3"
+
+endchoice
+
+config BR2_GCC_VERSION
+	string
+	default "2.95"      if BR2_GCC_VERSION_2_95
+	default "3.3.3"     if BR2_GCC_VERSION_3_3_3
+	default "3.3.4"     if BR2_GCC_VERSION_3_3_4
+	default "3.3.5"     if BR2_GCC_VERSION_3_3_5
+	default "3.4.0"     if BR2_GCC_VERSION_3_4_0
+	default "3.4.1"     if BR2_GCC_VERSION_3_4_1
+	default "3.4.2"     if BR2_GCC_VERSION_3_4_2
+	default "3.4.3"     if BR2_GCC_VERSION_3_4_3
+
+
+config BR2_GCC_USE_SJLJ_EXCEPTIONS
+	string
+	default "--enable-sjlj-exceptions"
+	help
+	    Currently the unwind stuff seems to work for staticly linked apps
+	    but not dynamic.  So use setjmp/longjmp exceptions by default.
+
+config BR2_EXTRA_GCC_CONFIG_OPTIONS
+	string "Additional gcc options"
+	default ""
+	help
+	    Any additional gcc options you may want to include....
+
+config BR2_INSTALL_LIBSTDCPP
+	bool "Build/install c++ compiler and libstdc++?"
+	default n
+	help
+	    Build/install c++ compiler and libstdc++?
+
+config BR2_INSTALL_LIBGCJ
+	bool "Build/install java compiler and libgcj?"
+	default n
+	depends on BR2_INSTALL_LIBSTDCPP
+	help
+	    Build/install java compiler and libgcj?
diff --git a/openwrt/toolchain/gcc/Config.in.2 b/openwrt/toolchain/gcc/Config.in.2
new file mode 100644
index 0000000000..c523b97051
--- /dev/null
+++ b/openwrt/toolchain/gcc/Config.in.2
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_GCC_TARGET
+	bool "native toolchain in the target filesystem"
+	default n
+	help
+	  If you want the target system to be able to run 
+	  binutils/gcc and compile native code, say Y here.
diff --git a/openwrt/toolchain/gcc/Makefile.in b/openwrt/toolchain/gcc/Makefile.in
new file mode 100644
index 0000000000..2963ffbe3c
--- /dev/null
+++ b/openwrt/toolchain/gcc/Makefile.in
@@ -0,0 +1,26 @@
+GCC_VERSION:=$(strip $(subst ",, $(BR2_GCC_VERSION)))
+#"
+GCC_USE_SJLJ_EXCEPTIONS:=$(strip $(subst ",, $(BR2_GCC_USE_SJLJ_EXCEPTIONS)))
+#"
+TARGET_OPTIMIZATION:=$(strip $(subst ",, $(BR2_TARGET_OPTIMIZATION)))
+#""
+
+
+ifeq ($(BR2_SOFT_FLOAT),y)
+# gcc 3.4.x soft float configuration is different than previous versions.
+ifeq ($(findstring 3.4.,$(GCC_VERSION)),3.4.)
+SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft
+else
+SOFT_FLOAT_CONFIG_OPTION:=--without-float
+endif
+TARGET_SOFT_FLOAT:=-msoft-float
+ARCH_FPU_SUFFIX:=_nofpu
+else
+SOFT_FLOAT_CONFIG_OPTION:=
+TARGET_SOFT_FLOAT:=
+ARCH_FPU_SUFFIX:=
+endif
+
+ifeq ($(strip $(BR2_PACKAGE_GCC_TARGET)),y)
+TARGETS+=gcc_target
+endif
diff --git a/openwrt/toolchain/gcc/gcc-uclibc-2.95.mk b/openwrt/toolchain/gcc/gcc-uclibc-2.95.mk
new file mode 100644
index 0000000000..e5a36e4ccb
--- /dev/null
+++ b/openwrt/toolchain/gcc/gcc-uclibc-2.95.mk
@@ -0,0 +1,277 @@
+# Makefile for to build a gcc/uClibc toolchain
+#
+# Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You 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
+
+ifeq ($(findstring 2.95,$(GCC_VERSION)),2.95)
+GCC_VERSION:=$(strip $(GCC_VERSION))
+
+GCC_SITE:=http://www.uclibc.org/downloads/toolchain
+GCC_SOURCE:=gcc-20011006.tar.bz2
+GCC_DIR:=$(TOOL_BUILD_DIR)/gcc-20011006
+GCC_CAT:=bzcat
+
+STLPORT_SITE=http://www.stlport.org/archive
+STLPORT_SOURCE=STLport-4.5.3.tar.gz
+STLPORT_DIR=$(TOOL_BUILD_DIR)/STLport-4.5.3
+GCC_STRIP_HOST_BINARIES:=true
+
+#############################################################
+#
+# Setup some initial stuff
+#
+#############################################################
+
+ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
+TARGET_LANGUAGES:=c,c++
+STLPORT_TARGET=stlport
+else
+TARGET_LANGUAGES:=c
+STLPORT_TARGET=
+endif
+
+#############################################################
+#
+# build the first pass gcc compiler
+#
+#############################################################
+GCC_BUILD_DIR1:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)-initial
+
+$(DL_DIR)/$(GCC_SOURCE):
+	mkdir -p $(DL_DIR)
+	$(WGET) -P $(DL_DIR) $(GCC_SITE)/$(GCC_SOURCE)
+
+$(GCC_DIR)/.unpacked: $(DL_DIR)/$(GCC_SOURCE)
+	mkdir -p $(TOOL_BUILD_DIR)
+	$(GCC_CAT) $(DL_DIR)/$(GCC_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(GCC_DIR)/.unpacked
+
+$(GCC_DIR)/.patched: $(GCC_DIR)/.unpacked
+	# Apply any files named gcc-*.patch from the source directory to gcc
+	toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc/$(GCC_VERSION) \*.patch\*
+	#
+	# We do not wish to build the libstdc++ library provided with gcc,
+	# since it doesn't seem to work at all with uClibc plus gcc 2.95...
+	#
+	mv $(GCC_DIR)/libstdc++ $(GCC_DIR)/libstdc++.orig
+	mv $(GCC_DIR)/libio $(GCC_DIR)/libio.orig
+	#
+	touch $(GCC_DIR)/.patched
+
+# The --without-headers option stopped working with gcc 3.0 and has never been
+# # fixed, so we need to actually have working C library header files prior to
+# # the step or libgcc will not build...
+$(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched
+	mkdir -p $(GCC_BUILD_DIR1)
+	-mkdir -p $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/include
+	# Important!  Required for limits.h to be fixed.
+	ln -sf include $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
+	(cd $(GCC_BUILD_DIR1); PATH=$(TARGET_PATH) \
+		$(GCC_DIR)/configure \
+		--prefix=$(STAGING_DIR) \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--enable-languages=c \
+		--disable-shared \
+		--includedir=$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/include \
+		--with-headers=$(TOOL_BUILD_DIR)/uClibc_dev/usr/include \
+		--disable-__cxa_atexit \
+		--enable-target-optspace \
+		--with-gnu-ld \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) \
+		$(EXTRA_GCC_CONFIG_OPTIONS));
+	touch $(GCC_BUILD_DIR1)/.configured
+
+$(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc
+	touch $(GCC_BUILD_DIR1)/.compiled
+
+$(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc
+	#rm -f $(STAGING_DIR)/bin/gccbug $(STAGING_DIR)/bin/gcov
+	#rm -rf $(STAGING_DIR)/info $(STAGING_DIR)/man $(STAGING_DIR)/share/doc $(STAGING_DIR)/share/locale
+
+gcc_initial: uclibc-configured binutils $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc
+
+gcc_initial-clean:
+	rm -rf $(GCC_BUILD_DIR1)
+	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+
+gcc_initial-dirclean:
+	rm -rf $(GCC_BUILD_DIR1)
+
+#############################################################
+#
+# STLport -- an alternative C++ library
+#
+#############################################################
+STLPORT_PATCH=toolchain/gcc/2.95/STLport-4.5.3.patch
+
+$(DL_DIR)/$(STLPORT_SOURCE):
+	$(WGET) -P $(DL_DIR) $(STLPORT_SITE)/$(STLPORT_SOURCE)
+
+$(STLPORT_DIR)/Makefile: $(DL_DIR)/$(STLPORT_SOURCE) $(STLPORT_PATCH)
+	zcat $(DL_DIR)/$(STLPORT_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) - 
+	cat $(STLPORT_PATCH) | patch -d $(STLPORT_DIR) -p1
+
+$(STLPORT_DIR)/lib/libstdc++.a: $(STLPORT_DIR)/Makefile
+	$(MAKE) ARCH=$(OPTIMIZE_FOR_CPU) PREFIX=$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME) -C $(STLPORT_DIR)
+
+$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libstdc++.a: $(STLPORT_DIR)/lib/libstdc++.a
+	$(MAKE) ARCH=$(OPTIMIZE_FOR_CPU) PREFIX=$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME) -C $(STLPORT_DIR) install
+
+stlport: $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libstdc++.a
+
+stlport-source: $(DL_DIR)/$(STLPORT_SOURCE)
+
+stlport-clean:
+	rm -f $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libstdc++*
+	rm -f $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/include/c++*
+	-$(MAKE) -C $(STLPORT_DIR) clean
+
+stlport-dirclean:
+	rm -f $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libstdc++*
+	rm -f $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/include/g++-v3*
+	rm -rf $(STLPORT_DIR)
+
+#############################################################
+#
+# second pass compiler build.  Build the compiler targeting 
+# the newly built shared uClibc library.
+#
+#############################################################
+GCC_BUILD_DIR2:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)-final
+
+$(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libc.a
+	mkdir -p $(GCC_BUILD_DIR2)
+	(cd $(GCC_BUILD_DIR2); PATH=$(TARGET_PATH) \
+		$(GCC_DIR)/configure \
+		--prefix=$(STAGING_DIR) \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--enable-languages=$(TARGET_LANGUAGES) \
+		--enable-shared \
+		--with-gxx-include-dir=$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/include/c++ \
+		--disable-__cxa_atexit \
+		--enable-target-optspace \
+		--with-gnu-ld \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) \
+		$(EXTRA_GCC_CONFIG_OPTIONS));
+	touch $(GCC_BUILD_DIR2)/.configured
+
+$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) all
+	touch $(GCC_BUILD_DIR2)/.compiled
+
+$(GCC_BUILD_DIR2)/.installed: $(GCC_BUILD_DIR2)/.compiled
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install
+	# Strip the host binaries
+ifeq ($(GCC_STRIP_HOST_BINARIES),true)
+	-strip --strip-all -R .note -R .comment $(STAGING_DIR)/bin/*
+endif
+	# Set up the symlinks to enable lying about target name.
+	set -e; \
+	(cd $(STAGING_DIR); \
+		ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
+		cd bin; \
+		for app in $(REAL_GNU_TARGET_NAME)-* ; do \
+			ln -sf $${app} \
+		   	$(GNU_TARGET_NAME)$${app##$(REAL_GNU_TARGET_NAME)}; \
+		done; \
+	);
+	touch $(GCC_BUILD_DIR2)/.installed
+
+gcc: uclibc-configured binutils gcc_initial $(LIBFLOAT_TARGET) uclibc \
+	$(GCC_BUILD_DIR2)/.installed $(GCC_TARGETS) $(STLPORT_TARGET)
+
+gcc-source: $(DL_DIR)/$(GCC_SOURCE)
+
+gcc-clean:
+	rm -rf $(GCC_BUILD_DIR2)
+	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+
+gcc-dirclean:
+	rm -rf $(GCC_BUILD_DIR2)
+
+#############################################################
+#
+# Next build target gcc compiler
+#
+#############################################################
+GCC_BUILD_DIR3:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target
+
+$(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR2)/.installed
+	mkdir -p $(GCC_BUILD_DIR3)
+	(cd $(GCC_BUILD_DIR3); PATH=$(TARGET_PATH) \
+		$(GCC_DIR)/configure \
+		--prefix=/usr \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(REAL_GNU_TARGET_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--enable-languages=$(TARGET_LANGUAGES) \
+		--enable-shared \
+		--with-gxx-include-dir=/usr/include/c++ \
+		--disable-__cxa_atexit \
+		--enable-target-optspace \
+		--with-gnu-ld \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) \
+		$(EXTRA_GCC_CONFIG_OPTIONS));
+	touch $(GCC_BUILD_DIR3)/.configured
+
+$(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured
+	PATH=$(TARGET_PATH) \
+	$(MAKE) $(TARGET_GCC_ARGS) -C $(GCC_BUILD_DIR3) all
+	touch $(GCC_BUILD_DIR3)/.compiled
+
+$(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled
+	PATH=$(TARGET_PATH) \
+	$(MAKE) DESTDIR=$(TARGET_DIR) -C $(GCC_BUILD_DIR3) install
+	# Remove broken specs file (cross compile flag is set).
+	rm -f $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
+	-(cd $(TARGET_DIR)/bin; find -type f | xargs $(STRIP) > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/usr/bin; find -type f | xargs $(STRIP) > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION); $(STRIP) cc1 cc1plus collect2 > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/usr/lib; $(STRIP) libstdc++.so.*.*.* > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/lib; $(STRIP) libgcc_s.so.*.*.* > /dev/null 2>&1)
+	#
+	rm -f $(TARGET_DIR)/usr/lib/*.la*
+	#rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
+	#	$(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
+	# Work around problem of missing syslimits.h
+	cp -f $(STAGING_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/include/syslimits.h $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/include/
+	# These are in /lib, so...
+	#rm -rf $(TARGET_DIR)/usr/lib/libgcc_s.so*
+	#touch -c $(TARGET_DIR)/usr/bin/gcc
+
+gcc_target: uclibc_target binutils_target $(TARGET_DIR)/usr/bin/gcc
+
+gcc_target-clean:
+	rm -rf $(GCC_BUILD_DIR3)
+	rm -f $(TARGET_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+
+gcc_target-dirclean:
+	rm -rf $(GCC_BUILD_DIR3)
+
+endif
diff --git a/openwrt/toolchain/gcc/gcc-uclibc-3.x.mk b/openwrt/toolchain/gcc/gcc-uclibc-3.x.mk
new file mode 100644
index 0000000000..3457b4a69b
--- /dev/null
+++ b/openwrt/toolchain/gcc/gcc-uclibc-3.x.mk
@@ -0,0 +1,321 @@
+# Makefile for to build a gcc/uClibc toolchain
+#
+# Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You 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
+
+ifneq ($(findstring 2.95,$(GCC_VERSION)),2.95)
+GCC_VERSION:=$(strip $(GCC_VERSION))
+
+#GCC_SITE:=ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(GCC_VERSION)
+GCC_SITE:=http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(GCC_VERSION)
+
+#
+# snapshots....
+#GCC_VERSION:=3.3-20031013
+#GCC_SITE:=http://gcc.get-software.com/snapshots/$(GCC_VERSION)
+#
+GCC_SOURCE:=gcc-$(GCC_VERSION).tar.bz2
+GCC_DIR:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)
+GCC_CAT:=bzcat
+GCC_STRIP_HOST_BINARIES:=true
+
+#############################################################
+#
+# Setup some initial stuff
+#
+#############################################################
+
+ifeq ($(BR2_INSTALL_LIBGCJ),y)
+TARGET_LANGUAGES:=c,c++,java
+else
+ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
+TARGET_LANGUAGES:=c,c++
+else
+TARGET_LANGUAGES:=c
+endif
+endif
+
+#############################################################
+#
+# build the first pass gcc compiler
+#
+#############################################################
+GCC_BUILD_DIR1:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)-initial
+
+$(DL_DIR)/$(GCC_SOURCE):
+	mkdir -p $(DL_DIR)
+	$(WGET) -P $(DL_DIR) $(GCC_SITE)/$(GCC_SOURCE)
+
+$(GCC_DIR)/.unpacked: $(DL_DIR)/$(GCC_SOURCE)
+	mkdir -p $(TOOL_BUILD_DIR)
+	$(GCC_CAT) $(DL_DIR)/$(GCC_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(GCC_DIR)/.unpacked
+
+$(GCC_DIR)/.patched: $(GCC_DIR)/.unpacked
+	# Apply any files named gcc-*.patch from the source directory to gcc
+	toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc/$(GCC_VERSION) \*.patch
+	# Note: The soft float situation has improved considerably with gcc 3.4.x.
+	# We can dispense with the custom spec files, as well as libfloat for the arm case.
+	# However, we still need a patch for arm.  There's a similar patch for gcc 3.3.x
+	# which needs to be integrated so we can kill of libfloat for good, except for
+	# anyone (?) who might still be using gcc 2.95.  mjn3
+ifeq ($(BR2_SOFT_FLOAT),y)
+ifeq ("$(strip $(ARCH))","arm")
+	toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc/$(GCC_VERSION) arm-softfloat.patch.conditional
+endif
+ifeq ("$(strip $(ARCH))","armeb")
+	toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc/$(GCC_VERSION) arm-softfloat.patch.conditional
+endif
+	# Not yet updated to 3.4.1.
+	#ifeq ("$(strip $(ARCH))","i386")
+	#toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc i386-gcc-soft-float.patch
+	#endif
+endif
+	touch $(GCC_DIR)/.patched
+
+# The --without-headers option stopped working with gcc 3.0 and has never been
+# # fixed, so we need to actually have working C library header files prior to
+# # the step or libgcc will not build...
+
+$(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched
+	mkdir -p $(GCC_BUILD_DIR1)
+	(cd $(GCC_BUILD_DIR1); PATH=$(TARGET_PATH) \
+		$(GCC_DIR)/configure \
+		--prefix=$(STAGING_DIR) \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--enable-languages=c \
+		--disable-shared \
+		--with-sysroot=$(TOOL_BUILD_DIR)/uClibc_dev/ \
+		--disable-__cxa_atexit \
+		--enable-target-optspace \
+		--with-gnu-ld \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) \
+		$(GCC_WITH_CPU) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
+		$(EXTRA_GCC_CONFIG_OPTIONS));
+	touch $(GCC_BUILD_DIR1)/.configured
+
+$(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc
+	touch $(GCC_BUILD_DIR1)/.compiled
+
+$(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc
+	#rm -f $(STAGING_DIR)/bin/gccbug $(STAGING_DIR)/bin/gcov
+	#rm -rf $(STAGING_DIR)/info $(STAGING_DIR)/man $(STAGING_DIR)/share/doc $(STAGING_DIR)/share/locale
+
+gcc_initial: uclibc-configured binutils $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc
+
+gcc_initial-clean:
+	rm -rf $(GCC_BUILD_DIR1)
+	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+
+gcc_initial-dirclean:
+	rm -rf $(GCC_BUILD_DIR1)
+
+#############################################################
+#
+# second pass compiler build.  Build the compiler targeting 
+# the newly built shared uClibc library.
+#
+#############################################################
+#
+# Sigh... I had to rework things because using --with-gxx-include-dir
+# causes issues with include dir search order for g++.  This seems to
+# have something to do with "path translations" and possibly doesn't
+# affect gcc-target.  However, I haven't tested gcc-target yet so no
+# guarantees.  mjn3
+
+GCC_BUILD_DIR2:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)-final
+$(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched $(STAGING_DIR)/lib/libc.a
+	mkdir -p $(GCC_BUILD_DIR2)
+	# Important!  Required for limits.h to be fixed.
+	ln -sf ../include $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
+	(cd $(GCC_BUILD_DIR2); PATH=$(TARGET_PATH) \
+		$(GCC_DIR)/configure \
+		--prefix=$(STAGING_DIR) \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--enable-languages=$(TARGET_LANGUAGES) \
+		--enable-shared \
+		--disable-__cxa_atexit \
+		--enable-target-optspace \
+		--with-gnu-ld \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) \
+		$(GCC_WITH_CPU) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
+		$(GCC_USE_SJLJ_EXCEPTIONS) \
+		$(EXTRA_GCC_CONFIG_OPTIONS));
+	touch $(GCC_BUILD_DIR2)/.configured
+
+$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) all
+	touch $(GCC_BUILD_DIR2)/.compiled
+
+$(GCC_BUILD_DIR2)/.installed: $(GCC_BUILD_DIR2)/.compiled
+	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install
+	# Strip the host binaries
+ifeq ($(GCC_STRIP_HOST_BINARIES),true)
+	-strip --strip-all -R .note -R .comment $(STAGING_DIR)/bin/*
+endif
+	# Set up the symlinks to enable lying about target name.
+	set -e; \
+	(cd $(STAGING_DIR); \
+		ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
+		cd bin; \
+		for app in $(REAL_GNU_TARGET_NAME)-* ; do \
+			ln -sf $${app} \
+		   	$(GNU_TARGET_NAME)$${app##$(REAL_GNU_TARGET_NAME)}; \
+		done; \
+	);
+	#
+	# Now for the ugly 3.3.x soft float hack...
+	#
+ifeq ($(BR2_SOFT_FLOAT),y)
+ifeq ($(findstring 3.3.,$(GCC_VERSION)),3.3.)
+	# Make sure we have a soft float specs file for this arch
+	if [ ! -f toolchain/gcc/$(GCC_VERSION)/specs-$(ARCH)-soft-float ] ; then \
+		echo soft float configured but no specs file for this arch ; \
+		/bin/false ; \
+	fi;
+	# Replace specs file with one that defaults to soft float mode.
+	if [ ! -f $(STAGING_DIR)/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs ] ; then \
+		echo staging dir specs file is missing ; \
+		/bin/false ; \
+	fi;
+	cp toolchain/gcc/$(GCC_VERSION)/specs-$(ARCH)-soft-float $(STAGING_DIR)/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
+endif
+endif
+	#
+	# Ok... that's enough of that.
+	#
+	touch $(GCC_BUILD_DIR2)/.installed
+
+$(TARGET_DIR)/lib/libgcc_s.so.1: $(GCC_BUILD_DIR2)/.installed
+	# These are in /lib, so...
+	rm -rf $(TARGET_DIR)/usr/lib/libgcc_s.so*
+	-$(STRIP) $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libgcc_s.so.1
+	-cp -a $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libgcc_s* $(TARGET_DIR)/lib/
+
+gcc: uclibc-configured binutils gcc_initial $(LIBFLOAT_TARGET) uclibc \
+	$(TARGET_DIR)/lib/libgcc_s.so.1 $(GCC_BUILD_DIR2)/.installed $(GCC_TARGETS)
+
+gcc-source: $(DL_DIR)/$(GCC_SOURCE)
+
+gcc-clean:
+	rm -rf $(GCC_BUILD_DIR2)
+	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)*
+
+gcc-dirclean:
+	rm -rf $(GCC_BUILD_DIR2)
+
+#############################################################
+#
+# Next build target gcc compiler
+#
+#############################################################
+GCC_BUILD_DIR3:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target
+
+$(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR2)/.installed
+	mkdir -p $(GCC_BUILD_DIR3)
+	(cd $(GCC_BUILD_DIR3); PATH=$(TARGET_PATH) \
+		$(GCC_DIR)/configure \
+		--prefix=/usr \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(REAL_GNU_TARGET_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--enable-languages=$(TARGET_LANGUAGES) \
+		--enable-shared \
+		--with-gxx-include-dir=/usr/include/c++ \
+		--disable-__cxa_atexit \
+		--enable-target-optspace \
+		--with-gnu-ld \
+		$(DISABLE_NLS) \
+		$(MULTILIB) \
+		$(SOFT_FLOAT_CONFIG_OPTION) \
+		$(GCC_WITH_CPU) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
+		$(GCC_USE_SJLJ_EXCEPTIONS) \
+		$(EXTRA_GCC_CONFIG_OPTIONS));
+	touch $(GCC_BUILD_DIR3)/.configured
+
+$(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured
+	PATH=$(TARGET_PATH) \
+	$(MAKE) $(TARGET_GCC_ARGS) -C $(GCC_BUILD_DIR3) all
+	touch $(GCC_BUILD_DIR3)/.compiled
+
+#
+# gcc-lib dir changes names to gcc with 3.4.mumble
+#
+ifeq ($(findstring 3.4.,$(GCC_VERSION)),3.4.)
+GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
+else
+GCC_LIB_SUBDIR=lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
+endif
+
+$(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled
+	PATH=$(TARGET_PATH) \
+	$(MAKE) DESTDIR=$(TARGET_DIR) -C $(GCC_BUILD_DIR3) install
+	# Remove broken specs file (cross compile flag is set).
+	rm -f $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/specs
+	#
+	# Now for the ugly 3.3.x soft float hack...
+	#
+ifeq ($(BR2_SOFT_FLOAT),y)
+ifeq ($(findstring 3.3.,$(GCC_VERSION)),3.3.)
+	# Add a specs file that defaults to soft float mode.
+	cp toolchain/gcc/$(GCC_VERSION)/specs-$(ARCH)-soft-float $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
+	# Make sure gcc does not think we are cross compiling
+	$(SED) "s/^1/0/;" $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
+endif
+endif
+	#
+	# Ok... that's enough of that.
+	#
+	-(cd $(TARGET_DIR)/bin; find -type f | xargs $(STRIP) > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/usr/bin; find -type f | xargs $(STRIP) > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR); $(STRIP) cc1 cc1plus collect2 > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/usr/lib; $(STRIP) libstdc++.so.*.*.* > /dev/null 2>&1)
+	-(cd $(TARGET_DIR)/lib; $(STRIP) libgcc_s.so.*.*.* > /dev/null 2>&1)
+	#
+	rm -f $(TARGET_DIR)/usr/lib/*.la*
+	#rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
+	#	$(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
+	# Work around problem of missing syslimits.h
+	@if [ ! -f $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/include/syslimits.h ] ; then \
+		echo "warning: working around missing syslimits.h" ; \
+		cp -f $(STAGING_DIR)/$(GCC_LIB_SUBDIR)/include/syslimits.h \
+			$(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/include/ ; \
+	fi
+	# These are in /lib, so...
+	#rm -rf $(TARGET_DIR)/usr/lib/libgcc_s.so*
+	#touch -c $(TARGET_DIR)/usr/bin/gcc
+
+gcc_target: uclibc_target binutils_target $(TARGET_DIR)/usr/bin/gcc
+
+gcc_target-clean:
+	rm -rf $(GCC_BUILD_DIR3)
+	rm -f $(TARGET_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)*
+
+gcc_target-dirclean:
+	rm -rf $(GCC_BUILD_DIR3)
+
+endif
diff --git a/openwrt/toolchain/gcc/i386-gcc-soft-float.patch b/openwrt/toolchain/gcc/i386-gcc-soft-float.patch
new file mode 100644
index 0000000000..97501087e2
--- /dev/null
+++ b/openwrt/toolchain/gcc/i386-gcc-soft-float.patch
@@ -0,0 +1,61 @@
+diff -urN gcc-3.3.2-orig/gcc/config/i386/i386.h gcc-3.3.2/gcc/config/i386/i386.h
+--- gcc-3.3.2-orig/gcc/config/i386/i386.h	2003-06-25 16:18:31.000000000 -0500
++++ gcc-3.3.2/gcc/config/i386/i386.h	2003-10-22 01:46:57.000000000 -0500
+@@ -653,6 +653,7 @@
+ /* Define for XFmode or TFmode extended real floating point support.
+    The XFmode is specified by i386 ABI, while TFmode may be faster
+    due to alignment and simplifications in the address calculations.  */
++#if 0
+ #define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96)
+ #define MAX_LONG_DOUBLE_TYPE_SIZE 128
+ #ifdef __x86_64__
+@@ -660,6 +661,17 @@
+ #else
+ #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96
+ #endif
++#else
++	  /* Set up for x86 soft float with 64-bit long doubles, since that's
++	   * all the soft float emulation supports. */
++#define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : (TARGET_80387 ? 96 : 64))
++#define MAX_LONG_DOUBLE_TYPE_SIZE 128
++#ifdef __x86_64__
++#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
++#else
++#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE (TARGET_80387 ? 96 : 64)
++#endif
++#endif
+ 
+ /* Set the value of FLT_EVAL_METHOD in float.h.  When using only the
+    FPU, assume that the fpcw is set to extended precision; when using
+diff -urN gcc-3.3.2-orig/gcc/config/t-linux gcc-3.3.2/gcc/config/t-linux
+--- gcc-3.3.2-orig/gcc/config/t-linux-uclibc	2003-06-04 11:56:11.000000000 -0500
++++ gcc-3.3.2/gcc/config/t-linux-uclibc	2003-10-22 01:46:39.000000000 -0500
+@@ -21,3 +21,28 @@
+ LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
+   $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
+ LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
++
++##############################################
++# We want fine grained libraries, so use the new code to build the
++# floating point emulation libraries.
++FPBIT = fp-bit.c
++DPBIT = dp-bit.c
++
++#LIB2FUNCS_EXTRA = xp-bit.c
++
++dp-bit.c: $(srcdir)/config/fp-bit.c
++	echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
++	echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
++	echo '#endif'           >> dp-bit.c
++	cat $(srcdir)/config/fp-bit.c >> dp-bit.c
++
++fp-bit.c: $(srcdir)/config/fp-bit.c
++	echo '#define FLOAT' > fp-bit.c
++	echo '#ifdef __LITTLE_ENDIAN__' >> fp-bit.c
++	echo '#define FLOAT_BIT_ORDER_MISMATCH' >>fp-bit.c
++	echo '#endif'           >> fp-bit.c
++	cat $(srcdir)/config/fp-bit.c >> fp-bit.c
++
++#MULTILIB_OPTIONS = msoft-float
++#MULTILIB_DIRNAMES = soft-float
++
diff --git a/openwrt/toolchain/gdb/5.3/050-debian-subset.patch b/openwrt/toolchain/gdb/5.3/050-debian-subset.patch
new file mode 100644
index 0000000000..e44b15ccdf
--- /dev/null
+++ b/openwrt/toolchain/gdb/5.3/050-debian-subset.patch
@@ -0,0 +1,633 @@
+Patch pending upstream, probably acceptable.
+--------------------------------------------
+
+
+
+Daniel Jacobowitz <drow@mvista.com> writes:
+> I like this.  The way func_frame_chain_valid should really be used is
+> by something like:
+> 
+>   /* NOTE: tm-i386nw.h and tm-i386v4.h override this.  */
+>   set_gdbarch_frame_chain_valid (gdbarch, file_frame_chain_valid);
+> 
+> (copied from i386-tdep.c).
+> 
+> Does this patch work for you?
+
+Yes, thanks.  I've included a revised version of my patch below.
+
+> I'm curious as to why we can't just set this universally, or at least a
+> little more globally.  Most things that have a main () use it as a
+> normal main ().  I'd propose that we set it as the default frame chain,
+> and provide/document an option to ignore inside_main_func.
+
+Well, gdbarch is never supposed to change the default behavior of
+macros; this helps us convert pre-gdbarch targets incrementally.
+Simply turning on gdbarch for one's target ideally wouldn't change its
+behavior at all.
+
+
+[Patch revised for Debian snapshot]
+--- snap/gdb/i386-linux-tdep.c.orig	2002-08-18 19:53:57.000000000 -0400
++++ snap/gdb/i386-linux-tdep.c	2002-08-18 19:54:31.000000000 -0400
+@@ -452,6 +452,9 @@
+ 
+   set_solib_svr4_fetch_link_map_offsets (gdbarch,
+ 				       i386_linux_svr4_fetch_link_map_offsets);
++
++  set_gdbarch_frame_chain_valid (gdbarch,
++				 generic_func_frame_chain_valid);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+[Hurd needs 6.  Take 8, since it does no real harm.]
+
+
+Package: gdb
+Severity: normal
+Tags: patch, sid
+
+Hello,
+
+GDB will crash on the Hurd after issuing the 'show' and hitting enter
+a few times:
+
+../../gdb/ui-out.c:130: gdb-internal-error: push_level: Assertion       +`uiout->level >= 0 && uiout->level < MAX_UI_OUT_LEVELS' failed.
+
+the problem is that MAX_UI_OUT_LEVELS is not high enough for the extra
+option we have on the Hurd, it should be rised to 6 then, which works
+fine:
+
+--- gdb-5.2.cvs20020401/gdb/ui-out.c~   Fri May  3 02:19:20 2002
++++ gdb-5.2.cvs20020401/gdb/ui-out.c    Fri May  3 02:19:32 2002
+@@ -45,7 +45,7 @@
+    is always available.  Stack/nested level 0 is reserved for the
+    top-level result. */
+ 
+-enum { MAX_UI_OUT_LEVELS = 5 };
++enum { MAX_UI_OUT_LEVELS = 8 };
+ 
+ struct ui_out_level
+   {
+
+-- 
+Robert Millan
+
+"5 years from now everyone will be running
+free GNU on their 200 MIPS, 64M SPARCstation-5"
+
+              Andrew S. Tanenbaum, 30 Jan 1992
+
+
+Submitted upstream, not liked very much.  It's a hack, but it will do for
+now.
+
+2002-07-31  Daniel Jacobowitz  <drow@mvista.com>
+
+	Fix PR gdb/568
+	* thread-db.c (lwp_from_thread): Only warn if unable to find
+	the thread.
+
+Index: thread-db.c
+===================================================================
+RCS file: /cvs/src/src/gdb/thread-db.c,v
+retrieving revision 1.22
+diff -u -p -r1.22 thread-db.c
+--- gdb/gdb/thread-db.c	23 Mar 2002 17:38:13 -0000	1.22
++++ gdb/gdb/thread-db.c	31 Jul 2002 16:29:52 -0000
+@@ -260,6 +260,12 @@ lwp_from_thread (ptid_t ptid)
+     return ptid;
+ 
+   err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (ptid), &th);
++  if (err == TD_ERR)
++    {
++      warning ("Cannot find thread %ld: %s",
++	       (long) GET_THREAD (ptid), thread_db_err_str (err));
++      return ptid;
++    }
+   if (err != TD_OK)
+     error ("Cannot find thread %ld: %s",
+ 	   (long) GET_THREAD (ptid), thread_db_err_str (err));
+From Michael Fedrowitz <michaelf@debian.org>.  Not submitted to FSF yet.
+
+ Hi,
+
+gdb fails to build from source on m68k because some definitions have
+been removed from tm-m68k.h. The patch below readds them.
+
+-Michael
+
+
+diff -urN gdb-5.2.cvs20020818.orig/gdb/config/m68k/tm-m68k.h gdb-5.2.cvs20020818/gdb/config/m68k/tm-m68k.h
+--- gdb-5.2.cvs20020818.orig/gdb/config/m68k/tm-m68k.h	2002-07-10 19:01:38.000000000 +0200
++++ gdb-5.2.cvs20020818/gdb/config/m68k/tm-m68k.h	2002-10-06 18:01:59.000000000 +0200
+@@ -26,8 +26,11 @@
+ /* Generic 68000 stuff, to be included by other tm-*.h files.  */
+ 
+ /* D0_REGNM and A0_REGNUM must be defined here because they are
+-   used by the monitor.  */
++   used by the monitor. FPC_REGNUM, FPS_REGNUM and FPI_REGNUM are
++   defined here because they are used by m68klinux-nat.c.  */
+ 
+ #define D0_REGNUM 0
+ #define A0_REGNUM 8
+-
++#define FPC_REGNUM 26
++#define FPS_REGNUM 27
++#define FPI_REGNUM 28
+
+
+2002-11-24  Daniel Jacobowitz  <drow@mvista.com>
+
+	* doublest.c (convert_floatformat_to_doublest): Cast exp_bias to int.
+	* config/alpha/alpha-linux.mh (MH_CFLAGS): Add -mieee.
+
+--- gdb-5.2.debian90.cvs20021120/gdb/doublest.c.orig	2002-11-24 17:48:16.000000000 -0500
++++ gdb-5.2.debian90.cvs20021120/gdb/doublest.c	2002-11-24 17:48:25.000000000 -0500
+@@ -177,7 +177,7 @@
+   if (!special_exponent)
+     exponent -= fmt->exp_bias;
+   else if (exponent == 0)
+-    exponent = 1 - fmt->exp_bias;
++    exponent = 1 - (int)fmt->exp_bias;
+ 
+   /* Build the result algebraically.  Might go infinite, underflow, etc;
+      who cares. */
+--- gdb-5.2.debian90.cvs20021120/gdb/config/alpha/alpha-linux.mh.orig	2002-11-24 17:50:30.000000000 -0500
++++ gdb-5.2.debian90.cvs20021120/gdb/config/alpha/alpha-linux.mh	2002-11-24 17:50:41.000000000 -0500
+@@ -8,3 +8,5 @@
+ 
+ MMALLOC = 
+ MMALLOC_CFLAGS = -DNO_MMALLOC 
++
++MH_CFLAGS = -mieee
+In CVS but not in 5.3 branch...
+
+2002-10-23  Daniel Jacobowitz  <drow@mvista.com>
+
+	* lin-lwp.c (lin_lwp_resume): Remove resume_all test for !step.
+
+Index: lin-lwp.c
+===================================================================
+RCS file: /cvs/src/src/gdb/lin-lwp.c,v
+retrieving revision 1.35
+diff -u -p -r1.35 lin-lwp.c
+--- gdb-5.2.90/gdb/lin-lwp.c	27 Aug 2002 22:37:06 -0000	1.35
++++ gdb-5.2.90/gdb/lin-lwp.c	23 Oct 2002 04:23:13 -0000
+@@ -579,11 +579,8 @@ lin_lwp_resume (ptid_t ptid, int step, e
+   struct lwp_info *lp;
+   int resume_all;
+ 
+-  /* Apparently the interpretation of PID is dependent on STEP: If
+-     STEP is non-zero, a specific PID means `step only this process
+-     id'.  But if STEP is zero, then PID means `continue *all*
+-     processes, but give the signal only to this one'.  */
+-  resume_all = (PIDGET (ptid) == -1) || !step;
++  /* A specific PTID means `step only this process id'.  */
++  resume_all = (PIDGET (ptid) == -1);
+ 
+   if (resume_all)
+     iterate_over_lwps (resume_set_callback, NULL);
+
+Not submitted yet, testing.
+
+--- gdb-5.2.90/gdb/alpha-tdep.c.orig	Sun Nov 24 21:42:53 2002
++++ gdb-5.2.90/gdb/alpha-tdep.c	Sun Nov 24 21:48:26 2002
+@@ -99,10 +99,12 @@
+ 
+ static alpha_extra_func_info_t heuristic_proc_desc (CORE_ADDR,
+ 						    CORE_ADDR,
+-						    struct frame_info *);
++						    struct frame_info *,
++						    int);
+ 
+ static alpha_extra_func_info_t find_proc_desc (CORE_ADDR,
+-					       struct frame_info *);
++					       struct frame_info *,
++					       int);
+ 
+ #if 0
+ static int alpha_in_lenient_prologue (CORE_ADDR, CORE_ADDR);
+@@ -512,7 +514,7 @@
+   if (tmp != 0)
+     pc = tmp;
+ 
+-  proc_desc = find_proc_desc (pc, frame->next);
++  proc_desc = find_proc_desc (pc, frame->next, 1);
+   pcreg = proc_desc ? PROC_PC_REG (proc_desc) : ALPHA_RA_REGNUM;
+ 
+   if (frame->signal_handler_caller)
+@@ -596,10 +598,10 @@
+ 
+ static alpha_extra_func_info_t
+ heuristic_proc_desc (CORE_ADDR start_pc, CORE_ADDR limit_pc,
+-		     struct frame_info *next_frame)
++		     struct frame_info *next_frame, int read_sp_p)
+ {
+-  CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
+-  CORE_ADDR vfp = sp;
++  CORE_ADDR sp;
++  CORE_ADDR vfp;
+   CORE_ADDR cur_pc;
+   int frame_size;
+   int has_frame_reg = 0;
+@@ -607,6 +609,11 @@
+   int pcreg = -1;
+   int regno;
+ 
++  if (read_sp_p)
++    vfp = sp = read_next_frame_reg (next_frame, SP_REGNUM);
++  else
++    vfp = sp = 0;
++
+   if (start_pc == 0)
+     return NULL;
+   memset (&temp_proc_desc, '\0', sizeof (temp_proc_desc));
+@@ -761,7 +768,7 @@
+   CORE_ADDR func_addr, func_end;
+ 
+   if (!proc_desc)
+-    proc_desc = find_proc_desc (pc, NULL);
++    proc_desc = find_proc_desc (pc, NULL, 0);
+ 
+   if (proc_desc)
+     {
+@@ -807,7 +814,7 @@
+ }
+ 
+ static alpha_extra_func_info_t
+-find_proc_desc (CORE_ADDR pc, struct frame_info *next_frame)
++find_proc_desc (CORE_ADDR pc, struct frame_info *next_frame, int read_sp_p)
+ {
+   alpha_extra_func_info_t proc_desc;
+   struct block *b;
+@@ -879,7 +886,7 @@
+ 	    {
+ 	      alpha_extra_func_info_t found_heuristic =
+ 	      heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
+-				   pc, next_frame);
++				   pc, next_frame, read_sp_p);
+ 	      if (found_heuristic)
+ 		{
+ 		  PROC_LOCALOFF (found_heuristic) =
+@@ -921,7 +928,7 @@
+ 	startaddr = heuristic_proc_start (pc);
+ 
+       proc_desc =
+-	heuristic_proc_desc (startaddr, pc, next_frame);
++	heuristic_proc_desc (startaddr, pc, next_frame, read_sp_p);
+     }
+   return proc_desc;
+ }
+@@ -937,7 +944,7 @@
+   if (saved_pc == 0 || inside_entry_file (saved_pc))
+     return 0;
+ 
+-  proc_desc = find_proc_desc (saved_pc, frame);
++  proc_desc = find_proc_desc (saved_pc, frame, 1);
+   if (!proc_desc)
+     return 0;
+ 
+@@ -979,7 +986,7 @@
+ {
+   /* Use proc_desc calculated in frame_chain */
+   alpha_extra_func_info_t proc_desc =
+-  frame->next ? cached_proc_desc : find_proc_desc (frame->pc, frame->next);
++  frame->next ? cached_proc_desc : find_proc_desc (frame->pc, frame->next, 1);
+ 
+   frame->extra_info = (struct frame_extra_info *)
+     frame_obstack_alloc (sizeof (struct frame_extra_info));
+@@ -1291,7 +1298,7 @@
+   /* we need proc_desc to know how to restore the registers;
+      if it is NULL, construct (a temporary) one */
+   if (proc_desc == NULL)
+-    proc_desc = find_proc_desc (frame->pc, frame->next);
++    proc_desc = find_proc_desc (frame->pc, frame->next, 1);
+ 
+   /* Question: should we copy this proc_desc and save it in
+      frame->proc_desc?  If we do, who will free it?
+Not yet submitted upstream.  This requires some serious thinking about. 
+If the target stack worked in any logical way, this wouldn't be necessary...
+ending up with roughly:
+  thread_stratum: thread-db (silent reference to lin-lwp)
+  core_stratum: corelow
+  exec_stratum: exec
+  dummy_stratum: dummy
+just makes no sense.
+
+This patch fixes debugging threaded applications which are statically linked
+without breaking debugging threaded core files.  It also fixes the PIDs in
+generate-core-file'd corefiles.  Mostly.
+
+diff -x '*~' -ur o/gdb-5.2.debian90.cvs20021120/gdb/corelow.c gdb-5.2.debian90.cvs20021120/gdb/corelow.c
+--- o/gdb-5.2.debian90.cvs20021120/gdb/corelow.c	2002-09-18 13:23:15.000000000 -0400
++++ gdb-5.2.debian90.cvs20021120/gdb/corelow.c	2002-12-03 14:03:32.000000000 -0500
+@@ -350,7 +350,7 @@
+   bfd_map_over_sections (core_bfd, add_to_thread_list,
+ 			 bfd_get_section_by_name (core_bfd, ".reg"));
+ 
+-  if (ontop)
++  if (ontop || 1)
+     {
+       /* Fetch all registers from core file.  */
+       target_fetch_registers (-1);
+diff -x '*~' -ur o/gdb-5.2.debian90.cvs20021120/gdb/linux-proc.c gdb-5.2.debian90.cvs20021120/gdb/linux-proc.c
+--- o/gdb-5.2.debian90.cvs20021120/gdb/linux-proc.c	2002-12-03 14:13:52.000000000 -0500
++++ gdb-5.2.debian90.cvs20021120/gdb/linux-proc.c	2002-12-03 13:56:34.000000000 -0500
+@@ -177,7 +177,7 @@
+ #ifdef FILL_FPXREGSET
+   gdb_fpxregset_t fpxregs;
+ #endif
+-  unsigned long merged_pid = ptid_get_tid (ptid) << 16 | ptid_get_pid (ptid);
++  unsigned long merged_pid = ptid_get_tid (ptid) << 16; /*  | ptid_get_pid (ptid); */
+ 
+   fill_gregset (&gregs, -1);
+   note_data = (char *) elfcore_write_prstatus (obfd, 
+diff -x '*~' -ur o/gdb-5.2.debian90.cvs20021120/gdb/target.c gdb-5.2.debian90.cvs20021120/gdb/target.c
+--- o/gdb-5.2.debian90.cvs20021120/gdb/target.c	2002-09-18 13:23:22.000000000 -0400
++++ gdb-5.2.debian90.cvs20021120/gdb/target.c	2002-12-03 14:06:07.000000000 -0500
+@@ -1589,6 +1589,7 @@
+   dummy_target.to_find_memory_regions = dummy_find_memory_regions;
+   dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
+   dummy_target.to_magic = OPS_MAGIC;
++  cleanup_target (&dummy_target);
+ }
+ 
+ 
+diff -x '*~' -ur o/gdb-5.2.debian90.cvs20021120/gdb/thread-db.c gdb-5.2.debian90.cvs20021120/gdb/thread-db.c
+--- o/gdb-5.2.debian90.cvs20021120/gdb/thread-db.c	2002-12-03 14:13:50.000000000 -0500
++++ gdb-5.2.debian90.cvs20021120/gdb/thread-db.c	2002-12-03 13:39:54.000000000 -0500
+@@ -57,6 +57,31 @@
+ /* Non-zero if we're using this module's target vector.  */
+ static int using_thread_db;
+ 
++/* Macros to pass an event to the next target if we should not be handling it
++   here in the thread_stratum.  */
++#define FIND_NEXT_TARGET(METHOD_NAME)			\
++  struct target_ops *next_target = &thread_db_ops;	\
++  while (1)						\
++    {							\
++      next_target = find_target_beneath (next_target);	\
++      if (next_target->METHOD_NAME != NULL)		\
++	break;						\
++    }
++
++#define MAYBE_HAND_DOWN(METHOD_NAME,ARGS)		\
++  if (proc_handle.pid == 0)				\
++    {							\
++      FIND_NEXT_TARGET (METHOD_NAME);			\
++      (*next_target->METHOD_NAME) ARGS;			\
++      return;						\
++    }
++#define MAYBE_HAND_DOWN_RETURN(METHOD_NAME,ARGS)	\
++  if (proc_handle.pid == 0)				\
++    {							\
++      FIND_NEXT_TARGET (METHOD_NAME);			\
++      return (*next_target->METHOD_NAME) ARGS;		\
++    }
++
+ /* Non-zero if we have to keep this module's target vector active
+    across re-runs.  */
+ static int keep_thread_db;
+@@ -489,9 +514,7 @@
+ {
+   td_err_e err;
+ 
+-  /* Don't attempt to use thread_db on targets which can not run
+-     (core files).  */
+-  if (objfile == NULL || !target_has_execution)
++  if (objfile == NULL)
+     {
+       /* All symbols have been discarded.  If the thread_db target is
+          active, deactivate it now.  */
+@@ -515,7 +538,10 @@
+   /* Initialize the structure that identifies the child process.  Note
+      that at this point there is no guarantee that we actually have a
+      child process.  */
+-  proc_handle.pid = GET_PID (inferior_ptid);
++  if (target_has_execution)
++    proc_handle.pid = GET_PID (inferior_ptid);
++  else
++    proc_handle.pid = 0;
+ 
+   /* Now attempt to open a connection to the thread library.  */
+   err = td_ta_new_p (&proc_handle, &thread_agent);
+@@ -758,6 +784,9 @@
+   struct cleanup *old_chain = save_inferior_ptid ();
+   int xfer;
+ 
++  MAYBE_HAND_DOWN_RETURN (to_xfer_memory, (memaddr, myaddr, len, write,
++					   attrib, target));
++
+   if (is_thread (inferior_ptid))
+     {
+       /* FIXME: This seems to be necessary to make sure breakpoints
+@@ -782,6 +811,8 @@
+   gdb_prfpregset_t fpregset;
+   td_err_e err;
+ 
++  MAYBE_HAND_DOWN (to_fetch_registers, (regno));
++
+   if (!is_thread (inferior_ptid))
+     {
+       /* Pass the request to the target beneath us.  */
+@@ -819,6 +850,8 @@
+   gdb_prfpregset_t fpregset;
+   td_err_e err;
+ 
++  MAYBE_HAND_DOWN (to_store_registers, (regno));
++
+   if (!is_thread (inferior_ptid))
+     {
+       /* Pass the request to the target beneath us.  */
+@@ -908,6 +941,8 @@
+   td_thrinfo_t ti;
+   td_err_e err;
+ 
++  MAYBE_HAND_DOWN_RETURN (to_thread_alive, (ptid));
++
+   if (is_thread (ptid))
+     {
+       err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (ptid), &th);
+@@ -961,6 +996,8 @@
+ {
+   td_err_e err;
+ 
++  MAYBE_HAND_DOWN (to_find_new_threads, ());
++
+   /* Iterate over all user-space threads to discover new threads.  */
+   err = td_ta_thr_iter_p (thread_agent, find_new_threads_callback, NULL,
+ 			  TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
+@@ -972,6 +1009,8 @@
+ static char *
+ thread_db_pid_to_str (ptid_t ptid)
+ {
++  MAYBE_HAND_DOWN_RETURN (to_pid_to_str, (ptid));
++
+   if (is_thread (ptid))
+     {
+       static char buf[64];
+Trivial.  Need to submit this.
+
+--- gdb-5.2.debian90.cvs20021120/gdb/tracepoint.c.orig	2002-12-03 14:35:44.000000000 -0500
++++ gdb-5.2.debian90.cvs20021120/gdb/tracepoint.c	2002-12-03 14:43:02.000000000 -0500
+@@ -861,6 +861,8 @@
+       else
+ 	line = gdb_readline (0);
+ 
++      if (line == NULL || *line == EOF)
++	break;
+       linetype = validate_actionline (&line, t);
+       if (linetype == BADLINE)
+ 	continue;		/* already warned -- collect another line */
+Fix build on Sparc.
+
+--- gdb-5.3/gdb/sparc-nat.c.orig	2003-01-04 00:11:28.000000000 -0500
++++ gdb-5.3/gdb/sparc-nat.c	2003-01-04 00:12:42.000000000 -0500
+@@ -33,6 +33,13 @@
+ #include <sys/ptrace.h>
+ #include <sys/wait.h>
+ #ifdef __linux__
++/* Sadly, <sys/ucontext.h> conflicts with <asm/reg.h> on Linux.  And
++   -D_GNU_SOURCE brings in <sys/ucontext.h> implicitly with <signal.h>.
++   Hack around this.  */
++#undef FPU_REGS_TYPE
++#define fpu asm_reg_fpu
++#define fq asm_reg_fq
++#define fpq asm_reg_fpq
+ #include <asm/reg.h>
+ #else
+ #include <machine/reg.h>
+diff -urN gdb-5.3/gdb/gdbserver.orig/gdbreplay.c gdb-5.3/gdb/gdbserver/gdbreplay.c
+--- gdb-5.3/gdb/gdbserver.orig/gdbreplay.c	2002-07-09 11:38:58.000000000 -0600
++++ gdb-5.3/gdb/gdbserver/gdbreplay.c	2003-08-20 08:44:20.000000000 -0600
+@@ -54,14 +54,15 @@
+ perror_with_name (char *string)
+ {
+ #ifndef STDC_HEADERS
+-  extern int sys_nerr;
+   extern char *sys_errlist[];
+   extern int errno;
+ #endif
+   const char *err;
+   char *combined;
+ 
+-  err = (errno < sys_nerr) ? sys_errlist[errno] : "unknown error";
++  err = strerror (errno);
++  if (err == NULL)
++    err = "unknown error";
+   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
+   strcpy (combined, string);
+   strcat (combined, ": ");
+diff -urN gdb-5.3/gdb/gdbserver.orig/low-hppabsd.c gdb-5.3/gdb/gdbserver/low-hppabsd.c
+--- gdb-5.3/gdb/gdbserver.orig/low-hppabsd.c	2002-01-17 14:13:49.000000000 -0700
++++ gdb-5.3/gdb/gdbserver/low-hppabsd.c	2003-08-20 08:46:04.000000000 -0600
+@@ -61,7 +61,7 @@
+       execv (program, allargs);
+ 
+       fprintf (stderr, "Cannot exec %s: %s.\n", program,
+-	       errno < sys_nerr ? sys_errlist[errno] : "unknown error");
++	       strerror (errno));
+       fflush (stderr);
+       _exit (0177);
+     }
+diff -urN gdb-5.3/gdb/gdbserver.orig/low-lynx.c gdb-5.3/gdb/gdbserver/low-lynx.c
+--- gdb-5.3/gdb/gdbserver.orig/low-lynx.c	2002-01-17 14:13:49.000000000 -0700
++++ gdb-5.3/gdb/gdbserver/low-lynx.c	2003-08-20 08:46:18.000000000 -0600
+@@ -79,7 +79,7 @@
+ 
+       fprintf (stderr, "GDBserver (process %d):  Cannot exec %s: %s.\n",
+ 	       getpid (), program,
+-	       errno < sys_nerr ? sys_errlist[errno] : "unknown error");
++	       strerror (errno));
+       fflush (stderr);
+       _exit (0177);
+     }
+diff -urN gdb-5.3/gdb/gdbserver.orig/low-nbsd.c gdb-5.3/gdb/gdbserver/low-nbsd.c
+--- gdb-5.3/gdb/gdbserver.orig/low-nbsd.c	2002-01-17 14:13:49.000000000 -0700
++++ gdb-5.3/gdb/gdbserver/low-nbsd.c	2003-08-20 08:46:27.000000000 -0600
+@@ -137,7 +137,7 @@
+       execv (program, allargs);
+ 
+       fprintf (stderr, "Cannot exec %s: %s.\n", program,
+-	       errno < sys_nerr ? sys_errlist[errno] : "unknown error");
++	       strerror (errno));
+       fflush (stderr);
+       _exit (0177);
+     }
+diff -urN gdb-5.3/gdb/gdbserver.orig/low-sparc.c gdb-5.3/gdb/gdbserver/low-sparc.c
+--- gdb-5.3/gdb/gdbserver.orig/low-sparc.c	2002-01-17 14:13:50.000000000 -0700
++++ gdb-5.3/gdb/gdbserver/low-sparc.c	2003-08-20 08:46:38.000000000 -0600
+@@ -44,7 +44,6 @@
+ #include <sys/ptrace.h>
+ #include <sys/reg.h>
+ 
+-extern int sys_nerr;
+ extern char **sys_errlist;
+ extern int errno;
+ 
+@@ -67,7 +66,7 @@
+       execv (program, allargs);
+ 
+       fprintf (stderr, "Cannot exec %s: %s.\n", program,
+-	       errno < sys_nerr ? sys_errlist[errno] : "unknown error");
++	       strerror (errno));
+       fflush (stderr);
+       _exit (0177);
+     }
+diff -urN gdb-5.3/gdb/gdbserver.orig/low-sun3.c gdb-5.3/gdb/gdbserver/low-sun3.c
+--- gdb-5.3/gdb/gdbserver.orig/low-sun3.c	2002-01-17 14:13:50.000000000 -0700
++++ gdb-5.3/gdb/gdbserver/low-sun3.c	2003-08-20 08:46:51.000000000 -0600
+@@ -41,7 +41,6 @@
+ #include <sys/ptrace.h>
+ #include <machine/reg.h>
+ 
+-extern int sys_nerr;
+ extern char **sys_errlist;
+ extern int errno;
+ 
+@@ -64,7 +63,7 @@
+       execv (program, allargs);
+ 
+       fprintf (stderr, "Cannot exec %s: %s.\n", program,
+-	       errno < sys_nerr ? sys_errlist[errno] : "unknown error");
++	       strerror (errno));
+       fflush (stderr);
+       _exit (0177);
+     }
+diff -urN gdb-5.3/gdb/gdbserver.orig/utils.c gdb-5.3/gdb/gdbserver/utils.c
+--- gdb-5.3/gdb/gdbserver.orig/utils.c	2003-08-20 08:47:56.000000000 -0600
++++ gdb-5.3/gdb/gdbserver/utils.c	2003-08-20 08:48:15.000000000 -0600
+@@ -33,16 +33,13 @@
+ perror_with_name (char *string)
+ {
+ #ifndef STDC_HEADERS
+-  extern int sys_nerr;
+-  extern char *sys_errlist[];
+   extern int errno;
+ #endif
+   const char *err;
+   char *combined;
+ 
+-  if (errno < sys_nerr)
+-    err = sys_errlist[errno];
+-  else
++  err = strerror (errno);
++  if (err == NULL)
+     err = "unknown error";
+ 
+   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
+diff -urN gdb-5.3/gdb/gdbserver.orig/linux-low.c.orig gdb-5.3/gdb/gdbserver/linux-low.c.orig
+--- gdb-5.3/gdb/gdbserver.orig/linux-low.c	2003-08-20 08:40:27.000000000 -0600
++++ gdb-5.3/gdb/gdbserver/linux-low.c	2003-08-20 08:44:54.000000000 -0600
+@@ -175,8 +175,7 @@
+   if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0)
+     {
+       fprintf (stderr, "Cannot attach to process %d: %s (%d)\n", pid,
+-	       errno < sys_nerr ? sys_errlist[errno] : "unknown error",
+-	       errno);
++	       strerror (errno), errno);
+       fflush (stderr);
+ 
+       /* If we fail to attach to an LWP, just return.  */
+
diff --git a/openwrt/toolchain/gdb/5.3/100-uclibc.patch b/openwrt/toolchain/gdb/5.3/100-uclibc.patch
new file mode 100644
index 0000000000..f9853035e3
--- /dev/null
+++ b/openwrt/toolchain/gdb/5.3/100-uclibc.patch
@@ -0,0 +1,154 @@
+diff -urN gdb-5.3/bfd/config.bfd gdb-5.3-new/bfd/config.bfd
+--- gdb-5.3/bfd/config.bfd	2002-09-05 15:34:35.000000000 -0500
++++ gdb-5.3-new/bfd/config.bfd	2004-01-11 06:25:31.000000000 -0600
+@@ -83,7 +83,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -97,7 +97,8 @@
+     targ_defvec=bfd_elf64_ia64_aix_little_vec
+     targ_selvecs="bfd_elf64_ia64_aix_big_vec bfd_efi_app_ia64_vec"
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf*)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | \
++  ia64*-*-linux-uclibc* | ia64*-*-elf*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -176,11 +177,12 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux*)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+@@ -313,7 +315,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -324,7 +326,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -424,7 +426,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3456]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -438,7 +440,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -589,7 +591,7 @@
+     targ_defvec=hp300hpux_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux*aout*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=m68klinux_vec
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+@@ -865,7 +867,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -887,8 +890,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcqnx_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1038,7 +1041,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1081,7 +1084,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+diff -urN gdb-5.3/bfd/configure gdb-5.3-new/bfd/configure
+--- gdb-5.3/bfd/configure	2002-08-28 05:38:44.000000000 -0500
++++ gdb-5.3-new/bfd/configure	2004-01-11 06:27:15.000000000 -0600
+@@ -1677,6 +1677,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5067,7 +5072,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5126,7 +5131,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3456]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
diff --git a/openwrt/toolchain/gdb/6.1.1/100-uclibc-conf.patch b/openwrt/toolchain/gdb/6.1.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..8dbd347637
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.1.1/100-uclibc-conf.patch
@@ -0,0 +1,290 @@
+diff -urN gdb-6.1.1-dist/bfd/config.bfd gdb-6.1.1/bfd/config.bfd
+--- gdb-6.1.1-dist/bfd/config.bfd	2004-03-13 06:37:09.000000000 -0600
++++ gdb-6.1.1/bfd/config.bfd	2004-08-08 05:01:47.000000000 -0500
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu | ia64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -208,7 +208,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -350,7 +350,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -361,7 +361,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-netbsd* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -483,7 +483,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -497,7 +497,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -667,7 +667,7 @@
+     targ_defvec=hp300hpux_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux*aout*)
++  m68*-*-linux*aout* | m68*-*-linux-uclibc*)
+     targ_defvec=m68klinux_vec
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+@@ -952,8 +952,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
+-  powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | powerpc-*-rtems* | \
++  powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss* )
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -984,8 +984,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* | \
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1141,7 +1141,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1188,7 +1188,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1257,7 +1257,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN gdb-6.1.1-dist/bfd/configure gdb-6.1.1/bfd/configure
+--- gdb-6.1.1-dist/bfd/configure	2004-03-13 06:37:09.000000000 -0600
++++ gdb-6.1.1/bfd/configure	2004-08-08 05:01:47.000000000 -0500
+@@ -1710,6 +1710,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5276,7 +5281,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5336,7 +5341,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5386,7 +5391,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5487,7 +5492,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN gdb-6.1.1-dist/bfd/configure.in gdb-6.1.1/bfd/configure.in
+--- gdb-6.1.1-dist/bfd/configure.in	2004-03-13 06:37:09.000000000 -0600
++++ gdb-6.1.1/bfd/configure.in	2004-08-08 05:01:47.000000000 -0500
+@@ -178,7 +178,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -259,7 +259,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -312,7 +312,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -397,7 +397,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN gdb-6.1.1-dist/libtool.m4 gdb-6.1.1/libtool.m4
+--- gdb-6.1.1-dist/libtool.m4	2003-04-10 22:58:39.000000000 -0500
++++ gdb-6.1.1/libtool.m4	2004-08-08 05:01:47.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gdb-6.1.1-dist/ltconfig gdb-6.1.1/ltconfig
+--- gdb-6.1.1-dist/ltconfig	2003-10-03 23:54:47.000000000 -0500
++++ gdb-6.1.1/ltconfig	2004-08-08 05:01:47.000000000 -0500
+@@ -602,7 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1259,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN gdb-6.1.1-dist/opcodes/configure gdb-6.1.1/opcodes/configure
+--- gdb-6.1.1-dist/opcodes/configure	2003-08-05 04:39:31.000000000 -0500
++++ gdb-6.1.1/opcodes/configure	2004-08-08 05:01:47.000000000 -0500
+@@ -1700,6 +1700,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/gdb/6.1.1/200-uclibc-readline-conf.patch b/openwrt/toolchain/gdb/6.1.1/200-uclibc-readline-conf.patch
new file mode 100644
index 0000000000..ffe792dd05
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.1.1/200-uclibc-readline-conf.patch
@@ -0,0 +1,15 @@
+--- gdb-6.1.1-dist/readline/configure	2003-05-27 18:29:47.000000000 -0500
++++ gdb-6.1.1/readline/configure	2004-08-09 14:20:23.000000000 -0500
+@@ -6249,7 +6249,12 @@
+ 
+ 
+ echo "$as_me:$LINENO: checking for mbstate_t" >&5
++echo $ECHO_N "bash_cv_have_mbstate_t=$bash_cv_have_mbstate_t" >&6
+ echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
++if test "${bash_cv_have_mbstate_t+set}" != set; then
++  bash_cv_have_mbstate_t=yes
++  echo $ECHO_N "WARNING!! forcing to yes!!! $ECHO_C" >&6
++fi
+ if test "${bash_cv_have_mbstate_t+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
diff --git a/openwrt/toolchain/gdb/6.2.1/100-uclibc-conf.patch b/openwrt/toolchain/gdb/6.2.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..d3645bfeaa
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.2.1/100-uclibc-conf.patch
@@ -0,0 +1,290 @@
+diff -urN gdb-6.2-dist/bfd/config.bfd gdb-6.2/bfd/config.bfd
+--- gdb-6.2-dist/bfd/config.bfd	2004-07-09 07:32:35.000000000 -0500
++++ gdb-6.2/bfd/config.bfd	2004-08-08 04:23:19.000000000 -0500
+@@ -129,7 +129,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -139,7 +139,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu | ia64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -224,7 +224,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -373,7 +373,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -384,7 +384,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-netbsd* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -507,7 +507,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -521,7 +521,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -691,7 +691,7 @@
+     targ_defvec=hp300hpux_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux*aout*)
++  m68*-*-linux*aout* | m68*-*-linux-uclibc*)
+     targ_defvec=m68klinux_vec
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+@@ -972,8 +972,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
+-  powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | powerpc-*-rtems* | \
++  powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss* )
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1009,8 +1009,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* | \
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1177,7 +1177,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1224,7 +1224,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1293,7 +1293,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN gdb-6.2-dist/bfd/configure gdb-6.2/bfd/configure
+--- gdb-6.2-dist/bfd/configure	2004-07-07 12:28:45.000000000 -0500
++++ gdb-6.2/bfd/configure	2004-08-08 04:27:01.000000000 -0500
+@@ -1698,6 +1698,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5264,7 +5269,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5328,7 +5333,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5366,7 +5371,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5470,7 +5475,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN gdb-6.2-dist/bfd/configure.in gdb-6.2/bfd/configure.in
+--- gdb-6.2-dist/bfd/configure.in	2004-07-07 12:28:45.000000000 -0500
++++ gdb-6.2/bfd/configure.in	2004-08-08 04:28:07.000000000 -0500
+@@ -164,7 +164,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -249,7 +249,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -290,7 +290,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -378,7 +378,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN gdb-6.2-dist/libtool.m4 gdb-6.2/libtool.m4
+--- gdb-6.2-dist/libtool.m4	2003-04-10 22:58:39.000000000 -0500
++++ gdb-6.2/libtool.m4	2004-08-08 03:48:33.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gdb-6.2-dist/ltconfig gdb-6.2/ltconfig
+--- gdb-6.2-dist/ltconfig	2003-10-03 23:54:47.000000000 -0500
++++ gdb-6.2/ltconfig	2004-08-08 03:48:33.000000000 -0500
+@@ -602,7 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1259,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN gdb-6.2-dist/opcodes/configure gdb-6.2/opcodes/configure
+--- gdb-6.2-dist/opcodes/configure	2004-07-07 12:28:53.000000000 -0500
++++ gdb-6.2/opcodes/configure	2004-08-08 04:53:55.000000000 -0500
+@@ -1701,6 +1701,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/gdb/6.2.1/200-uclibc-readline-conf.patch b/openwrt/toolchain/gdb/6.2.1/200-uclibc-readline-conf.patch
new file mode 100644
index 0000000000..ffe792dd05
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.2.1/200-uclibc-readline-conf.patch
@@ -0,0 +1,15 @@
+--- gdb-6.1.1-dist/readline/configure	2003-05-27 18:29:47.000000000 -0500
++++ gdb-6.1.1/readline/configure	2004-08-09 14:20:23.000000000 -0500
+@@ -6249,7 +6249,12 @@
+ 
+ 
+ echo "$as_me:$LINENO: checking for mbstate_t" >&5
++echo $ECHO_N "bash_cv_have_mbstate_t=$bash_cv_have_mbstate_t" >&6
+ echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
++if test "${bash_cv_have_mbstate_t+set}" != set; then
++  bash_cv_have_mbstate_t=yes
++  echo $ECHO_N "WARNING!! forcing to yes!!! $ECHO_C" >&6
++fi
+ if test "${bash_cv_have_mbstate_t+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
diff --git a/openwrt/toolchain/gdb/6.2.1/400-mips-coredump.patch b/openwrt/toolchain/gdb/6.2.1/400-mips-coredump.patch
new file mode 100644
index 0000000000..4e17ba7bea
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.2.1/400-mips-coredump.patch
@@ -0,0 +1,28 @@
+Sometime around 2.4.22-23, the mips pt_regs.h fields were reordered, breaking
+coredump handling by gdb for current kernels.  Update the hardcoded constants
+to reflect the change.
+--- gdb-6.2.1/gdb/mips-linux-tdep.c-orig	2004-10-29 14:23:55.000000000 -0500
++++ gdb-6.2.1/gdb/mips-linux-tdep.c	2004-10-29 14:26:44.000000000 -0500
+@@ -53,12 +53,22 @@
+ 
+ #define EF_REG0			6
+ #define EF_REG31		37
++
++#if 0
+ #define EF_LO			38
+ #define EF_HI			39
+ #define EF_CP0_EPC		40
+ #define EF_CP0_BADVADDR		41
+ #define EF_CP0_STATUS		42
+ #define EF_CP0_CAUSE		43
++#else
++#define EF_CP0_STATUS		38
++#define EF_LO			39
++#define EF_HI			40
++#define EF_CP0_BADVADDR		41
++#define EF_CP0_CAUSE		42
++#define EF_CP0_EPC		43
++#endif
+ 
+ #define EF_SIZE			180
+ 
diff --git a/openwrt/toolchain/gdb/6.2/100-uclibc-conf.patch b/openwrt/toolchain/gdb/6.2/100-uclibc-conf.patch
new file mode 100644
index 0000000000..d3645bfeaa
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.2/100-uclibc-conf.patch
@@ -0,0 +1,290 @@
+diff -urN gdb-6.2-dist/bfd/config.bfd gdb-6.2/bfd/config.bfd
+--- gdb-6.2-dist/bfd/config.bfd	2004-07-09 07:32:35.000000000 -0500
++++ gdb-6.2/bfd/config.bfd	2004-08-08 04:23:19.000000000 -0500
+@@ -129,7 +129,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -139,7 +139,7 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu | ia64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -216,7 +216,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -224,7 +224,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | arm*-*-conix* | \
+   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | arm-*-vxworks)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+@@ -373,7 +373,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -384,7 +384,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu* | hppa*-*-netbsd*)
++  hppa*-*-linux-gnu* | hppa*-*-netbsd* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -507,7 +507,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -521,7 +521,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -691,7 +691,7 @@
+     targ_defvec=hp300hpux_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux*aout*)
++  m68*-*-linux*aout* | m68*-*-linux-uclibc*)
+     targ_defvec=m68klinux_vec
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+@@ -972,8 +972,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
+-  powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | powerpc-*-rtems* | \
++  powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss* )
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1009,8 +1009,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* | \
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1177,7 +1177,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1224,7 +1224,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+@@ -1293,7 +1293,7 @@
+     targ_underscore=yes
+     ;;
+ 
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_vax_vec
+     ;;
+ 
+diff -urN gdb-6.2-dist/bfd/configure gdb-6.2/bfd/configure
+--- gdb-6.2-dist/bfd/configure	2004-07-07 12:28:45.000000000 -0500
++++ gdb-6.2/bfd/configure	2004-08-08 04:27:01.000000000 -0500
+@@ -1698,6 +1698,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5264,7 +5269,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5328,7 +5333,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5366,7 +5371,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -5470,7 +5475,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN gdb-6.2-dist/bfd/configure.in gdb-6.2/bfd/configure.in
+--- gdb-6.2-dist/bfd/configure.in	2004-07-07 12:28:45.000000000 -0500
++++ gdb-6.2/bfd/configure.in	2004-08-08 04:28:07.000000000 -0500
+@@ -164,7 +164,7 @@
+   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -249,7 +249,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -290,7 +290,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+@@ -378,7 +378,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxult2.h"'
+ 	;;
+-  vax-*-linux-gnu*)
++  vax-*-linux-gnu* | vax-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/vaxlinux.h"'
+ 	;;
+diff -urN gdb-6.2-dist/libtool.m4 gdb-6.2/libtool.m4
+--- gdb-6.2-dist/libtool.m4	2003-04-10 22:58:39.000000000 -0500
++++ gdb-6.2/libtool.m4	2004-08-08 03:48:33.000000000 -0500
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN gdb-6.2-dist/ltconfig gdb-6.2/ltconfig
+--- gdb-6.2-dist/ltconfig	2003-10-03 23:54:47.000000000 -0500
++++ gdb-6.2/ltconfig	2004-08-08 03:48:33.000000000 -0500
+@@ -602,7 +602,7 @@
+ 
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1259,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+diff -urN gdb-6.2-dist/opcodes/configure gdb-6.2/opcodes/configure
+--- gdb-6.2-dist/opcodes/configure	2004-07-07 12:28:53.000000000 -0500
++++ gdb-6.2/opcodes/configure	2004-08-08 04:53:55.000000000 -0500
+@@ -1701,6 +1701,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/openwrt/toolchain/gdb/6.2/200-uclibc-readline-conf.patch b/openwrt/toolchain/gdb/6.2/200-uclibc-readline-conf.patch
new file mode 100644
index 0000000000..ffe792dd05
--- /dev/null
+++ b/openwrt/toolchain/gdb/6.2/200-uclibc-readline-conf.patch
@@ -0,0 +1,15 @@
+--- gdb-6.1.1-dist/readline/configure	2003-05-27 18:29:47.000000000 -0500
++++ gdb-6.1.1/readline/configure	2004-08-09 14:20:23.000000000 -0500
+@@ -6249,7 +6249,12 @@
+ 
+ 
+ echo "$as_me:$LINENO: checking for mbstate_t" >&5
++echo $ECHO_N "bash_cv_have_mbstate_t=$bash_cv_have_mbstate_t" >&6
+ echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
++if test "${bash_cv_have_mbstate_t+set}" != set; then
++  bash_cv_have_mbstate_t=yes
++  echo $ECHO_N "WARNING!! forcing to yes!!! $ECHO_C" >&6
++fi
+ if test "${bash_cv_have_mbstate_t+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
diff --git a/openwrt/toolchain/gdb/Config.in b/openwrt/toolchain/gdb/Config.in
new file mode 100644
index 0000000000..a17b736dc6
--- /dev/null
+++ b/openwrt/toolchain/gdb/Config.in
@@ -0,0 +1,49 @@
+# Choose gcc version.
+# WARNING -- 2.95 currently only builds for i386, arm, mips*, and powerpc.
+# WARNING -- 2.95 does not currently build natively for the target.
+
+comment "Gdb Options"
+
+config BR2_PACKAGE_GDB
+	bool "Build gdb debugger for the Target"
+	default n
+	select BR2_PACKAGE_NCURSES
+	help
+	    Enable the gdb debugger.
+
+config BR2_PACKAGE_GDB_SERVER
+	bool "Build gdb server for the Target"
+	default n
+	select BR2_PACKAGE_NCURSES
+	help
+	    Enable the gdb debugger.
+
+choice
+	prompt "GDB debuger Version"
+	default BR2_GDB_VERSION_5_3
+	depends on BR2_PACKAGE_GDB || BR2_PACKAGE_GDB_SERVER || BR2_HOST_GDB
+	help
+	  Select the version of gcc you wish to use.
+
+	config BR2_GDB_VERSION_5.3
+		bool "gdb 5.3"
+
+	config BR2_GDB_VERSION_6_1_1
+		bool "gdb 6.1.1"
+
+	config BR2_GDB_VERSION_6_2
+		bool "gdb 6.2"
+
+	config BR2_GDB_VERSION_6_2_1
+		bool "gdb 6.2.1"
+
+endchoice
+
+config BR2_GDB_VERSION
+	string
+	default "5.3"      if BR2_GDB_VERSION_5.3
+	default "6.1.1"    if BR2_GDB_VERSION_6_1_1
+	default "6.2"      if BR2_GDB_VERSION_6_2
+	default "6.2.1"    if BR2_GDB_VERSION_6_2_1
+
+
diff --git a/openwrt/toolchain/gdb/Makefile.in b/openwrt/toolchain/gdb/Makefile.in
new file mode 100644
index 0000000000..51a2ddb3d0
--- /dev/null
+++ b/openwrt/toolchain/gdb/Makefile.in
@@ -0,0 +1,10 @@
+GDB_VERSION:=$(strip $(subst ",, $(BR2_GDB_VERSION)))
+#"
+
+ifeq ($(strip $(BR2_PACKAGE_GDB)),y)
+TARGETS+=gdb_target
+endif
+
+ifeq ($(strip $(BR2_PACKAGE_GDB_SERVER)),y)
+TARGETS+=gdbserver gdbclient
+endif
diff --git a/openwrt/toolchain/gdb/gdb.mk b/openwrt/toolchain/gdb/gdb.mk
new file mode 100644
index 0000000000..862f84d7f5
--- /dev/null
+++ b/openwrt/toolchain/gdb/gdb.mk
@@ -0,0 +1,189 @@
+######################################################################
+#
+# gdb
+#
+######################################################################
+GDB_VERSION:=$(strip $(GDB_VERSION))
+
+GDB_SITE:=http://ftp.gnu.org/gnu/gdb
+
+ifeq ($(GDB_VERSION),5.3)
+GDB_SOURCE:=gdb-$(GDB_VERSION).tar.gz
+GDB_CAT:=zcat
+else
+GDB_SOURCE:=gdb-$(GDB_VERSION).tar.bz2
+GDB_CAT:=bzcat
+endif
+
+GDB_DIR:=$(TOOL_BUILD_DIR)/gdb-$(GDB_VERSION)
+
+$(DL_DIR)/$(GDB_SOURCE):
+	$(WGET) -P $(DL_DIR) $(GDB_SITE)/$(GDB_SOURCE)
+
+$(GDB_DIR)/.unpacked: $(DL_DIR)/$(GDB_SOURCE)
+	$(GDB_CAT) $(DL_DIR)/$(GDB_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	toolchain/patch-kernel.sh $(GDB_DIR) toolchain/gdb/$(GDB_VERSION) \*.patch
+	# Copy a config.sub from gcc.  This is only necessary until
+	# gdb's config.sub supports <arch>-linux-uclibc tuples.
+	# Should probably integrate this into the patch.
+ifeq ($(GDB_VERSION),5.3)
+	chmod u+x $(GDB_DIR)/gdb/gdbserver/configure
+	cp $(GCC_DIR)/config.sub $(GDB_DIR)
+	cp $(GCC_DIR)/config.sub $(GDB_DIR)/readline/support/
+endif
+	touch  $(GDB_DIR)/.unpacked
+
+######################################################################
+#
+# gdb target
+#
+######################################################################
+
+GDB_TARGET_DIR:=$(BUILD_DIR)/gdb-$(GDB_VERSION)-target
+
+GDB_TARGET_CONFIGURE_VARS:= \
+	ac_cv_type_uintptr_t=yes \
+	gt_cv_func_gettext_libintl=yes \
+	ac_cv_func_dcgettext=yes \
+	gdb_cv_func_sigsetjmp=yes \
+	bash_cv_func_strcoll_broken=no \
+	bash_cv_must_reinstall_sighandlers=no \
+	bash_cv_func_sigsetjmp=present \
+	bash_cv_have_mbstate_t=yes
+
+$(GDB_TARGET_DIR)/.configured: $(GDB_DIR)/.unpacked
+	mkdir -p $(GDB_TARGET_DIR)
+	(cd $(GDB_TARGET_DIR); \
+		gdb_cv_func_sigsetjmp=yes \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS_FOR_TARGET="$(TARGET_CFLAGS)" \
+		$(GDB_TARGET_CONFIGURE_VARS) \
+		$(GDB_DIR)/configure \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(REAL_GNU_TARGET_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--prefix=/usr \
+		$(DISABLE_NLS) \
+		--without-uiout --disable-gdbmi \
+		--disable-tui --disable-gdbtk --without-x \
+		--disable-sim --enable-gdbserver \
+		--without-included-gettext \
+	);
+ifeq ($(ENABLE_LOCALE),true)
+	-$(SED) "s,^INTL *=.*,INTL = -lintl,g;" $(GDB_DIR)/gdb/Makefile
+endif
+	touch  $(GDB_TARGET_DIR)/.configured
+
+$(GDB_TARGET_DIR)/gdb/gdb: $(GDB_TARGET_DIR)/.configured
+	$(MAKE) CC=$(TARGET_CC) MT_CFLAGS="$(TARGET_CFLAGS)" \
+		-C $(GDB_TARGET_DIR)
+	$(STRIP) $(GDB_TARGET_DIR)/gdb/gdb
+
+$(TARGET_DIR)/usr/bin/gdb: $(GDB_TARGET_DIR)/gdb/gdb
+	install -c $(GDB_TARGET_DIR)/gdb/gdb $(TARGET_DIR)/usr/bin/gdb
+
+gdb_target: ncurses-headers $(TARGET_DIR)/usr/bin/gdb
+
+gdb_target-source: $(DL_DIR)/$(GDB_SOURCE)
+
+gdb_target-clean:
+	$(MAKE) -C $(GDB_DIR) clean
+
+gdb_target-dirclean:
+	rm -rf $(GDB_DIR)
+
+######################################################################
+#
+# gdbserver
+#
+######################################################################
+
+GDB_SERVER_DIR:=$(BUILD_DIR)/gdbserver-$(GDB_VERSION)
+
+$(GDB_SERVER_DIR)/.configured: $(GDB_DIR)/.unpacked
+	mkdir -p $(GDB_SERVER_DIR)
+	(cd $(GDB_SERVER_DIR); \
+		$(TARGET_CONFIGURE_OPTS) \
+		gdb_cv_func_sigsetjmp=yes \
+		$(GDB_DIR)/gdb/gdbserver/configure \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(REAL_GNU_TARGET_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--libexecdir=/usr/lib \
+		--sysconfdir=/etc \
+		--datadir=/usr/share \
+		--localstatedir=/var \
+		--mandir=/usr/man \
+		--infodir=/usr/info \
+		--includedir=$(STAGING_DIR)/include \
+		$(DISABLE_NLS) \
+		--without-uiout --disable-gdbmi \
+		--disable-tui --disable-gdbtk --without-x \
+		--without-included-gettext \
+	);
+	touch  $(GDB_SERVER_DIR)/.configured
+
+$(GDB_SERVER_DIR)/gdbserver: $(GDB_SERVER_DIR)/.configured
+	$(MAKE) CC=$(TARGET_CC) MT_CFLAGS="$(TARGET_CFLAGS)" \
+		-C $(GDB_SERVER_DIR)
+	$(STRIP) $(GDB_SERVER_DIR)/gdbserver
+
+$(TARGET_DIR)/usr/bin/gdbserver: $(GDB_SERVER_DIR)/gdbserver
+	install -c $(GDB_SERVER_DIR)/gdbserver $(TARGET_DIR)/usr/bin/gdbserver
+
+gdbserver: ncurses-headers $(TARGET_DIR)/usr/bin/gdbserver
+
+gdbserver-clean:
+	$(MAKE) -C $(GDB_SERVER_DIR) clean
+
+gdbserver-dirclean:
+	rm -rf $(GDB_SERVER_DIR)
+
+######################################################################
+#
+# gdb client
+#
+######################################################################
+
+GDB_CLIENT_DIR:=$(TOOL_BUILD_DIR)/gdbclient-$(GDB_VERSION)
+
+$(GDB_CLIENT_DIR)/.configured: $(GDB_DIR)/.unpacked
+	mkdir -p $(GDB_CLIENT_DIR)
+	(cd $(GDB_CLIENT_DIR); \
+		gdb_cv_func_sigsetjmp=yes \
+		$(GDB_DIR)/configure \
+		--prefix=$(STAGING_DIR) \
+		--build=$(GNU_HOST_NAME) \
+		--host=$(GNU_HOST_NAME) \
+		--target=$(REAL_GNU_TARGET_NAME) \
+		$(DISABLE_NLS) \
+		--without-uiout --disable-gdbmi \
+		--disable-tui --disable-gdbtk --without-x \
+		--without-included-gettext \
+		--enable-threads \
+	);
+	touch  $(GDB_CLIENT_DIR)/.configured
+
+$(GDB_CLIENT_DIR)/gdb/gdb: $(GDB_CLIENT_DIR)/.configured
+	$(MAKE) -C $(GDB_CLIENT_DIR)
+	strip $(GDB_CLIENT_DIR)/gdb/gdb
+
+$(TARGET_CROSS)gdb: $(GDB_CLIENT_DIR)/gdb/gdb
+	install -c $(GDB_CLIENT_DIR)/gdb/gdb $(TARGET_CROSS)gdb
+	ln -s ../../bin/$(REAL_GNU_TARGET_NAME)-gdb \
+		$(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/bin/gdb
+
+gdbclient: $(TARGET_CROSS)gdb
+
+gdbclient-clean:
+	$(MAKE) -C $(GDB_CLIENT_DIR) clean
+
+gdbclient-dirclean:
+	rm -rf $(GDB_CLIENT_DIR)
+
+
+
diff --git a/openwrt/toolchain/patch-kernel.sh b/openwrt/toolchain/patch-kernel.sh
new file mode 100755
index 0000000000..79401c2a74
--- /dev/null
+++ b/openwrt/toolchain/patch-kernel.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# A little script I whipped up to make it easy to
+# patch source trees and have sane error handling
+# -Erik
+#
+# (c) 2002 Erik Andersen <andersen@codepoet.org>
+
+# Set directories from arguments, or use defaults.
+targetdir=${1-.}
+patchdir=${2-../kernel-patches}
+patchpattern=${3-*}
+
+if [ ! -d "${targetdir}" ] ; then
+    echo "Aborting.  '${targetdir}' is not a directory."
+    exit 1
+fi
+if [ ! -d "${patchdir}" ] ; then
+    echo "Aborting.  '${patchdir}' is not a directory."
+    exit 1
+fi
+    
+for i in ${patchdir}/${patchpattern} ; do 
+    case "$i" in
+	*.gz)
+	type="gzip"; uncomp="gunzip -dc"; ;; 
+	*.bz)
+	type="bzip"; uncomp="bunzip -dc"; ;; 
+	*.bz2)
+	type="bzip2"; uncomp="bunzip2 -dc"; ;; 
+	*.zip)
+	type="zip"; uncomp="unzip -d"; ;; 
+	*.Z)
+	type="compress"; uncomp="uncompress -c"; ;; 
+	*)
+	type="plaintext"; uncomp="cat"; ;; 
+    esac
+    echo ""
+    echo "Applying ${i} using ${type}: " 
+    ${uncomp} ${i} | patch -p1 -E -d ${targetdir} 
+    if [ $? != 0 ] ; then
+        echo "Patch failed!  Please fix $i!"
+	exit 1
+    fi
+done
+
+# Check for rejects...
+if [ "`find $targetdir/ '(' -name '*.rej' -o -name '.*.rej' ')' -print`" ] ; then
+    echo "Aborting.  Reject files found."
+    exit 1
+fi
+
+# Remove backup files
+find $targetdir/ '(' -name '*.orig' -o -name '.*.orig' ')' -exec rm -f {} \;
diff --git a/openwrt/toolchain/uClibc/Config.in b/openwrt/toolchain/uClibc/Config.in
new file mode 100644
index 0000000000..335cab2455
--- /dev/null
+++ b/openwrt/toolchain/uClibc/Config.in
@@ -0,0 +1,23 @@
+# Choose uClibc options
+#
+
+comment "uClibc Options"
+
+config BR2_UCLIBC_VERSION_SNAPSHOT
+	bool "Use the daily snapshot of uClibc?"
+	default y
+	help
+	    Would you like to use the latest daily snapshot?
+
+config BR2_USE_UCLIBC_SNAPSHOT
+	string
+	default "snapshot"
+	depends on BR2_UCLIBC_VERSION_SNAPSHOT
+
+config BR2_ENABLE_LOCALE
+	bool "Enable locale/gettext/i18n support?"
+	default n
+	help
+	    Enable locale/gettext/i18n support?
+
+
diff --git a/openwrt/toolchain/uClibc/uClibc.config b/openwrt/toolchain/uClibc/uClibc.config
new file mode 100644
index 0000000000..4c3c5a1792
--- /dev/null
+++ b/openwrt/toolchain/uClibc/uClibc.config
@@ -0,0 +1,150 @@
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+TARGET_mips=y
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+ARCH_SUPPORTS_LITTLE_ENDIAN=y
+TARGET_ARCH="mips"
+ARCH_CFLAGS="-mno-split-addresses"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+ARCH_LITTLE_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+DO_C99_MATH=y
+WARNINGS="-Wall"
+KERNEL_SOURCE="/usr/src/cvs/new/buildroot/toolchain_build_mipsel/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+UCLIBC_CTOR_DTOR=y
+# UCLIBC_PROPOLICE is not set
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+PTHREADS_DEBUG_SUPPORT=y
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+# UCLIBC_HAS_WORDEXP is not set
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc development/debugging options
+#
+# DODEBUG is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MJN3_ONLY is not set
diff --git a/openwrt/toolchain/uClibc/uClibc.config-locale b/openwrt/toolchain/uClibc/uClibc.config-locale
new file mode 100644
index 0000000000..95a4983fc5
--- /dev/null
+++ b/openwrt/toolchain/uClibc/uClibc.config-locale
@@ -0,0 +1,142 @@
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+TARGET_ARCH="none"
+# ARCH_HAS_NO_MMU is not set
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+DO_C99_MATH=y
+WARNINGS="-Wall"
+KERNEL_SOURCE="/usr/src/linux"
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+HAVE_SHARED=y
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+UCLIBC_CTOR_DTOR=y
+# UCLIBC_PROPOLICE is not set
+# UCLIBC_PROFILING is not set
+UCLIBC_HAS_THREADS=y
+PTHREADS_DEBUG_SUPPORT=y
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+UCLIBC_HAS_LOCALE=y
+UCLIBC_PREGENERATED_LOCALE_DATA=y
+UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA=y
+UCLIBC_HAS_XLOCALE=y
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_DIGIT_GROUPING=y
+UCLIBC_HAS_SCANF_LENIENT_DIGIT_GROUPING=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GETTEXT_AWARENESS=y
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+# DODEBUG is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MJN3_ONLY is not set
diff --git a/openwrt/toolchain/uClibc/uclibc.mk b/openwrt/toolchain/uClibc/uclibc.mk
new file mode 100644
index 0000000000..d104ce145c
--- /dev/null
+++ b/openwrt/toolchain/uClibc/uclibc.mk
@@ -0,0 +1,167 @@
+#############################################################
+#
+# uClibc (the C library)
+#
+#############################################################
+
+ifeq ($(BR2_UCLIBC_VERSION_SNAPSHOT),y)
+# Be aware that this changes daily....
+UCLIBC_DIR:=$(TOOL_BUILD_DIR)/uClibc
+UCLIBC_SOURCE:=uClibc-$(strip $(subst ",, $(BR2_USE_UCLIBC_SNAPSHOT))).tar.bz2
+#"
+UCLIBC_SITE:=http://www.uclibc.org/downloads/snapshots
+else
+# Note: 0.9.26 has known problems.  So best use a snapshot until .27 is out.
+# Anticipate the change.
+UCLIBC_DIR:=$(TOOL_BUILD_DIR)/uClibc-0.9.27
+UCLIBC_SOURCE:=uClibc-0.9.27.tar.bz2
+UCLIBC_SITE:=http://www.uclibc.org/downloads
+endif
+
+UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \
+		-e 's/i.86/i386/' \
+		-e 's/sparc.*/sparc/' \
+		-e 's/arm.*/arm/g' \
+		-e 's/m68k.*/m68k/' \
+		-e 's/ppc/powerpc/g' \
+		-e 's/v850.*/v850/g' \
+		-e 's/sh64/sh/' \
+		-e 's/sh[234].*/sh/' \
+		-e 's/mips.*/mips/' \
+		-e 's/mipsel.*/mips/' \
+		-e 's/cris.*/cris/' \
+)
+
+
+$(DL_DIR)/$(UCLIBC_SOURCE):
+	mkdir -p $(DL_DIR)
+	$(WGET) -P $(DL_DIR) $(UCLIBC_SITE)/$(UCLIBC_SOURCE)
+
+$(UCLIBC_DIR)/.unpacked: $(DL_DIR)/$(UCLIBC_SOURCE)
+	mkdir -p $(TOOL_BUILD_DIR)
+	bzcat $(DL_DIR)/$(UCLIBC_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+	touch $(UCLIBC_DIR)/.unpacked
+
+$(UCLIBC_DIR)/.configured: $(UCLIBC_DIR)/.unpacked
+	$(SED) 's,^CROSS=.*,CROSS=$(TARGET_CROSS),g' $(UCLIBC_DIR)/Rules.mak
+ifeq ($(BR2_ENABLE_LOCALE),y)
+	cp toolchain/uClibc/uClibc.config-locale $(UCLIBC_DIR)/.config
+else
+	cp toolchain/uClibc/uClibc.config $(UCLIBC_DIR)/.config
+endif
+	$(SED) 's,^.*TARGET_$(UCLIBC_TARGET_ARCH).*,TARGET_$(UCLIBC_TARGET_ARCH)=y,g' \
+		$(UCLIBC_DIR)/.config
+	$(SED) 's,^TARGET_ARCH.*,TARGET_ARCH=\"$(UCLIBC_TARGET_ARCH)\",g' $(UCLIBC_DIR)/.config
+	$(SED) 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE=\"$(LINUX_HEADERS_DIR)\",g' \
+		$(UCLIBC_DIR)/.config
+	$(SED) 's,^RUNTIME_PREFIX=.*,RUNTIME_PREFIX=\"/\",g' \
+		$(UCLIBC_DIR)/.config
+	$(SED) 's,^DEVEL_PREFIX=.*,DEVEL_PREFIX=\"/usr/\",g' \
+		$(UCLIBC_DIR)/.config
+	$(SED) 's,^SHARED_LIB_LOADER_PREFIX=.*,SHARED_LIB_LOADER_PREFIX=\"/lib\",g' \
+		$(UCLIBC_DIR)/.config
+ifeq ($(BR2_LARGEFILE),y)
+	$(SED) 's,^.*UCLIBC_HAS_LFS.*,UCLIBC_HAS_LFS=y,g' $(UCLIBC_DIR)/.config
+else
+	$(SED) 's,^.*UCLIBC_HAS_LFS.*,UCLIBC_HAS_LFS=n,g' $(UCLIBC_DIR)/.config
+endif
+	$(SED) 's,.*UCLIBC_HAS_WCHAR.*,UCLIBC_HAS_WCHAR=y,g' $(UCLIBC_DIR)/.config
+ifeq ($(BR2_SOFT_FLOAT),y)
+	$(SED) 's,.*HAS_FPU.*,HAS_FPU=n\nUCLIBC_HAS_FLOATS=y\nUCLIBC_HAS_SOFT_FLOAT=y,g' $(UCLIBC_DIR)/.config
+endif
+	mkdir -p $(TOOL_BUILD_DIR)/uClibc_dev/usr/include
+	mkdir -p $(TOOL_BUILD_DIR)/uClibc_dev/usr/lib
+	mkdir -p $(TOOL_BUILD_DIR)/uClibc_dev/lib
+	$(MAKE1) -C $(UCLIBC_DIR) \
+		PREFIX=$(TOOL_BUILD_DIR)/uClibc_dev/ \
+		DEVEL_PREFIX=/usr/ \
+		RUNTIME_PREFIX=$(TOOL_BUILD_DIR)/uClibc_dev/ \
+		HOSTCC="$(HOSTCC)" \
+		pregen install_dev;
+	touch $(UCLIBC_DIR)/.configured
+
+$(UCLIBC_DIR)/lib/libc.a: $(UCLIBC_DIR)/.configured $(LIBFLOAT_TARGET)
+	$(MAKE1) -C $(UCLIBC_DIR) \
+		PREFIX= \
+		DEVEL_PREFIX=/ \
+		RUNTIME_PREFIX=/ \
+		HOSTCC="$(HOSTCC)" \
+		all
+	touch -c $(UCLIBC_DIR)/lib/libc.a
+
+$(STAGING_DIR)/lib/libc.a: $(UCLIBC_DIR)/lib/libc.a
+	$(MAKE1) -C $(UCLIBC_DIR) \
+		PREFIX=$(STAGING_DIR)/ \
+		DEVEL_PREFIX=/ \
+		RUNTIME_PREFIX=/ \
+		install_runtime
+	$(MAKE1) -C $(UCLIBC_DIR) \
+		PREFIX=$(STAGING_DIR)/ \
+		DEVEL_PREFIX=/ \
+		RUNTIME_PREFIX=/ \
+		install_dev
+	# Build the host utils.  Need to add an install target...
+	$(MAKE1) -C $(UCLIBC_DIR)/utils \
+		PREFIX=$(STAGING_DIR) \
+		HOSTCC="$(HOSTCC)" \
+		hostutils
+	touch -c $(STAGING_DIR)/lib/libc.a
+
+ifneq ($(TARGET_DIR),)
+$(TARGET_DIR)/lib/libc.so.0: $(STAGING_DIR)/lib/libc.a
+	$(MAKE1) -C $(UCLIBC_DIR) \
+		PREFIX=$(TARGET_DIR) \
+		DEVEL_PREFIX=/usr/ \
+		RUNTIME_PREFIX=/ \
+		install_runtime
+	touch -c $(TARGET_DIR)/lib/libc.so.0
+
+$(TARGET_DIR)/usr/bin/ldd:
+	$(MAKE1) -C $(UCLIBC_DIR) $(TARGET_CONFIGURE_OPTS) \
+		PREFIX=$(TARGET_DIR) utils install_utils
+	touch -c $(TARGET_DIR)/usr/bin/ldd
+
+UCLIBC_TARGETS=$(TARGET_DIR)/lib/libc.so.0
+endif
+
+uclibc-configured: $(UCLIBC_DIR)/.configured
+
+uclibc: $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc $(STAGING_DIR)/lib/libc.a \
+	$(UCLIBC_TARGETS)
+
+uclibc-source: $(DL_DIR)/$(UCLIBC_SOURCE)
+
+uclibc-configured-source: uclibc-source
+
+uclibc-clean:
+	-$(MAKE1) -C $(UCLIBC_DIR) clean
+	rm -f $(UCLIBC_DIR)/.config
+
+uclibc-dirclean:
+	rm -rf $(UCLIBC_DIR)
+
+uclibc-target-utils: $(TARGET_DIR)/usr/bin/ldd
+
+#############################################################
+#
+# uClibc for the target just needs its header files
+# and whatnot installed.
+#
+#############################################################
+
+$(TARGET_DIR)/usr/lib/libc.a: $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib/libc.a
+	$(MAKE1) -C $(UCLIBC_DIR) \
+		PREFIX=$(TARGET_DIR) \
+		DEVEL_PREFIX=/usr/ \
+		RUNTIME_PREFIX=/ \
+		install_dev
+	touch -c $(TARGET_DIR)/usr/lib/libc.a
+
+uclibc_target: gcc uclibc $(TARGET_DIR)/usr/lib/libc.a $(TARGET_DIR)/usr/bin/ldd
+
+uclibc_target-clean:
+	rm -f $(TARGET_DIR)/include
+
+uclibc_target-dirclean:
+	rm -f $(TARGET_DIR)/include
+
-- 
GitLab